首页 > 解决方案 > 递归差分方程 MATLAB

问题描述

我有一个简单的递归方程,想法是对于给定的 x 起始值,跟踪 x 的未来值,看看是否有收敛。我在下面写了一个简单的 MATLAB 代码,很明显,x 很快收敛到 0.0292 的稳态值。

x(1) = 0.2;
for t = 1:1:100
x(t+1) = 0.12*x(t).^0.40;
end

但是,对于更复杂的方程,我认为我不能应用上面的代码。例如,如果我有:

x(t+1) = 0.12*(x(t)./(x(t+1)+x(t))).^0.40

我如何“解决”它以查看(不尝试进行任何代数操作以在右侧隔离 x(t+1))以查看 x 的路径是什么?谢谢你。

标签: matlabrecursion

解决方案


正如评论中提到的,一个简单的方法是给出一个初始猜测x(t+1)并尝试收敛到一个解决方案x(t+1),然后继续迭代。

recEq = @(p,q) 0.12 * (p ./ (q+p))^0.4;
x = nan(1, 100);
x(1) = 0.2;
for t = 1:100
    kold = x(t);
    k = recEq(x(t), kold);
    while abs(k-kold) > 1e-8
        kold = k;
        k = recEq(x(t), kold);
    end
    x(t+1) = k;
end

推荐阅读