matlab一次范数迭代问题

b=[1,0;0,1;1,0;0,1;-1,1;-1,0];
l=[0,0,4,-197,-193,2]';
p=[0.91,0,0,0,0,0;0,0.59,0,0,0,0;0,0,0.43,0,0,0;0,0,0,0.37,0,0;0,0,0,0,0.42,0;0,0,0,0,0,0.25];
for i=1:10
x=inv(b'*p*b)*b'*p*l;
v=b*x-l
x=v'*p*v/4;
w=diag(1./abs(v))
p=w*p;
end
此程序能运行,可是我所求的每次迭代算出来的w都是乘以一开始的p=[0.91,0,0,0,0,0;0,0.59,0,0,0,0;0,0,0.43,0,0,0;0,0,0,0.37,0,0;0,0,0,0,0.42,0;0,0,0,0,0,0.25];而不是乘以迭代算出来的新的矩阵p 该如何修改 谢谢

第1个回答  2011-05-12
x = zeros(size(b)); %初始解设置为与b同型的零向量
k = 0; %迭代次数的记数变量,初始量设为0
r = 1; %前后项之差的无穷范数
% % % % % % % % % % % % % % % %
D = diag(diag(A));
B = inv(D)*(D-A);
f = inv(D)*b;
% % % % % % % % % % % % % % % %

p = max(abs(eig(B))); %谱半径大于等于1就不收敛
if p >= 1
'迭代法不收敛'
return
end

while r >e
x0 = x;
x = B*x0 + f;
k = k + 1;
r = norm (x-x0,inf);
end

'所求解为'
x
'迭代次数为'
k

自己以前编的。。。。
相似回答