1. 实验目的
学习使用MATLAB编写数值计算程序,了解优化法估计矩阵的1-范数的步骤。
2. 实验内容
用优化法估计5到20阶Hilbert矩阵的条件数。
3. 实验步骤
1)写出优化法估计Hilbert矩阵的条件数的程序;
2)写出生成Hilbert矩阵的编程,并运行程序
4. 结果与分析
input n:=5,cond_H =9.4366e+05
input n:=6,cond_H = 2.9070e+07
input n:=7,cond_H =9.8519e+08
input n:=8,cond_H =3.3873e+10
input n:=9,cond_H =1.0997e+12
input n:=10,cond_H =3.5352e+13
input n:=11,cond_H =1.2296e+15
input n:=12,cond_H =3.8226e+16
input n:=13,cond_H =5.5005e+17
input n:=14,cond_H =3.1971e+18
input n:=15,cond_H =1.0271e+18
input n:=16,cond_H =6.2737e+18
input n:=17,cond_H =3.8089e+18
input n:=18,cond_H =4.3539e+18
input n:=19,cond_H =4.4376e+18
input n:=20,cond_H =4.4569e+18
5. 实验总结
通过上面的实验我们发现对于对角占优的矩阵,对于以上的方法都实用。
附录
function b=PLU(H,b)
n=size(b);
for k=1:n-1
H(k+1:n,k)=H(k+1:n,k)/H(k,k);
H(k+1:n,k+1:n)= H(k+1:n,k+1:n)-H(k+1:n,k)*H(k,k+1:n);
end
for j=1:n-1
b(j+1:n)=b(j+1:n)-b(j)*H(j+1:n,j);
end
for j=n:-1:2
b(j)=b(j)/H(j,j);
b(1:j-1)=b(1:j-1)-b(j)*H(1:j-1,j);
end
b(1)=b(1)/H(1,1);
n=input('input n:=');%n为生成的Hilbert矩阵的阶数,取5到20
H=hilb(n);%生成n阶的Hilbert矩阵
norm_H=norm(H,Inf);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 用优化方法估计矩阵的1-范数
x=1./[1:n]';
k=1;
while k==1
w=x;
w=PLU(H',w);
v=sign(w);
z=v;
z=PLU(H,z);
norm_z=norm(z,Inf);
if norm_z<=z'*x
mu=norm(w,1);
k=0;
else
ind=find(abs(z)==norm_z);
j=ind(1);
x=zeros(n,1);
x(j)=1;
k=1;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cond_H=norm_H*mu %cond_H为Hilbert矩阵的条件数