Matlab系统微分方程,递归定义

时间:2015-05-18 20:40:35

标签: matlab ode

我正在寻找一种紧凑而有效的方法来解决以下问题。 我有一个微分方程系统,比如3,我想将它扩展为分子动力学类型计算。

目前这是起点

function dy = molec(t,y)
dy = zeros(3,1);
A = 1;
B = 1;
dy(1) = (A/B)*   (2 * (y(2)-y(1)) - 0.5) ;
dy(2) = (A/B)*  (  2* ( y(1) - y(2) )  + 4* (y(3)-y(2))    )     ;
dy(3) = (A/B)*  ( 6 * (- y(3)) + 4 * (  y(2) - y(3) )    );

我希望总共有100-150个变量。我可以通过键入来添加更多dy(n)定义,但这很难实用。我想改为利用问题的递归定义。 实际上,给定已知序列a_n,定义第n项

dy(n) = (A/B)* a_n*(y_{n-1} - y{n}) + a_{n-1}*y_{n+1} - y_{n})

任何帮助都会非常感激,谢谢

1 个答案:

答案 0 :(得分:0)

这是一个迭代定义,内部没有任何递归。

使用类似

的内容
diff = y(2:N)-y(1:N-1)
dy(1:N-1)=a(1:N-1) .* diff
dy(2:N) = dy(2:N) - a(2:N) .* diff
dy(1) = dy(1) + ...
dy(N) = dy(N) + ...
dy = dy * (A/B)

或直接实现公式的for循环。