2014-11-28 2 views
0

У меня есть три уравнения, где и предварительно определены в качестве вектора MX1 и А представляет собой матрицу тхп:Как повторить набор уравнений в Matlab до сходимости?

v = A'*u/norm(A'*u); 
s = norm(A*v); 
u = A*v/norm(A*v); 

Я пытаюсь повторить эти уравнения, пока они не сходятся. Я пытался использовать функцию решения():

[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 
+0

Глупо, я даже не думал об использовании цикла while. Я видел аналогичный вопрос на другом форуме, и они пытались использовать функцию solve(), поэтому я застрял в голове, чтобы использовать это. Благодаря! – user3457834