使用Python解决耦合的复杂ODE(在空间中传播两个时间相关的信号)

时间:2018-12-19 09:33:12

标签: python solver ode odeint

我正在尝试模拟非线性材料中的波传播。我考虑了一个基波![A(z,t)],它以z0的定义信号形状进入材料,而第二谐波B(z,t)的B(z0,t)=0。非线性效应在材料中引起基波A(z,t)在沿z方向穿过材料时产生二次谐波B(z,t)。

生成可以描述如下:

enter image description here

我试图使用Python的odeint这样实现:

def NL_coupling(t, Amp, c):
A, B = Amp
rho1, rho2 = c

return [1j * rho1 * B * np.conj(A),
        1j * rho2 * A * A]

solveNonlinear = integrate.ode(NL_coupling).set_integrator('zvode', method='bdf')
solveNonlinear.set_f_params(paramCoupling).set_initial_value([A, B], 0)

当我尝试迭代求解器时,出现以下错误:

ZWORK length needed, LENZW (=I1), exceeds LZW (=I2)

我使用相同的求解器传播单个波而没有耦合,效果很好。请记住,A和B是包含时间分辨脉冲形式的(复杂)阵列。 那么我怎么可能呢? 我尝试求解单个时间点t的ODE,因此[A,B]是仅包含两个元素的列表,而不是遍历整个信号。但是由于求解器不会每次都计算出完全相同的点的值,因此该方法并没有真正提供有用的结果。

感谢您的帮助

0 个答案:

没有答案