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矩陣的條件數