Как мне повторить систему уравнений в 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
Другие вопросы по тегам