В качестве теста для более сложной системы я хочу решить дифференциальное уравнение dw/dz = w, где функция w = w(z) является комплексной, а z = x+iy, как обычно. Граничные условия таковы: w = i, когда z = i. Решение, конечно, сложное и определено на аргановой плоскости. Я надеялся решить эту проблему с помощью некоторых стандартных решателей ODE в python. Мой метод состоит в том, чтобы сначала определить сетку в плоскости арганда (линии с постоянными x и y), а затем перебрать каждую линию сетки и вызвать решатель ОДУ на каждой итерации. В приведенном ниже коде я пытаюсь интегрировать свое дифференциальное уравнение между 1j и 2j, но результирующий вектор w равен всего 1j! Может ли кто-нибудь посоветовать мне, что делать? Спасибо
from scipy.integrate import ode
import numpy as np
from matplotlib.pylab import *
def myodeint(func, w0, z):
w0 = np.array(w0, complex)
func2 = lambda z, w: func(w, z) # odeint has these the other way :/
z0 = z[0]
solver = ode(func2).set_integrator('zvode').set_initial_value(w0, z0)
w = [solver.integrate(zp) for zp in z[1:]]
w.insert(0, w0)
return np.array(w)
def func2(w, z, alpha):
return alpha*w
if __name__ == '__main__':
# Set grid size in z plane
x_max = 3
x_min = 0
y_max = 3
y_min = 0
# Set grid resolution
dx = 0.1
dy = 0.1
# Number of nodes
x_nodes = int(np.floor((x_max-x_min)/dx)+1)
y_nodes = int(np.floor((y_max-y_min)/dy)+1)
# Create array to store value of w(z) at each node
ww = np.zeros((y_nodes,x_nodes), complex)
# Set boundary condition: w = w0 at x = x0, y = y0
x0 = 0
y0 = 1
i0 = (x0-x_min)/dx
j0 = (y_max-y0)/dy
w0 = 1j
ww[j0,i0] = w0
z0 = 1j
alpha = 1
z = np.linspace(z0, z0+1j, 200)
w = myodeint(lambda w, z: func2(w, z, alpha), [w0, 0, 0], z)
z
. Это чисто воображаемый вектор. Если такой вектор используется дляtspan
с одним из решателей ОДУ Matlab (например,ode45
), возникает ошибка: записи в tspan должны строго увеличиваться или уменьшаться. Действительно лиz
должно быть сложным? Вы уверены, что использование интегратора ODE целесообразно, а не квадратурный метод< /а>? - person horchler   schedule 28.11.2013