2014-11-28 3 views
0

나는 유는 이전에 MX1 벡터로 정의되는 세 개의 방정식을 가지고 A는 m × n 개의 행렬이다 : 나는 그들이 수렴 할 때까지 이러한 방정식을 유지하기 위해 노력하고있어수렴 할 때까지 Matlab에서 방정식 세트를 어떻게 반복합니까?

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) 

그러나 나는 그것을 사용할 때 많은 오류가 계속 발생한다. 어떻게 그럴 수 있니? 당신이 solve를 이용하여 기대했던,하지만 당신은 수치 vu의 변화까지 while 루프를 사용하여이 작업을 수행 할 수있는

답변

1

확실하지가 허용 오차보다 작습니다.

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

관련 문제