Сохранять значения в рекурсии, чтобы использовать позже MATLAB - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь написать рекурсивный многосеточный алгоритм в 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 голосов
/ 21 декабря 2018

Есть два способа сделать это.

Вариант 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...