N = 100;
%作5个100阶对角方阵Di
D = zeros(N,N,5);
D1 = [100:-1:1]';
D2 = zeros(100,1);
D2(1:50) = 100;
D2(51:100) = [99:-2:1]';
D3 = ones(100,1);
D3(1:50) = [100:-2:2]';
D4 = ones(100,1);
D4(31:70) = 50;
D4(1:30) = 100;
D5 = ones(100,1);
D5(1:10) = 100;
D5(11:30) = 50;
D(:,:,1) = diag(D1);
D(:,:,2) = diag(D2);
D(:,:,3) = diag(D3);
D(:,:,4) = diag(D4);
D(:,:,5) = diag(D5);
%随机生成10个正交阵Qj
Q = zeros(N,N,10);
for j=1:10
M = rand(N);
[Q0,R0] = qr(M);
Q(:,:,j) = Q0;
end
%设定精确解
xexact = ones(100,1);
xexact(1:20) = 5;
xexact(70:100) = 10;
%定义迭代初值和误差数组
x0 = zeros(100,1);
eps = zeros(100,1,10);
eps0 = zeros(1,1,10);
n = 100;
% %不同特征值分布的最速下降法
% for i=1:5
% A = Q(:,:,1)*D(:,:,i)*Q(:,:,1)';
% b = A*xexact;
% x = x0;
% eps0(1,1,i) = norm(x - xexact);
% r = b - A*x;
% for k=1:n
% alpha = (r'*r)/(r'*(A*r));
% x = x + alpha*r;
% eps(k,1,i) = norm(x - xexact);
% r = b - A*x;
% end
% end
%
% temp = zeros(n,1);
% speed = zeros(5,1);
% for i=1:5
% temp(1) = eps(1,1,i)/eps0(1,1,i);
% speed(i) = speed(i)+temp(1);
% for k=2:n
% temp(k) = eps(k,1,i)/eps(k-1,1,i);
% speed(i) = speed(i)+temp(k);
% end
% speed(i) = speed(i)/n;
% figure;
% plot(temp);
% end
% speed(1:5,1)
% eps(n,1,1:5)
%不同特征向量的最速下降法
for j=1:10
A = Q(:,:,j)*D(:,:,1)*Q(:,:,j)';
b = A*xexact;
x = x0;
eps0(1,1,j) = norm(x - xexact);
r = b - A*x;
for k=1:n
alpha = (r'*r)/(r'*(A*r));
x = x + alpha*r;
eps(k,1,j) = norm(x - xexact);
r = b - A*x;
end
end
temp = zeros(n,1);
speed = zeros(10,1);
for j=1:10
temp(1) = eps(1,1,j)/eps0(1,1,j);
speed(j) = speed(j)+temp(1);
for k=2:n
temp(k) = eps(k,1,j)/eps(k-1,1,j);
speed(j) = speed(j)+temp(k);
end
speed(j) = speed(j)/n;
figure;
plot(temp);
end
speed(1:10,1)
eps(n,1,1:10)
评论0