我绘制了一阶非线性微分方程。但是我不知道如何知道情节的方程式。请原谅我的无知。
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
import math
def dy_dx(y,x,z):
c_1 = 5.0 / (1.38 * 1223.0 * pow(10.0, 28.0)*pow(z,3.0))
c_2 = pow(10.0, 5.0)
return c_1 * ( y/math.sqrt(1.0+pow(y, 2.0)) ) * ( ((1.0-pow(y, 3.0))/(z* pow(y,(1.0/3.0)))) - (y * c_2) )
xs = np.linspace(0, pow(10.0, 12.0), pow(10.0, 6.0))
y_0 = 1.0
z = 0.00001
y1 = odeint(dy_dx, y_0, xs, args=(z,))
z = 0.000015
y2 = odeint(dy_dx, y_0, xs, args=(z,))
y1 = np.array(y1).flatten()
y2 = np.array(y2).flatten()
plt.rcParams.update({'font.size': 10})
plt.ylim(0,1.0)
plt.xlabel("x")
plt.ylabel("y")
plt.plot(xs, y1, 'r-')
plt.plot(xs, y2, 'b-')
plt.grid(True)
plt.show()
非常不可能存在任何符号解决方案,在右边具有第三幂和第三根。定性行为的相关因素是
y^(2/3)*(1-y^3-c2*z*y^(4/3))
剩下的是正非零因子。一维动力学非常简单,右侧的根是平衡位置,中间的符号告诉您该间隔内的溶液是下降还是增长。
在y=0
,您可以分支类似于y'=C*y^(2/3)
的解决方案,因为该函数不在本地Lipschitz中。
多项式u^9+a*u^4-1=0
,a=c_2*z
正好有一个正根u_ast
,y_equi=u_ast^3
,对于小a
,它接近u=1
(下一个近似值u=1/(1+a)^(1/4)~1/(1+a/4)
),对于大a
]接近u=a^(-1/4)
,y=a^(-3/4)
;和零或两个负根。当ODE越过y_equi
时,其右侧的符号将从正变为负,因此这是一个稳定的平衡。
[在您使用c2=1e5
和z=1e-5
或z=1.5e-5
的示例中,它们之间是a=1
或a=1.5
,中间值定理告诉我们在0和1之间有一个根,[C0 ]和u_ast=0.89345331
在第一种情况下,y_equi=0.71320698
和u_ast=0.84759991
在第二种情况下。这正是您在图中看到的。
关于正y_equi=0.60893748
,您希望从该方程式中提取出所有理论上的内容。