Как мне повторить систему уравнений в Matlab до сходимости?
У меня есть три уравнения, где u ранее определен как вектор mx1, а A является матрицей mxn:
v = A'*u/norm(A'*u);
s = norm(A*v);
u = A*v/norm(A*v);
Я пытаюсь повторить эти уравнения, пока они не сходятся. Я пытался использовать функцию solve():
[v s u] = solve(v == A'*u/norm(A'*u), s == norm(A*v), u == A*v/norm(A*v), v, s, u)
Но я продолжаю получать кучу ошибок при использовании этого. Как еще я мог это сделать?
1 ответ
Решение
Не уверен, что вы ожидаете, используя solve
, но вы можете сделать это численно используя while
цикл до изменения v
а также u
меньше, чем некоторая терпимость.
A=rand(5,4); %// sample data
u=rand(5,1);
u2=u+1;v2=1;v=0; %// to make sure we enter the loop
tol=1e-11 %// tolerance on change in u or v, to exit loop
while(norm(u2-u)>tol && norm(v2-v)>tol) %// continue until both changes are small enough
u2 = u;
v2 = v;
v = A'*u/norm(A'*u) %// calculate new value of v
s = norm(A*v);
u = A*v/norm(A*v) %// new value of u
end