数值分析上机实践报告.doc_第1页
数值分析上机实践报告.doc_第2页
数值分析上机实践报告.doc_第3页
数值分析上机实践报告.doc_第4页
数值分析上机实践报告.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数值分析上机实践报告班级:计算机1002姓名:陈斯琪学号:20102686 课题三A 实验题目:线性方程组的迭代法B 实验要求(1) 应用迭代法求解线性方程组,并与直接法作比较;(2) 分别对不同精度要求,如,利用所需迭代次数体会该迭代法的收敛快慢;(3) 对方程组(2),(3)使用SOR方法时,选取松弛因子=0.8,0.9,1,1.1,1.2等,试观察对算法收敛性的影响,并找出你所选用松弛因子的最佳值;(4) 编制出各种迭代法的程序并给出计算结果。C 目的和意义(1) 通过上机了解迭代法求解线性方程组的特点;掌握求解线性方程组的各类迭代法;(2) 体会上机计算时,终止准则X(k+1)-Xk ,对控制迭代精度的有效性;(3) 体会初始值和松弛因子的选择,对迭代收敛速度的影响D 实验方程组(1)线性方程组=精确解.(2) 对称正定线性方程组精确解.(3)三对角线性方程组精确解.E 实验程序代码及截图(1) 应用Jacobi迭代法求解方程组代码如下:#include#include#define N 10 /十阶矩阵static double ANN=4,2,-3,-1,2,1,0,0,0,0,8,6,-5,-3,6,5,0,1,0,0,4,2,-2,-1,3,2,-1,0,3,1,0,-2,1,5,-1,3,-1,1,9,4,-4,2,6,-1,6,7,-3,3,2,3,8,6,-8,5,7,17,2,6,-3,5,0,2,-1,3,-4,2,5,3,0,1,16,10,-11,-9,17,34,2,-1,2,2,4,6,2,-7,13,9,2,0,12,4,0,0,-1,8,-3,-24,-8,6,3,-1;/方程组左侧系数矩阵static double BN=5,12,3,2,3,46,13,38,19,-21; /右侧值static double YN; /输出比较项static double YN; static double XN; /输出项static double GN; /X = BX + G的G矩阵int i,j,k; /计数器double eps;int M=100;bool distance() /求两输出项的差的范数是否满足精度要求double temp=0;for (i=0;ieps) return false;elsereturn true; /满足精度要求则结束程序void main()cout最大迭代次数为100次endl;cout你希望的精度是多少?endl;couteps; /形成迭代矩阵B,存放到A中for (i=0;iN;i+)if (fabs(Aii)eps)cout 打印失败endl;return;double T=Aii;for (j=0;jN;j+)Aij=-Aij/T;Aii = 0;Gi=Bi/T;int counter=0;while (counterM)/迭代for (i=0;iN;i+)double temp=0;for (j=0;jN;j+)temp=temp+Aij*Yj;Xi=Gi+temp;if (distance()=true)break;else/交换X,Y向量;for(i=0;iN;i+)Yi=Xi;counter+;/打印Xcout 迭代次数为:counter次。该线性方程组的解(X1,X2,X3.X10)为:endl;coutX1=X1endl;coutX2=X2endl;coutX3=X3endl;coutX4=X4endl;coutX5=X5endl;coutX6=X6endl;coutX7=X7endl;coutX8=X8endl;coutX9=X9endl;coutX10=X10endl;截图如下:eps=0.001eps=0.0001eps=0.00001(2) 应用Gauss-Seidel求解线性方程组代码如下:#include#include#define N 10 /矩阵的维数,可按需更改static double A1010=4,2,-3,-1,2,1,0,0,0,0,8,6,-5,-3,6,5,0,1,0,0,4,2,-2,-1,3,2,-1,0,3,1,0,-2,1,5,-1,3,-1,1,9,4,-4,2,6,-1,6,7,-3,3,2,3,8,6,-8,5,7,17,2,6,-3,5,0,2,-1,3,-4,2,5,3,0,1,16,10,-11,-9,17,34,2,-1,2,2,4,6,2,-7,13,9,2,0,12,4,0,0,-1,8,-3,-24,-8,6,3,-1;static double B10=5,12,3,2,3,46,13,38,19,-21; /右侧值static double YN; /输出比较项static double XN; /输出项static double GN; /X = BX + G的G矩阵int i,j,k; /计数器double eps;int M=100;bool distance() /求两输出项的差的范数是否满足精度要求double temp=0;for (i=0;ieps) return false;elsereturn true; /满足精度要求则结束程序void main() cout最大迭代次数为100次endl;cout你希望精度是多少?endl;couteps;/形成迭代矩阵B,存放到A中for (i=0;iN;i+)if (fabs(Aii)eps)cout 打印失败endl;return;double T=Aii;for (j=0;jN;j+)Aij=-Aij/T;Aii=0;Gi=Bi/T;int counter=0;while (counterM)/迭代for (i=0;iN;i+)double temp=0;for (j=0;jN;j+)temp=temp+Aij*Xj;Xi=Gi+temp;if (distance()=true)break;else/交换X,Y向量;for(i=0;iN;i+)Yi=Xi;counter+;/打印Xcout 迭代次数为:counter次。该线性方程组的解(X1,X2,X3.X10)为:endl;coutX1=X1endl;coutX2=X2endl;coutX3=X3endl;coutX4=X4endl;coutX5=X5endl;coutX6=X6endl;coutX7=X7endl;coutX8=X8endl;coutX9=X9endl;coutX10=X10endl;截图如下:eps=0.001eps=0.0001eps=0.00001(3) 对方程组(2)使用SOR方法,选取不同松弛因子代码如下:#include#include#define N 8 /矩阵的维数,可按需更改static double ANN=4,2,-4,0,2,4,0,0,2,2,-1,-2,1,3,2,0,-4,-1,14,1,-8,-3,5,6,0,-2,1,6,-1,-4,-3,3,2,1,-8,-1,22,4,-10,-3,4,3,-3,-4,4,11,1,-4,0,2,5,-3,-10,1,14,2,0,0,6,3,-3,-4,2,19;/方程组左侧系数矩阵static double BN=0,-6,6,23,11,-22,-15,45; /右侧值static double YN; /输出比较项static double XN; /输出项static double GN; /X = BX + G的G矩阵int i,j,k; /计数器double eps;int M=100;double w;bool distance() /求两输出项的差的范数是否满足精度要求double temp = 0;for (i = 0 ;i eps) return false;elsereturn true; /满足精度要求则结束程序void main() cout最大迭代次数为100次endl;cout你希望的精度是多少?endl;couteps;cout请选取松弛因子endl;coutw;/形成迭代矩阵B,存放到A中for (i = 0 ;i N;i+)if (fabs(Aii) eps)cout 打印失败endl;return;double T = Aii;for ( j = 0 ; j N;j+)Aij = -w * Aij/T;Aii = 1-w;Gi = w * Bi/T;int counter = 0;while (counter M)/迭代for (i = 0;i N; i+)double temp = 0;for (j = 0;jN; j+)temp = temp + Aij*Xj;Xi = Gi + temp;if (distance()=true) break;else/交换X,Y向量;for( i = 0; i N ;i+)Yi = Xi;counter+; /打印Xcout 迭代次数为:counter次。该线性方程组的解(X1,X2,X3.X8)为:endl;coutX1=X1endl;coutX2=X2endl;coutX3=X3endl;coutX4=X4endl;coutX5=X5endl;coutX6=X6endl;coutX7=X7endl;coutX8=X8endl;截图如下:eps=0.001 w=0.8 w=0.9 w=1 w=1.1 w=1.2eps=0.0001 w=0.8 w=0.9 w=1 w=1.1 w=1.2eps=0.00001 w=0.8 w=0.9 w=1 w=1.1 w=1.2(4) 对方程组(3)使用SOR方法,选取不同松弛因子代码如下:#include#include#define N 10 /矩阵的维数,可按需更改static double ANN=4,-1,0,0,0,0,0,0,0,0,-1,4,-1,0,0,0,0,0,0,0,0,-1,4,-1,0,0,0,0,0,0,0,0,-1,4,-1,0,0,0,0,0,0,0,0,-1,4,-1,0,0,0,0,0,0,0,0,-1,4,-1,0,0,0,0,0,0,0,0,-1,4,-1,0,0,0,0,0,0,0,0,-1,4,-1,0,0,0,0,0,0,0,0,-1,4,-1,0,0,0,0,0,0,0,0,-1,4;/方程组左侧系数矩阵static double BN=7,5,-13,2,6,-12,14,-4,5,-5; /右侧值static double YN; /输出比较项static double XN; /输出项static double GN; /X = BX + G的G矩阵int i,j,k; /计数器double eps;int M=100;double w;bool distance() /求两输出项的差的范数是否满足精度要求double temp = 0;for (i = 0 ;i eps) return false;elsereturn true; /满足精度要求则结束程序void main() cout最大迭代次数为100次endl;cout你希望的精度是多少?endl;couteps;cout请选取松弛因子endl;coutw;/形成迭代矩阵B,存放到A中for (i = 0 ;i N;i+)if (fabs(Aii) eps)cout 打印失败endl;return;double T = Aii;for ( j = 0 ; j N;j+)Aij = -w * Aij/T;Aii = 1-w;Gi = w * Bi/T;int counter = 0;while (counter M)/迭代for (i = 0;i N; i+)double temp = 0;for (j = 0;jN; j+)temp = temp + Aij*Xj;Xi = Gi + temp;if (distance()=true) break;else/交换X,Y向量;for( i = 0; i N ;i+)Yi = Xi;counter+; /打印Xcout 迭代次数为:counter次。该线性方程组的解(X1,X2,X3.X10)为:endl;coutX1=X1endl;coutX2=X2endl;coutX3=X3endl;coutX4=X4endl;coutX5=X5endl;coutX6=X6endl;coutX7=X7endl;coutX8=X8endl;coutX9=X9endl;coutX10=X10endl;截图如下:eps=0.001 w=0.8 w=0.9 w=1 w=1.1 w=1.2eps=0.0001 w=0.8 w=0.9 w=1 w=1.1 w=1.2eps=0.00001 w=0.8 w=0.9 w=1 w=1.1 w=1.2F 实验结果分析对于第一个实验,由于系数矩阵的谱半径大于1,所以当迭代进行到最大迭代次数100次时仍然不能得到与精确解近似的解,所以实验结果与精确解出入十分大。对于第二个实验,由于所用系数矩阵和第一个实验的系数矩阵是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论