【问题标题】:Solve a system of equations using Runge Kutta of order 4 in python在 python 中使用 4 阶 Runge Kutta 求解方程组
【发布时间】:2021-10-21 12:17:35
【问题描述】:

我想使用 4 阶数值方法 Runge Kutta 求解以下系统:

y'=-x-y x'=-x+sin(t)

初始条件 x(0)=0.75 和 y(0)=0

使用订单代码 4 的 RungeKutta 我试过这个:

def GlucoseTT(x, t, params):

a = params["a"]
b= params["b"]
c= params["c"]

xdot= np.array([a*x[0]-b*x[1], -c*x[0]+np.sin(t)])

return xdot



def RK4(f, x0, t0, tf, dt):
   t=np.arange(t0,tf,dt)
   nt=t.size

nx=x0.size
x=np.zeros((nx,nt))

x[:,0]=x0

for k in range(nt-1):
    k1= dt*f(t[k], x[:,k])
    k2= dt*f(t[k]+dt/2, x[:,k]+k1/2)
    k3= dt*f(t[k]+dt/2, x[:,k]+k2/2)
    k4= dt*f(t[k]+dt, x[:,k]+k3)
    
    dx=(k1+2*k2+2*k3+k4)/6
    
    x[:,k+1]=x[:,k]+dx
return x, t

#Define Problem

params = {"a":1, "b":1, "c":1}
f= lambda t, x : GlucoseTT(x, t, params)

x0= np.array([0.75,0])


#Solve ODE
t0=0
tf= 100
dt= 0.1

x,t =RK4(f, x0, t0, tf, dt)

plt.plot(t,x[0,:],"r")

我不知道这段代码是否有效......

【问题讨论】:

  • 我不熟悉数学,但在 scipy 文档中的搜索显示了 scipy.integrate.RK45 以及其他具有不同顺序的 Range-Kutta 函数 (docs.scipy.org/doc/scipy/reference/…)。其中一个有用吗?
  • 请比“我不知道此代码是否有效....”更具体一些您尝试过并遇到错误吗?程序是否通过但给出了意想不到的结果? /// 请使用代码围栏调查代码格式,并将缩进更正为实际代码的缩进,尤其是在 RK4 函数中。
  • 修复缩进后,剩下的问题是方程系统的粗心和错误的转录。存在符号和索引错误。校正它们会产生预期的强制振荡,幅度稳定在 0.5。 /// 我投票关闭,因为这是一个错字级别的问题。

标签: python numerical-methods ode runge-kutta


【解决方案1】:

不是答案,而是方程的解,以便大家比较:

X = C e^-t + (sin(t) - cos(t)) / 2
Y = D e^-t - C t e^-t + cos(t) / 2

初始条件给系统

0.75 = C - 0.5
0    = D + 0.5

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-25
    • 2021-06-14
    • 1970-01-01
    • 2023-02-18
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多