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

Python求解绘制微分方程搭建病毒模型的语法错误求助

病毒传播微分方程Python代码报错修复

问题定位

你遇到的倒数第四行语法错误,以及代码逻辑层面的问题共5处:

  • 直接触发语法报错的原因:odeint调用语句末尾缺失闭合右括号
  • odeint参数顺序错误:该函数固定传参顺序为odeint(微分方程函数, 初始状态向量, 时间点数组, 其他参数),你代码里把时间数组t和初始值的位置写反了
  • 微分方程模型的参数顺序不符合接口要求:odeint要求传入的模型函数,第一个参数为状态变量向量,第二个参数为时间t,后续才是通过args传入的自定义参数;你写的模型参数顺序完全不符合接口规范
  • 初始值缺失:你的模型是包含T(未感染细胞)、I(感染细胞)、V(病毒载量)三个变量的三维方程组,不能只传入V0一个初始值,需要把三个变量的初始值组成数组传入
  • 微分方程公式笔误:未感染细胞的变化率dTdt你写的是-β*t*V,正确应为-β*T*V,乘以的是当前未感染细胞浓度T而非时间t

修正后可运行代码

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

# 定义微分方程模型,参数顺序严格符合odeint要求:状态向量y, 时间t, 其他固定参数
def model(y, t, β, δ, p, c):
    T, I, V = y  # 从状态向量中拆分三个变量
    dTdt = -β * T * V
    dIdt = β * T * V - δ * I
    dVdt = p * I - c * V
    return [dTdt, dIdt, dVdt]

# 模型固定参数
β = 10**-5
δ = 4
p = 2*(10**6)
c = 4

# 初始条件:[T0, I0, V0]
y0 = [1, 0, 10**-3]

# 时间点
t = np.linspace(0, 25, 100)

# 求解ODE,参数顺序正确,补全闭合括号
y = odeint(model, y0, t, args=(β, δ, p, c))
V = y[:, 2]  # 从求解结果中提取病毒载量V的序列

# 绘图
plt.plot(t, V)
plt.xlabel('time')
plt.ylabel('V(t)')
plt.show()

补充说明

运行修正后的代码即可得到25个时间单位内的病毒载量变化曲线,如果需要同时绘制T、I、V三个变量的变化,直接从解出的y数组中按列提取对应变量即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:48:17