如何在Matlab中重复一组方程直到收敛?

时间:2014-11-28 05:21:43

标签: matlab equation-solving

我有三个方程式,其中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 个答案:

答案 0 :(得分:1)

不确定您使用solve期望的是什么,但您可以使用while循环以数字方式执行此操作,直到vu中的更改小于某个容差

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