def compute_components(domask): """ Returns: x: 1-D array with x coordinates y: 1-D array with y coordinates u: 2-D array with x vector components v: 2-D array with y vector components """ uf, vf = velocity_field(cylinder_stream_function(R=RADIUS)) y, x = np.ogrid[XMIN:XMAX:N*1j, XMIN:XMAX:N*1j] u = uf(x,y) v = vf(x, y) xx, yy = np.mgrid[XMIN:XMAX:N*1j, XMIN:XMAX:N*1j] r = np.sqrt(xx**2 + yy**2) mask = r <= RADIUS if domask: u[mask] = 0 v[mask] = 0 x = x.reshape((N,)) y = y.reshape((N,)) return x, y, u, v
def compute_components(domask): """ Returns: x: 1-D array with x coordinates y: 1-D array with y coordinates u: 2-D array with x vector components v: 2-D array with y vector components """ uf, vf = velocity_field(cylinder_stream_function(R=RADIUS)) y, x = np.ogrid[XMIN:XMAX:N * 1j, XMIN:XMAX:N * 1j] u = uf(x, y) v = vf(x, y) xx, yy = np.mgrid[XMIN:XMAX:N * 1j, XMIN:XMAX:N * 1j] r = np.sqrt(xx**2 + yy**2) mask = r <= RADIUS if domask: u[mask] = 0 v[mask] = 0 x = x.reshape((N, )) y = y.reshape((N, )) return x, y, u, v
# значением можно поиграть, чтобы получить представление # каким образом скорость обучения влияет на скорость сходимости alpha = 0.01 # 20 итераций поиска iterations = 20 # Вектор значений - мы хотим вывести на экран траекторию, # поэтому двумерный массив [итерции, 2] solution = np.zeros((iterations, 2)) x0 = np.array((1, 1)).reshape(2, 1) # преобразуем начальное приближение в вектор столбец solution[0, :] = x0.reshape(1, 2) print("x0: " + str(solution[0, :])) # Цикл - смотри формулу 3 (наискорейший спуск), шаги 7 и 8 примера выполения for i in range(0, iterations): # умножаем матрицу Гессе на значение вектора параметров на предыдущем шаге # формула 3 и 5 - метод наискорейшего спуска g = np.array((7, -6, -6, -2)).reshape(2, 2).dot(x0) # формула 3, шаги 7 и 8 x = x0 - alpha * g # обновление значений для следующего шага x0 = x solution[i, :] = x.reshape(1, 2) print("x: " + str(solution[i, :])) cc.plot(solution[:, 0], solution[:, 1], 'r^') # вывод графического изображения на экран plt.grid() plt.show()
def hhej(x, y): return x.reshape(-1, 1) + y