%
實矩陣的擬上三角分解(
hessenberg
分解) %
用法:[q,b]=hess2(a)
%q返回乙個正交矩陣,
b為相似於
a的擬上三角矩陣
%注意:
matlab
自帶了hessenberg
分解的函式
hess(a)
%by castor 2010-12-25
function
[q,b]=hess2(a)
tic;
n=max(size(a));
s=zeros(n,1);
u=zeros(n,1);
c=0;
i=eye(n);
h=zeros(n,n);
q=i;
b=i;
forr=1:n-2
s=a(:,r);
e=zeros(n,1);
fort=1:r
s(t,1)=0;
end
ifs'*s==0
%所有分量全為零,取
h=i,
b保持不變
h=i;
else if
sign(a(r+1,r))==0
c=sqrt(s'*s);
else
c=-sign(a(r+1,r))*sqrt(s'*s);
end e(r+1,1)=1;
u=s-c*e;
h=i-2*u*u'/(u'*u);
end b=h*a*h;
a=b;
q=q*h;
end toc;
end
測試矩陣的擬三角化:
>> a=[1 3 4;3 2 1;4 1 3]
a =1 3 4
3 2 1
4 1 3
>> [q,b]=hess2(a)
elapsed time is 0.354213 seconds.
q =1.0000 0 0
0 -0.6000 -0.8000
0 -0.8000 0.6000
b =1.0000 -5.0000 -0.0000
-5.0000 3.6000 -0.2000
-0.0000 -0.2000 1.4000
>> i=q*q'
i =1.0000 0 0
0 1.0000 0.0000
0 0.0000 1.0000
>> q*a*q
ans =
1.0000 -5.0000 -0.0000
-5.0000 3.6000 -0.2000
-0.0000 -0.2000 1.4000
如果使用matlab自帶的函式hess:
>> [p,t]=hess(a)
p =0.2425 -0.9701 0
-0.9701 -0.2425 0
0 0 1.0000
t =0.5294 2.8824 0
2.8824 2.4706 -4.1231
0 -4.1231 3.0000
>> i=p*p'
i =1.0000 0.0000 0
0.0000 1.0000 0
0 0 1.0000
>> p*a*p
ans =
0.5294 2.8824 -0.0000
2.8824 2.4706 -4.1231
-0.0000 -4.1231 3.0000
可見hessenberg的轉換不唯一,不同的householder矩陣將會產生不同的擬三對角矩陣
C語言 矩陣的上三角化
include include intmain void 定義檢查層的中途存放位址 int num1,num2,num3,num4 輸入部分 printf 請輸入你想計算的行的個數 scanf d hang printf 請輸入你想計算的列的個數 scanf d lie for i 0 i hang...
酉三角化和實正交三角化
介紹乙個非常有用的定理 任何復方陣 a 與以 a 的特徵值作為對角元素的乙個三角矩陣酉相似,以及總可以通過實正交相似將矩陣化為乙個實的擬三角型並作了相應的推廣.證明 設 u 1 x quad u 2 quad cdots quad u n 是任意乙個第一列為 x 的酉矩陣,比方說利用 qr 分解 中...
Delaunay三角化演算法
1 首先了解一下什麼是delaunay三角網 delaunay三角剖分是前蘇聯數學家 delaunay在 1934年提出的 對於任意給定的平面點集 只存在著唯一的一種三角剖分方法 滿足所謂的 最大 最小角 優化準則 即所有最小內角之和最大 這就是 delaunay三角剖分。這種剖分方法遵循 最小角最...