研究生“数值分析”课后题(上机编程部分)答案
![研究生“数值分析”课后题(上机编程部分)答案](https://img.360docs.net/img1a/131uwdjefq741dr4gl5hkqhdsoo8r0oy-a1.webp)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2009级研究生《数值分析》上机作业
院系电气工程学院
专业控制理论与控制工程
姓名马凯
指导教师代新敏
2009年12月29日
第一题(二问):超松弛法求方程组根
1.解题理论依据或方法应用条件:
超松弛算法是在GS 方法已求出x (m),x (m-1)的基础上,经过重新组合得到新序列。如能恰当选择松弛因子ω,收敛速度会比较快。当ω>1时,称为超松弛法,可以用来加速收敛。其具体算法为:
)(
)1(1
)1(1
1
)
()
1()
(i n
i j m j
ij i j m j ij m i m i g x
b x b x x ++
+-=
∑∑
+=--=-ωω
2.计算程序(使用软件:VC ): #include
{float a[10][10]={ {0,0,0,0,0,0,0,0,0,0},
{0,12.38412,2.115237,-1.061074,1.112336,-0.113584,0.718719,1.742382,3.067813,-2.031743}, {0,2.115237,19.141823,-3.125432,-1.012345,2.189736,1.563849,-0.784165,1.112348,3.123124}, {0,-1.061074,-3.125432,15.567914,3.123848,2.031454,1.836742,-1.056781,0.336993,-1.010103}, {0,1.112336,-1.012345,3.123848,27.108437,4.101011,-3.741856,2.101023,-0.71828,-0.037585}, {0,-0.113584,2.189736,2.031454,4.101011,19.897918,0.431637,-3.111223,2.121314,1.784317}, 0,0.718719,1.563849,1.836742,-3.741856,0.431637,9.789365,-0.103458,-1.103456,0.238417}, {0,1.742382,-0.784165,-1.056781,2.101023,-3.111223,-0.103458,14.7138465,3.123789,-2.213474},
{0,3.067813,1.112348,0.336993,-0.71828,2.121314,-1.103456,3.123789,30.719334,4.446782}, {0,-2.031743,3.123124,-1.010103,-0.037585,1.784317,0.238417,-2.213474,4.446782,40.00001}}; float b[10][1]=
{{0},{2.1874369},{33.992318},{-25.173417},{0.84671695},{1.784317},{-86.612343},{1.1101230},{4.719345},{-5.6784392}};
float x[10][10]={{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}}; /*由x(0)=0得到其第一列全为零*/ float sum1=0,sum2=0; int i,m,j;
for(m=1;m<=9;m++) for(i=1;i<=9;i++) {sum1=0; for(j=1;j<=(i-1);j++)sum1+=(-a[i][j]/a[i][i])*x[j][m]; /*计算第一个累加和*/ sum2=0; for(j=(i+1);j<=9;j++)sum2+=(-a[i][j]/a[i][i])*x[j][m-1]; /*计算第二个累加和*/ x[i][m]=(1-w)*x[i][m-1]+w*(sum1+sum2+b[i][0]/a[i][i]); /*用SOR 方法计算*/ }
printf("x1为:%lf\n",x[1][9]); printf("x2为:%lf\n",x[2][9]); printf("x3为:%lf\n",x[3][9]); printf("x4为:%lf\n",x[4][9]); printf("x5为:%lf\n",x[5][9]); printf("x6为:%lf\n",x[6][9]);
printf("x7为:%lf\n",x[7][9]); printf("x8为:%lf\n",x[8][9]); printf("x9为:%lf\n",x[9][9]); }
3.计算结果
4.问题讨论(误差分析、上机出现情况等)
这道题目是所有题目中编写最顺利的,一次即顺利得出结果,当然这道题目还是有应该注意到地方,一是注意两个求和的清零,二是注意下标,不要弄混行标和列标。
第一题(三问):列主元素法求方程组根
1.解题理论依据或方法应用条件:
所谓列主元消去法是,对矩阵作恰当的调整,选取绝对值最大的元素作为主元素。然后把矩阵化为上三角阵,再进行回代,求出方程的解。算法为: ][]1[1i b i d =+ , ]][1[]2[1i i B i a +=+ ,
]][[]1[1i i B i b =+ , ]1][[]1[1+=+i i B i c , q1[0]=0 , u1[0]=0 ,
8,,2,1]),[1][1][1(][1][1⋅⋅⋅=⋅+-=i i q i a i b i c i q
9,,2,1]),1[1][1][1(])[1][1][1(}[1⋅⋅⋅=-⋅+⋅-=i i q i a i b i u i a i d i u x[9]=u1[9]
1,,7,8],[1]1[][1][⋅⋅⋅=++⋅=i i u i x i q i x