matlab myode,用Python(或Matlab)求解复杂域中的ODE

作为对更复杂系统的测试,我想解一个微分方程dw/dz=w,其中函数w=w(z)是复值,z=x+iy。当z=i时,边界条件为w=i。解当然是复杂的,并且定义在argand平面上。我希望用python中的一些标准ODE解算器来解决这个问题。我的方法是首先在argand平面中定义一个网格(x和y的常量行),然后循环每个网格线,在每次迭代时调用ODE解算器。在下面的代码中,我试图对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)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值