Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用scipy在python中求解二维微分方程_Python_Scipy_Ode - Fatal编程技术网

用scipy在python中求解二维微分方程

用scipy在python中求解二维微分方程,python,scipy,ode,Python,Scipy,Ode,我是python的新手。我有一个简单的微分系统,它由两个变量和两个微分方程以及初始条件组成 dx/dt=6*y dy/dt=(2t-3x)/4y 现在我正试图解这两个微分方程,我选择了odeint。这是我的密码: import matplotlib.pyplot as pl import numpy as np from scipy.integrate import odeint def func(z,b): x, y=z return [6*y, (b-3*x)/(4*y)

我是python的新手。我有一个简单的微分系统,它由两个变量和两个微分方程以及初始条件组成

dx/dt=6*y
dy/dt=(2t-3x)/4y
现在我正试图解这两个微分方程,我选择了
odeint
。这是我的密码:

import matplotlib.pyplot as pl
import numpy as np
from scipy.integrate import odeint

def func(z,b):
    x, y=z
    return [6*y, (b-3*x)/(4*y)]    

z0=[1,2]
t = np.linspace(0,10,11)
b=2*t
xx=odeint(func, z0, b)
pl.figure(1)
pl.plot(t, xx[:,0])
pl.legend()
pl.show()
但结果不正确,并显示一条错误消息:

Excess work done on this call (perhaps wrong Dfun type).
Run with full_output = 1 to get quantitative information.

我不知道我的代码出了什么问题以及如何解决它。
任何帮助对我都是有用的。

应用技巧,按
y
取消除法,打印所有ODE函数求值,绘制两个分量,并使用正确的微分方程和修改后的代码

import matplotlib.pyplot as pl
import numpy as np
from scipy.integrate import odeint

def func(z,t):
    x, y=z
    print t,z
    return [6*y, (2*t-3*x)*y/(4*y**2+1e-12)]    

z0=[1,2]
t = np.linspace(0,1,501)
xx=odeint(func, z0, t)
pl.figure(1)
pl.plot(t, xx[:,0],t,xx[:,1])
pl.legend()
pl.show()
你可以看到,在
t=0.64230232515
处,假设
y=0
的奇异性,其中
y
在其顶点表现为一个平方根函数。没有办法跨越这个奇点,因为
y
的斜率是无穷大的。此时,解不再是连续可微的,因此这是解的极值点。常数延拓是去角化的产物,不是有效的解决方案


与中相同的错误消息和上下文。只是一个简单的函数。可能的答案是。这与运行您的函数时遇到的
lsoda
警告相同。他说问题不在于代码,而在于ode的行为。谢谢你,我正在阅读链接的问题。我想知道,我有没有用odeint权来解这两个微分方程?我从未使用odeint来求解两个微分方程您正确地使用了接口,但是您没有实现宣布的ODE。在求解
y'(t)=f(2t,y(t))
y'(t)=f(t,y(t))
时有一个差异,这不是通过加倍采样点来解决的。
integrate.odeint(func[1,2],np.linspace(0,6,10))
运行良好。但是当我升到0.7时,我开始得到这个警告。正如
LutzL
所指出的,
y
太接近于0,你的导数爆炸了。