递归差分方程MATLAB

时间:2019-11-15 17:53:33

标签: matlab recursion

我有一个简单的递归方程,其思想是给定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的路径是什么? 谢谢。

1 个答案:

答案 0 :(得分:0)

如评论中所述,一种简单的方法是对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