1樓:電燈劍客
就是一個行列式為-1的正交陣,沒有很特別的地方
如何用householder變換求hessenberg矩陣
2樓:q我
[householder陣]
(1) 設a rn, = ||a||2,通常取 與a1同號,記h=i-2vvt,(v= ),
則ha= - e1. h=i -2vvt稱為householder陣。
(2) 更一般地,對a=(a1,a2,…am,am+1,…,an)t,記 = ,可求出h,使
ha=(a1,a2,…am, ,0,…,0)t。
為此,先在rn-m中求 使 滿足
=(am+1,…,an)t=(- ,0,…,0,0)t,
再作h= ,則ha= (a1,a2,…am,am+1,…,an)t =( a1,a2,…am,- ,0,…,0,0)t
[用householder方法求矩陣的qr分解]
3樓:深圳華邦瀛
你描述的我根本不明白你在說什麼 你遇到什麼問題?想達到什麼功能?
用householder怎樣將實對稱矩陣轉化為三對角矩陣 例項
4樓:
//約化對稱矩陣為三對角對稱矩陣
//利用householder變換將n階實對稱矩陣約化為對稱三對角矩陣
//a-長度為n*n的陣列,存放n階實對稱矩陣
//n-矩陣的階數
//q-長度為n*n的陣列,返回時存放householder變換矩陣
//b-長度為n的陣列,返回時存放三對角陣的主對角線元素
//c-長度為n的陣列,返回時前n-1個元素存放次對角線元素
void eastrq(double a,int n,double q,double b,double c);
//求實對稱三對角對稱矩陣的全部特徵值及特徵向量
//利用變型qr方法計算實對稱三對角矩陣全部特徵值及特徵向量
//n-矩陣的階數
//b-長度為n的陣列,返回時存放三對角陣的主對角線元素
//c-長度為n的陣列,返回時前n-1個元素存放次對角線元素
//q-長度為n*n的陣列,若存放單位矩陣,則返回實對稱三對角矩陣的特徵向量組
// 若存放householder變換矩陣,則返回實對稱矩陣a的特徵向量組
//a-長度為n*n的陣列,存放n階實對稱矩陣
int ebstq(int n,double b,double c,double q,double eps,int l);
//約化實矩陣為赫申伯格(hessen berg)矩陣
//利用初等相似變換將n階實矩陣約化為上h矩陣
//a-長度為n*n的陣列,存放n階實矩陣,返回時存放上h矩陣
//n-矩陣的階數
void echbg(double a,int n);
//求赫申伯格(hessen berg)矩陣的全部特徵值
//返回值小於0表示超過迭代jt次仍未達到精度要求
//返回值大於0表示正常返回
//利用帶原點位移的雙重步qr方法求上h矩陣的全部特徵值
//a-長度為n*n的陣列,存放上h矩陣
//n-矩陣的階數
//u-長度為n的陣列,返回n個特徵值的實部
//v-長度為n的陣列,返回n個特徵值的虛部
//eps-控制精度要求
//jt-整型變數,控制最大迭代次數
int edqr(double a,int n,double u,double v,double eps,int jt);
//求實對稱矩陣的特徵值及特徵向量的雅格比法
//利用雅格比(jacobi)方法求實對稱矩陣的全部特徵值及特徵向量
//返回值小於0表示超過迭代jt次仍未達到精度要求
//返回值大於0表示正常返回
//a-長度為n*n的陣列,存放實對稱矩陣,返回時對角線存放n個特徵值
//n-矩陣的階數
//u-長度為n*n的陣列,返回特徵向量(按列儲存)
//eps-控制精度要求
//jt-整型變數,控制最大迭代次數
int eejcb(double a,int n,double v,double eps,int jt);
選自《徐世良數值計算程式集(c)>>
每個程式都加上了適當地註釋,陸陸續續幹了幾個月才整理出來的啊。
今天都給貼出來了
#include "stdio.h"
#include "math.h"
//約化對稱矩陣為三對角對稱矩陣
//利用householder變換將n階實對稱矩陣約化為對稱三對角矩陣
//a-長度為n*n的陣列,存放n階實對稱矩陣
//n-矩陣的階數
//q-長度為n*n的陣列,返回時存放householder變換矩陣
//b-長度為n的陣列,返回時存放三對角陣的主對角線元素
//c-長度為n的陣列,返回時前n-1個元素存放次對角線元素
void eastrq(double a,int n,double q,double b,double c) }
for (i=n-1; i>=1; i--) }
if (h+1.0==1.0)
b[i]=0.0;
} else
h=h-q[u]*c[i-1];
q[u]=q[u]-c[i-1];
f=0.0;
for (j=0; j<=i-1; j++)
if (j+1<=i-1) }
c[j-1]=g/h;
f=f+g*q[j*n+i];
} h2=f/(h+h);
for (j=0; j<=i-1; j++) }
b[i]=h;
} }b[0]=0.0;
for (i=0; i<=n-1; i++)
for (k=0; k<=i-1; k++) }
} u=i*n+i;
b[i]=q[u];
q[u]=1.0;
if (i-1>=0) }
} return;
//求實對稱三對角對稱矩陣的全部特徵值及特徵向量
//利用變型qr方法計算實對稱三對角矩陣全部特徵值及特徵向量
//n-矩陣的階數
//b-長度為n的陣列,返回時存放三對角陣的主對角線元素
//c-長度為n的陣列,返回時前n-1個元素存放次對角線元素
//q-長度為n*n的陣列,若存放單位矩陣,則返回實對稱三對角矩陣的特徵向量組
// 若存放householder變換矩陣,則返回實對稱矩陣a的特徵向量組
//a-長度為n*n的陣列,存放n階實對稱矩陣
int ebstq(int n,double b,double c,double q,double eps,int l)
m=j;
while ((m<=n-1)(fabs(c[m])>d))
if (m!=j)
it=it+1;
g=b[j];
p=(b[j+1]-g)/(2.0*c[j]);
r=sqrt(p*p+1.0);
if (p>=0.0)
else
h=g-b[j];
for (i=j+1; i<=n-1; i++)
f=f+h;
p=b[m];
e=1.0;
s=0.0;
for (i=m-1; i>=j; i--)
else
p=e*b[i]-s*g;
b[i+1]=h+s*(e*g+s*b[i]);
for (k=0; k<=n-1; k++) }
c[j]=s*p;
b[j]=e*p;
} while (fabs(c[j])>d);
} b[j]=b[j]+f;
} for (i=0; i<=n-1; i++) }
if (k!=i) }
} return(1);
} //約化實矩陣為赫申伯格(hessen berg)矩陣
//利用初等相似變換將n階實矩陣約化為上h矩陣
//a-長度為n*n的陣列,存放n階實矩陣,返回時存放上h矩陣
//n-矩陣的階數
void echbg(double a,int n) }
if (fabs(d)+1.0!=1.0)
for (j=0; j<=n-1; j++) }
for (i=k+1; i<=n-1; i++)
for (j=0; j<=n-1; j++) }
} }return;
} //求赫申伯格(hessen berg)矩陣的全部特徵值
//利用帶原點位移的雙重步qr方法求上h矩陣的全部特徵值
//返回值小於0表示超過迭代jt次仍未達到精度要求
//返回值大於0表示正常返回
//a-長度為n*n的陣列,存放上h矩陣
//n-矩陣的階數
//u-長度為n的陣列,返回n個特徵值的實部
//v-長度為n的陣列,返回n個特徵值的虛部
//eps-控制精度要求
//jt-整型變數,控制最大迭代次數
int edqr(double a,int n,double u,double v,double eps,int jt)
ii=(m-1)*n+m-1;
jj=(m-1)*n+m-2;
kk=(m-2)*n+m-1;
ll=(m-2)*n+m-2;
if (l==m-1)
else if (l==m-2)
u[m-1]=(-b-xy*y)/2.0;
u[m-2]=c/u[m-1];
v[m-1]=0.0; v[m-2]=0.0;
} else
m=m-2;
it=0;
} else
it=it+1;
for (j=l+2; j<=m-1; j++)
for (j=l+3; j<=m-1; j++)
for (k=l; k<=m-2; k++) }
else
if ((fabs(p)+fabs(q)+fabs(r))!=0.0)
s=xy*sqrt(p*p+q*q+r*r);
if (k!=l)
e=-q/s;
f=-r/s;
x=-p/s;
y=-x-f*r/(p+s);
g=e*r/(p+s);
z=-x-e*q/(p+s);
for (j=k; j<=m-1; j++)
a[jj]=q;
a[ii]=p;
} j=k+3;
if (j>=m-1)
for (i=l; i<=j; i++)
a[jj]=q;
a[ii]=p;
} }} }} return(1);
} //求實對稱矩陣的特徵值及特徵向量的雅格比法
//利用雅格比(jacobi)方法求實對稱矩陣的全部特徵值及特徵向量
//返回值小於0表示超過迭代jt次仍未達到精度要求
//返回值大於0表示正常返回
//a-長度為n*n的陣列,存放實對稱矩陣,返回時對角線存放n個特徵值
//n-矩陣的階數
//u-長度為n*n的陣列,返回特徵向量(按列儲存)
//eps-控制精度要求
//jt-整型變數,控制最大迭代次數
int eejcb(double a,int n,double v,double eps,int jt) }
} while (1==1) }
} if (fmjt)
l=l+1;
u=p*n+q;
w=p*n+p;
t=q*n+p;
s=q*n+q;
x=-a[u];
y=(a[s]-a[w])/2.0;
omega=x/sqrt(x*x+y*y);
if (y<0.0)
sn=1.0+sqrt(1.0-omega*omega);
sn=omega/sqrt(2.0*sn);
cn=sqrt(1.0-sn*sn);
fm=a[w];
a[w]=fm*cn*cn+a[s]*sn*sn+a[u]*omega;
a[s]=fm*sn*sn+a[s]*cn*cn-a[u]*omega;
a[u]=0.0;
a[t]=0.0;
for (j=0; j<=n-1; j++) }
for (i=0; i<=n-1; i++) }
for (i=0; i<=n-1; i++) }
return(1);}
矩陣左上角t是什麼意思,矩陣左上角一個t是什麼意思?
應該是右上角一個t吧 表示轉置,就是所有行變成列,比如 a a1 a2 a3 b1 b2 b3 那麼at a1 b1 a2 b2 a3 b3 矩陣右上角有t 表示轉置 沒見過左上角有的 transfer的首字母,轉置 數學 矩陣 一個矩陣右上角一個t是什麼意思?表示矩陣轉置,也有用a 表示的,比如 ...
什麼是T型鋼,T型鋼 L型鋼 H型鋼 用途
t型鋼,是一種鑄造成t字型的鋼材。因其斷面與英文字母 t 相同而得名。t型鋼分兩種 1.是用h型鋼直接剖分而成t型鋼 使用標準同h型鋼相同 gb t11263 2010 是替代雙角鋼焊接的理想材料。具有抗彎能力強 施工簡單 節約成本和結構重量輕等優點。2.熱軋一次成型的t型鋼,主要使用在機械 充小五...
圓圈中間是h上面是t的是什麼牌子包包
這樣說還真的是沒辦法相像呢,要是有 就好 了,因為有很多牌子的標示都是差不多的 h外面一個圓的包包是什麼牌子 愛抄馬仕,正版售價在8w以上。以鉑金系列及凱麗系列最為經典。愛馬仕 herm s 是世界著名的奢侈品品牌,1837年由thierry herm s創立於法國巴黎,早年以製造高階馬具起家,迄今...