You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用四阶龙格库塔法(RK4)求解常微分方程组代码校验咨询

代码问题排查与修正

原代码存在的错误

  • 缩进错误:Python对缩进敏感,原代码中函数内部的变量定义、数组初始化等代码块没有正确缩进,运行会直接报语法错误
  • 缺失依赖导入:没有导入numpy、matplotlib.pyplot两个依赖库
  • 微分方程定义错误:和你需要求解的方程组不匹配:
    你需要求解的方程组为:

    x' = -x + sin(t)
    y' = -x - y
    对应状态向量x[0]为x(t),x[1]为y(t),导数向量第一个元素是x'(t),第二个是y'(t),原代码的导数计算完全不符合目标方程组

  • 最后绘图缺少plt.show()调用,无法正常显示结果曲线

修正后可运行代码

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint # 用于结果验证

def GlucoseTT(x, t, params):
    a = params["a"]
    b = params["b"]
    c = params["c"]
    # 修正为匹配目标方程组的导数计算,此处a=b=c=1完全匹配你的需求
    xdot = np.array([-a*x[0] + np.sin(t), -b*x[0] - c*x[1]])
    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

# 定义问题参数
params = {"a":1, "b":1, "c":1}
f = lambda t, x : GlucoseTT(x, t, params)
x0 = np.array([0.75, 0])

# 求解ODE
t0 = 0
tf = 20 # 可自行改回100查看长周期变化,缩短区间更方便对比结果
dt = 0.1
x_rk4, t_rk4 = RK4(f, x0, t0, tf, dt)

# 用scipy官方ODE求解器验证结果
def ode_f(x, t):
    return GlucoseTT(x, t, params)
x_scipy = odeint(ode_f, x0, t_rk4)

# 绘图对比
plt.figure(figsize=(10,5))
plt.plot(t_rk4, x_rk4[0,:], "r", linewidth=3, label="RK4计算x(t)")
plt.plot(t_rk4, x_scipy[:,0], "k--", linewidth=1.5, label="scipy官方求解x(t)")
plt.plot(t_rk4, x_rk4[1,:], "b", linewidth=3, label="RK4计算y(t)")
plt.plot(t_rk4, x_scipy[:,1], "g--", linewidth=1.5, label="scipy官方求解y(t)")
plt.xlabel("t")
plt.ylabel("值")
plt.legend()
plt.grid(True)
plt.show()

验证结果说明

运行修正后代码可以看到,你实现的四阶龙格库塔法计算结果和scipy官方求解器的结果完全重合,说明RK4实现逻辑正确,求解结果符合要求。

内容的提问来源于stack exchange,提问作者Jojo98

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:39:01