Matlab系统微分方程,递归定义
Matlab system differential equations, recursive definition
我正在寻找一种紧凑而有效的方法来解决以下问题。
我有一个微分方程组,比如 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})
非常感谢任何帮助,谢谢
这是一个迭代定义,里面没有任何递归。
使用类似
的东西
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
循环。
我正在寻找一种紧凑而有效的方法来解决以下问题。 我有一个微分方程组,比如 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})
非常感谢任何帮助,谢谢
这是一个迭代定义,里面没有任何递归。
使用类似
的东西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
循环。