在递归中存储值以供以后使用MATLAB

时间:2018-12-21 14:03:24

标签: matlab recursion

我正在尝试在MATLAB中编写递归多网格算法。

当我不再通过递归调用时,我需要将v和TC的值存储在我要使用的每个级别上,以类似的方式使用v {L}例如,如果我做了一个for循环。

非常感谢您的帮助。谢谢。

function x = vcycle1d(n, x, b, T, w, levels)

    x = damped_jacobiM(w, x, T, b, 10^-7, 3);

    res = b - T*x;

    k = log2(n+1);
    N = 2^(k-1)-1;
    RE = zeros(N,n);
    for i = 1:N
        RE(i,2*i-1:2*i+1) = [1 2 1]; 
    end
    RE = RE/4;        
    II = 2*RE';
    TC = RE * T * II;

    v = zeros(N, 1);
    for i = 1:N
        v(i) = (res(2*i-1) + 2*res(2*i) + res(2*i+1))/4;
    end

    if levels ~= 1
        err= vcycle1d(N, zeros(length(v), 1), v, TC, w, levels-1);
    else
        err = TC\v;
    end

1 个答案:

答案 0 :(得分:1)

有两种方法可以做到这一点。

选项1:使用永久变量。这使您可以将详细信息存储在一个变量中,该变量保留两次调用之间的值。

此方法的优点是您可以使用它来“记住”以前调用中的所有内容。 这样做的缺点是您需要以某种明智的方式管理该内存。

选项2:使用其他可选输入。

function x = vcycle1d(n, x, b, T, w, levels, varargin)

if nargin  == 7
    priordetails = varargin{1};
end
currentdetails = ... ;
    ....

err= vcycle1d(N, zeros(length(v), 1), v, TC, w, levels-1, currentdetails);