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

使用Scipy拟合逻辑斯蒂增长曲线结果不符合预期的问题求助

问题原因

  • 初始参数K的猜测值严重偏离合理范围:逻辑斯蒂模型中K代表环境容纳量,需大于等于观测到的种群最大值,你设置的初始K为12.9,但观测数据中酵母最大数量已经达到659.6,偏差过大导致拟合算法收敛到错误结果。
  • 初始种群数量N0不匹配观测起点:你设置N0为0.37,但观测序列的第一个点t=0对应的酵母数量为9.6,微分方程初始条件和观测数据起始值不一致,进一步干扰拟合效果。
  • 原代码缺失matplotlib.pyplot导入语句,直接调用plt会触发名称错误。

修正后代码

import scipy.optimize as optim
from scipy.integrate import odeint
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 初始值匹配t=0的观测数据
N0 = 9.6
# K的初始值调整为略大于观测最大值,r保持合理的增长速率猜测
parsic = [0.5, 700]

df_yeast = pd.DataFrame({'cd': [9.6, 18.3, 29., 47.2, 71.1, 119.1, 174.6, 257.3, 350.7, 441., 513.3, 559.7, 594.8, 629.4, 640.8, 651.1, 655.9, 659.6], 'td': np.arange(18)})

def logistic_de(t, N, r, K):
    return r*N*(1 - N/K)

def logistic_solution(t, r, K):
    return odeint(logistic_de, N0, t, (r, K), tfirst=True).ravel()

params, _ = optim.curve_fit(logistic_solution, df_yeast['td'], df_yeast['cd'], p0=parsic)

N1 = odeint(logistic_de, N0, np.linspace(0, 20, 10000), (params[0], params[1]), tfirst=True)

plt.plot(np.linspace(0, 20, 10000), N1)
plt.scatter(df_yeast['td'], df_yeast['cd'])
plt.ylabel('num yeast')
plt.xlabel('time')
plt.show()

效果说明

调整后拟合得到的参数符合逻辑斯蒂增长的规律,曲线会贴合观测点,和预期输出一致。

内容的提问来源于stack exchange,提问作者An Ignorant Wanderer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:36:03