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

Sympy求解Logistic微分方程后无法用Matplotlib/Sympy绘图问题求助

Logistic微分方程绘图问题修正

你的代码存在几个关键问题导致无法正常绘图,以下是具体分析和修正方案:

问题点梳理

  1. 时间点数量不足:np.linspace(0, 10, 1)仅生成1个时间点,没有足够数据支撑曲线绘制,至少需要几十个点才能呈现趋势。
  2. 符号表达式无法直接用于绘图:f是SymPy的符号函数,Matplotlib无法直接解析,需要转换为可计算数值的函数。
  3. 绘图参数顺序错误:plt.plot(f, ft)颠倒了x轴(时间)和y轴(函数值)的参数顺序,不符合Matplotlib的绘图逻辑。

修正后的完整代码

import sympy as sm
import numpy as np
import matplotlib.pyplot as plt

from sympy.abc import L, k, t
y = sm.Function('y')(t)

# 定义Logistic微分方程:y' = ky(L-y)
dy = y.diff(t)
rhs = k*y*(L - y)
eq = sm.Eq(dy, rhs)
print('微分方程:')
sm.pretty_print(eq)

print('微分方程通解:')
sol = sm.dsolve(eq)
sm.pretty_print(sol)

print('初始条件y(0)=800的特解:')
t0 = sol.args[1].subs({'t': 0})
n0 = 800
eq_init = sm.Eq(n0, t0)

C1 = t0.args[2].args[0].args[0]
t0_sol = sm.solve(eq_init, C1)
final = sol.args[1].subs(C1, t0_sol[0])
final_eq = final.simplify()
sm.pretty_print(final_eq.subs([(L,2000),(k,0.0003)]))

# 修正部分
# 1. 生成足够多的时间采样点
ft = np.linspace(0, 10, 100)
# 2. 将符号表达式转换为NumPy兼容的数值计算函数
f_numeric = sm.lambdify(t, final_eq.subs([(L,2000),(k,0.0003)]), 'numpy')
# 3. 计算每个时间点对应的函数值
y_values = f_numeric(ft)
# 4. 按x轴(时间)、y轴(函数值)的顺序绘图
plt.plot(ft, y_values)
plt.xlabel('时间t')
plt.ylabel('y(t)')
plt.title('Logistic微分方程解的曲线')
plt.show()

额外可选方案(SymPy原生绘图)

如果不想依赖Matplotlib,也可以直接用SymPy内置的绘图功能替换最后部分代码:

f_sym = final_eq.subs([(L,2000),(k,0.0003)])
sm.plot(f_sym, (t, 0, 10), xlabel='t', ylabel='y(t)', title='Logistic解曲线')

内容的提问来源于stack exchange,提问作者Freya the Goddess

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:07:36