数值分析上机作业参考答案交14789.docx

上传人:b****1 文档编号:2407630 上传时间:2022-10-29 格式:DOCX 页数:17 大小:109.27KB
下载 相关 举报
数值分析上机作业参考答案交14789.docx_第1页
第1页 / 共17页
数值分析上机作业参考答案交14789.docx_第2页
第2页 / 共17页
数值分析上机作业参考答案交14789.docx_第3页
第3页 / 共17页
数值分析上机作业参考答案交14789.docx_第4页
第4页 / 共17页
数值分析上机作业参考答案交14789.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

数值分析上机作业参考答案交14789.docx

《数值分析上机作业参考答案交14789.docx》由会员分享,可在线阅读,更多相关《数值分析上机作业参考答案交14789.docx(17页珍藏版)》请在冰豆网上搜索。

数值分析上机作业参考答案交14789.docx

数值分析上机作业参考答案交14789

 

数值分析上机作业

 

学院:

专业:

学号:

姓名

 

第一题

一、理论依据及算法

1:

Household法

(1)令A0=A,aij

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

(2)Sr=((air(r))2)1/2

(3)αr=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,…,anr(r)]T

(4)yr=Ar-1ur/αr

(5)kr=urTyr/2αr

(6)qr=yr-krur

(7)Ar=Ar-1-(qrurT+urqrT)r=(1,2,……n-2)

2:

超松弛法

其基本思想是在高斯方法已求出x(m),x(m-1)的基础上,组合新的序列,从而加快收敛速度。

其算式是:

xi(m)=(1-ω)xi(m-1)+ω(bijxi(m)+xj(m-1)+gi)

其中ω是超松弛因子,当ω>1时,可以加快收敛速度。

3:

主元消去法:

对矩阵作恰当的调整,选取绝对值尽量大的元素作为主元素。

然后把矩阵化为上三角阵,再进行回代,求出方程的解。

二、程序清单:

#include"math.h"

main()

{

inti,j,r,h;

doubles,sum,m,m1,n,k,u[9],q[9],y[9],w[9][9],

A[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.713846,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.0001}};

doubley1;

r=0;

while(r<7)

{/*控制循环次数*/

sum=0;

for(h=r+1;h<9;h++)/*求s和n的值*/

sum=sum+A[h][r]*A[h][r];

s=sqrt(sum);

n=s*(s+fabs(A[r+1][r]));

if(A[r+1][r]>=0)

y1=1;

else

y1=-1;

for(i=0;i

u[i]=0;

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

u[i]=A[i][r];

u[r+1]=A[r+1][r]+y1*s;

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

{

m=0;

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

m=m+A[i][j]*u[i];

y[j]=m/n;

}

for(i=0;i<9;i++)/*求k和q的值*/

{

m1=0;

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

m1=m1+u[j]*y[j];

k=m1/(2*n);

q[i]=y[i]-k*u[i];

}

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

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

{

w[i][j]=q[i]*u[j]+u[i]*q[j];

A[i][j]=A[i][j]-w[i][j];

}

r++;

}

printf("转化后的矩阵为:

B[9][9]=:

\n");/*打印转化后的矩阵*/

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

{

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

printf("%4.4f",A[i][j]);

printf("\n");

}

}

用超松弛法解方程组

#include"math.h"

main()

{

inti,j,k,r,m;

doublew=1.4,g1[9],B1[9][9],b[9][9],x[9]={0},

g[9]={2.1874369,33.992318,-25.173417,0.84671695,1.784317,

-86.612343,1.1101230,4.719345,-5.6784392},

B[9][9]={{12.384120,-4.893077},{-4.893077,25.398416,6.494097},

{0,6.494097,20.611499,8.243925},{0,0,8.243925,23.422838,-13.880071},

{0,0,0,-13.880071,29.698278,4.534502},{0,0,0,0,4.534502,16.00617,4.881435},

{0,0,0,0,0,4.881435,26.013315,-4.503635},{0,0,0,0,0,0,-4.503635,21.254061,4.504498},

{0,0,0,0,0,0,0,4.504498,14.534122}},

e[9][9]={{1},{0,1},{0,0,1},{0,0,0,1},{0,0,0,0,1},{0,0,0,0,0,1},{0,0,0,0,0,0,1},

{0,0,0,0,0,0,0,1},{0,0,0,0,0,0,0,0,1}};

i=0;

j=0;

while(i<9)/*求出矩阵b和g1的值*/

{

while(j<9)

{

B1[i][j]=B[i][j]/B[i][i];

b[i][j]=e[i][j]-B1[i][j];

j++;

}

g1[i]=g[i]/B[i][i];

i++;

}

k=0;

while(k<9)/*执行本算法*/

{

x[0]=(1-w)*x[0]+w*(b[0][1]*x[1]+g1[0]);

for(r=1;r<8;r++)

x[r]=(1-w)*x[r]+w*(b[r][r-1]*x[r-1]+b[r][r+1]*x[r+1]+g1[r]);

x[8]=(1-w)*x[8]+w*(b[8][7]*x[7]+g1[8]);

k++;

}

for(m=0;m<9;m++)/*输出结果*/

printf("%f\n",x[m]);

}_

用消去法解方程组

#include"math.h"

main()

{

inti,j,k,n;

doublex[9],m[9],l[9],h[9],

b[9]={2.1874369,33.992318,-25.173417,0.84671695,1.784317,-86.612343,

1.1101230,4.719345,-5.6784392},

B[9][9]={{12.3841,-4.8931,},{-4.8931,25.3984,6.4941,},{0,6.4941,20.6116,8.2440,},

{0,0,8.2440,23.4231,-13.8802,},{0,0,0,-13.8802,29.6980,4.5344,},{0,0,0,0,4.5344,16.0061,

4.8814,},{0,0,0,0,0,4.8814,26.0133,-4.5036,},{0,0,0,0,0,0,-4.5036,21.2541,4.5045},{0,0,0,0,0,

0,0,4.5045,14.5341}};

i=0;

while(i<8)/*迭代次数*/

{

l[i]=B[i+1][i]/B[i][i];

for(j=0;j<8;j++)/*求矩阵B和b的值*/

{

h[j]=B[i][j]*l[i];

B[i+1][j]=B[i+1][j]-h[j];

}

b[i+1]=b[i+1]-b[i]*l[i];

i++;

}

k=7;

while(k>0)/*求出x的值*/

{

x[8]=b[8]/B[8][8];

m[k]=b[k]-B[k][k+1]*x[k+1];

x[k]=m[k]/B[k][k];

m[0]=b[0]-B[0][1]*x[1];

x[0]=m[0]/B[0][0];

k--;

}

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

printf("%f\n",x[n]);

}

三、运行结果:

第一题

(1)结果为:

B[9][9]=

12.3841–4.89310.00000.00000.00000.00000.00000.00000.0000

-4.893125.39846.49410.00000.00000.00000.00000.00000.0000

0.00006.494120.61168.24400.00000.00000.00000.00000.0000

0.00000.00008.244023.4231-13.88020.00000.00000.00000.0000

0.00000.00000.0000-13.880229.69804.53440.00000.0000.0000

0.00000.00000.00000.00004.534416.00614.88140.00000.0000

0.00000.00000.00000.00000.00004.881426.0133-4.50360.0000

0.00000.00000.00000.00000.00000.0000-4.503621.25414.5045

0.00000.00000.00000.00000.00000.00000.00004.504514.5341

第一题

(2)结果为:

x[0]=1.073409x[1]=2.272579x[2]=-2.856599x[3]=2.292510x[4]=2.112159x[5]=-6.422562x[6]=1.357798x[7]=0.634258x[8]=-0.587041

第一题(3)结果为:

x[0]=1.075802x[1]=2.275736x[2]=–2.855472x[3]=2.293009x[4]=2.112517x[5]=–6.42

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

当前位置:首页 > 求职职场 > 面试

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

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