我正在尝试在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
答案 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);