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
相关产品推荐
相关产品推荐

