優化法估計矩陣1—範數

1. 實驗目的

學習使用MATLAB編寫數值計算程序,瞭解優化法估計矩陣的1-範數的步驟。

2. 實驗內容

用優化法估計5到20階Hilbert矩陣的條件數。

3. 實驗步驟

1)寫出優化法估計Hilbert矩陣的條件數的程序;

2)寫出生成Hilbert矩陣的編程,並運行程序

4. 結果與分析

input n:=5cond_H =9.4366e+05

input n:=6cond_H = 2.9070e+07

input n:=7cond_H =9.8519e+08

input n:=8cond_H =3.3873e+10

input n:=9cond_H =1.0997e+12

input n:=10cond_H =3.5352e+13

input n:=11cond_H =1.2296e+15

input n:=12cond_H =3.8226e+16

input n:=13cond_H =5.5005e+17

input n:=14cond_H =3.1971e+18

input n:=15cond_H =1.0271e+18

input n:=16cond_H =6.2737e+18

input n:=17cond_H =3.8089e+18

input n:=18,cond_H =4.3539e+18

input n:=19cond_H =4.4376e+18

input n:=20cond_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矩陣的階數,取520

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章