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

MATLAB实现差分方程时数组c1、c2迭代未更新问题求助

问题原因分析
  • 第一是赋值笔误,循环体中第二行差分计算语句本该更新c2的值,错误写成了给c1赋值:
    原错误代码:
    c1((k+1)*h)=c2(k*h)+h*A2*c1(k*h)+h*B2*c2(k*h);
    
    这行代码会直接覆盖上一行刚计算完成的c1((k+1)*h)结果,且全程没有给c2数组写入任何新值,c2永远保持初始化的0值。
  • 第二是初始值全零的连锁影响:
    初始化时c1(1)、c2(1)均为0,后续迭代中c2始终为0,就算给药项vec_doses(k)不为零,第一次迭代计算出的c1((k+1)*h)也会被后续错误赋值覆盖为0,所有迭代的计算输入始终全零,最终c1、c2数组全部保持初始零值。
修复方案

把循环体中第二行的赋值对象改为c2即可:

for k=1:(n_dias-1)
    t(k+1)=k; 
    c1((k+1)*h)=c1(k*h)+h*A1*c1(k*h)+h*B1*c2(k*h)+h*D1*vec_doses(k);
    % 把赋值对象从c1改为c2
    c2((k+1)*h)=c2(k*h)+h*A2*c1(k*h)+h*B2*c2(k*h);
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:45:02