《数值分析》上机实习.docx

上传人:b****5 文档编号:2774872 上传时间:2022-11-15 格式:DOCX 页数:16 大小:94.33KB
下载 相关 举报
《数值分析》上机实习.docx_第1页
第1页 / 共16页
《数值分析》上机实习.docx_第2页
第2页 / 共16页
《数值分析》上机实习.docx_第3页
第3页 / 共16页
《数值分析》上机实习.docx_第4页
第4页 / 共16页
《数值分析》上机实习.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

《数值分析》上机实习.docx

《《数值分析》上机实习.docx》由会员分享,可在线阅读,更多相关《《数值分析》上机实习.docx(16页珍藏版)》请在冰豆网上搜索。

《数值分析》上机实习.docx

《数值分析》上机实习

 

2006级研究生

《数值分析》上机试题

 

■院系电气工程学院

■专业测检技术与自动化装置

■姓名姜启

■学号2006020067

 

第一题

▲题目:

已知

12.3841202.115237-1.0610741.112336-0.1135840.7187191.7423823.067813-2.031743

2.11523719.141823-3.125432-1.0123452.1897361.563849-0.7841651.1123483.123124

-1.061074-3.12543215.5679143.1238482.0314541.836742-1.0567810.336993-1.010103

A=1.112336-1.0123453.12384827.1084374.101011-3.7418562.101023-0.718280-0.037585

-0.1135842.1897362.0314544.10101119.8979190.431637-3.1112232.1213141.784317

0.7187191.5638491.836742-3.7418560.4316379.789365-0.103458-1.1034560.238417

1.742382-0.784165-1.0567812.101023-3.111223-0.10345814.7138463.123789-2.213474

3.0678131.1123480.336993-0.7182802.121314-1.1034563.12378930.7193344.446782

-2.0317433.123124-1.010103-0.0375851.7843170.238417-2.2134744.44678240.00001

b=(2.1874369,33.992318,-25.173417,0.84671695,1.784317,-86.612343,1.1101230,4.719345,-5.6784392);

(1)用Hoseholder变换,把A化为三对角矩阵B(并打印B)

(2)用超松驰法求解BX=b(取松驰因子W=1.4,X0=0,迭代九次)

(3)用列主元素消去法求解BX=b

▲解题方法的理论依据:

①Household变换:

任何实非奇异矩阵A,都可通过初等反射阵相似变化化为HOSSENBERG阵,因此若A是对称阵,则可化为相似的三对角阵,从而解决了实对称三对角化问题。

本题中,可依次对矩阵的列向量应用Household变换,完成矩阵的三对角化。

算法:

(1)令A0=A,aij

(1)=aij,已知Ar-1 即Ar-1=(aij(r));

(2)Sr=(∑ni=r+1(air(r))2)1/2;

(3)ar=Sr2+|a(r)r+1,r|Sr;

ur=[0,…0,a(r)r+1,r+Sign(a(r)r+1,r)Sr,a(r)r+2,r,…,a(r)nr]T

(4)yr=Ar-1ur/ar;

(5)kr=0.5*urTyr/ar;

(6)qr=yr-krur;Ar=Ar-1-(qrurT+urqrT);r=1,2….n-2.

②松驰法:

在GS方法法已求出x(m)基础上,经过重新组合而得的新序列,此新序列使收敛加快

算法如下:

③列列主消元法:

为改善Guass消去法的缺陷

▲主程序如下:

#include

#include

main()

{intn=9,r,i,j,k;

floatsr=0,h=0,xr,kr=0;

floatw=1.4,c=0,c1=0,c2=0,c3=0,c4=0,c5=0;

floatz[3],d[9];

floatur[9][1];

floaturt[1][9];

floatyr[9][1];

floatqr[9][1];

floatqrt[1][9];

floatm[9][9];

floatt[9][9];

floatx[9][10]={0};

floatg[9]={2.1874369,33.992318,-25.173417,0.84671695,1.784317,-86.612343,1.1101230,4.719345,-5.6784392};

floata[9][9]={{12.38412,2.115237,-1.061074,1.112336,-0.113584,0.718719,1.742382,3.067813,-2.031743},

{2.115237,19.141823,-3.125432,-1.012345,2.189736,1.563849,-0.784165,1.112348,3.123124},

{-1.061074,-3.125432,15.567914,3.123848,2.031454,1.836742,-1.056781,0.336993,-1.010103},

{1.112336,-1.012345,3.123848,27.108437,4.101011,-3.741856,2.101023,-0.71828,-0.037585},

{-0.113584,2.189736,2.031454,4.101011,19.897918,0.431637,-3.111223,2.121314,1.784317},

{0.718719,1.563849,1.836742,-3.741856,0.431637,9.789365,-0.103458,-1.103456,0.238417},

{1.742382,-0.784165,-1.056781,2.101023,-3.111223,-0.103458,14.7138465,3.123789,-2.213474},

{3.067813,1.112348,0.336993,-0.71828,2.121314,-1.103456,3.123789,30.719334,4.446782},

{-2.031743,3.123124,-1.010103,-0.037585,1.784317,0.238417,-2.213474,4.446782,40.00001}};

/*HOUSEHLODER变换*/

for(r=0;r<7;r++)/*总循环次数,r=n-2*/

{

sr=0;

for(i=r+1;i<9;i++)/*求SR*/

{sr=a[i][r]*a[i][r]+sr;}

sr=sqrt(sr);

xr=sr*sr+fabs(a[r+1][r])*sr;/*求公式中的ar*/

for(i=0;i<=r;i++)/*求向量ur,把ur设成一列九行的数组*/

{ur[i][0]=0;}

ur[r+1][0]=a[r+1][r]+sr*a[r+1][r]/fabs(a[r+1][r]);/*符号函数用A/|A|的形式表式*/

for(i=r+2;i<9;i++)

{ur[i][0]=a[i][r];}

for(j=0;j<9;j++)/*求向量yr*/

{

h=0;

for(i=0;i<9;i++)/*求矩阵Ar-1与ur的乘积*/

{h=a[j][i]*ur[i][0]+h;}

h=h/xr;

yr[j][0]=h;

}

for(i=0;i<9;i++)/*求kr*/

{urt[0][i]=ur[i][0];}

kr=0;

for(i=0;i<9;i++)

{kr=urt[0][i]*yr[i][0]+kr;}

kr=kr/(2*xr);

for(i=0;i<9;i++)/*求qr*/

{qr[i][0]=yr[i][0]-kr*ur[i][0];}

for(i=0;i<9;i++)

{qrt[0][i]=qr[i][0];}

for(j=0;j<9;j++)/*求qr乘ur的转置*/

{

for(i=0;i<9;i++)

{m[j][i]=qr[j][0]*urt[0][i];}

}

for(j=0;j<9;j++)/*求ur乘qr的转置*/

{

for(i=0;i<9;i++)

{t[j][i]=ur[j][0]*qrt[0][i];}

}

for(j=0;j<9;j++)/*把上面求得的两个矩阵相加*/

{

for(i=0;i<9;i++)

{t[j][i]=m[j][i]+t[j][i];}

}

for(j=0;j<9;j++)/*求Ar*/

{

for(i=0;i<9;i++)

{a[j][i]=a[j][i]-t[j][i];}

}

}

printf("housholdis:

\n");

for(j=0;j<9;j++)

{

for(i=0;i<9;i++)

{printf("%.6f",a[j][i]);}

printf("\n");

}

 

/*超松驰法求方解*/

for(i=1;i<10;i++)/*迭代九次*/

{

for(j=1;j<9;j++)c2=c2+a[0][i]*x[j][i-1]/a[0][0];/*求X0的一次迭代*/

c=w*(g[0]/a[0][0]-c2);

x[0][i]=c-0.4*x[0][i-1];

c2=0;

for(j=1;j<8;j++)/*求X1到X7的一次迭代*/

{

for(k=0;k

for(k=j+1;k<9;k++)c2=c2+a[j][k]*x[k][i-1]/a[j][j];/*公式中的第二个求和式*/

c=w*(g[j]/a[j][j]-c1-c2);

x[j][i]=c-0.4*x[j][i-1];

c1=0;

c2=0;

}

for(j=0;j<8;j++)c1=c1+a[8][j]*x[j][i]/a[8][8];/*求X8的一次迭代*/

c=w*(g[8]/a[8][8]-c1);

x[8][i]=c-0.4*x[8][i-1];

c1=0;

}

printf("sorresultare:

\n");

for(i=0;i<9;i++)printf("%.5f,",x[i][8]);

printf("\n");

/*列主元素求解*/

for(i=0;i<8;i++)/*比较大小,如果同列中有大于该列中对角元素值的就把该两行交换*/

{

if(a[i+1][i]>a[i][i])

{for(j=i,k=0;j

c3=g[i];g[i]=g[i+1];g[i+1]=c3;}

c5=a[i+1][i];

for(j=i;j

{a[i+1][j]=a[i+1][j]-a[i][j]*c5/a[i][i];}

g[i+1]=g

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1