【问题标题】:Matlab system differential equations, recursive definitionMatlab系统微分方程,递归定义
【发布时间】:2015-05-20 04:39:20
【问题描述】:

我正在寻找一种紧凑而有效的方法来解决以下问题。 我有一个微分方程组,比如 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})

任何帮助将不胜感激,谢谢

【问题讨论】:

    标签: matlab ode


    【解决方案1】:

    这是一个迭代定义,里面没有递归。

    使用类似的东西

    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 循环。

    【讨论】:

    • LutzL,非常感谢您的帮助。我确实尝试使用 LOOP 来实现我的公式,但我遇到了问题,我倾向于得出无法通过循环定义 dy 的结论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多