欢迎来到天天文库
浏览记录
ID:15714142
大小:118.50 KB
页数:8页
时间:2018-08-05
《实验二:列主元消元法实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《数值分析》实验报告实验序号:实验二题目名称:列主元Gauss消元法解n阶线性代数方程组学号:姓名:任课教师:马季骕专业班级:计算机科学与技术(非师范)1、实验目的:用列主元Gauss消元法解n阶线性代数方程组编写一个程序实现用列主元消元法实现解方程组的问题。2、算法分析:其基本做法是把上述方程组通过列主元Gauss消元转化为一个等价的三角形方程组,然后再进行回代就可以求出方程组的解。列主元消元的基本做法是选取系数矩阵的每一列中绝对值最大的作为主元,然后采取和顺序Gauss消元法相同的步骤进行,求得方程组的解。1.
2、 列主元Gauss消元法的算法思想:1.输入系数矩阵A,右端项b,阶n。2.对k=1,2,…,n,循环:(a)按列选主元保存主元所在行的指标。(b)若a=0,则系数矩阵奇异,计算停止;否则,顺序进行。(c)若=k则转向(d);否则换行(d)计算乘子(e)消元: 3. 回代:用右端项b来存放解。 3、实验分析: 建立两个数组a和b,通过循环语句将n阶增广矩阵输入进去,通过对列的循环对每一列进行消去未知数,通过n小步n大步把矩阵化简成上三角形矩阵,最后通过迭代法解得方程组得解。3、
3、函数分析:具体程序设计:8/8for(i=1;i<=n;i++) //消元的第一重循环 { p=0; q=0; for(m=i;m4、(a[m][i]); //确定列主元 q=m; //记录列主元所在的行序列号 } } for(m=1;m5、 a[q][m]=a[i][m]; a[i][m]=a[0][0]; } b[0]=b[q]; //交换常数项,用b[0]做暂存单元 b[q]=b[i]; b[i]=b[0]; for(t=i;t<=n-1;t++) //具体的Gauss消元算法 6、 { w=a[t+1][i]; for(j=i;j<=n;j++) { a[t+1][j]=a[t+1][j]-a[i][j]*(w/a[i][i]); } b[t+1]=b[t+1]-b[i]*(w/a[i][i]); }8/8 7、 k++; } for(i=n;i>=1;i--) //回代过程 { for(j=1;j<=n;j++) v=a[i][j]*x[j]+v; x[i]=(b[i]-v)/a[i][i]; v=0; }4、实验数据截频:8/85、程序说明: 本程序在DevC++环境中编译运行并且通过测试,也可以在VC++8、6.0环境中编译运行。通过提示语句输入相应的系数矩阵和常数项。6:总结体会8/8列主元消元法和Gauss消元法的计算过程基本上是一样的,只是在每一次消元前要选取系数矩阵的列主元,然后把方程组做适当的行交换再进行消元运算,这就保证了舍入误差不扩散。列主元消元法克服了顺序Gauss消元的缺点,运算量也没有全主元消元法那么大,因此是解线性方程组的一种
4、(a[m][i]); //确定列主元 q=m; //记录列主元所在的行序列号 } } for(m=1;m5、 a[q][m]=a[i][m]; a[i][m]=a[0][0]; } b[0]=b[q]; //交换常数项,用b[0]做暂存单元 b[q]=b[i]; b[i]=b[0]; for(t=i;t<=n-1;t++) //具体的Gauss消元算法 6、 { w=a[t+1][i]; for(j=i;j<=n;j++) { a[t+1][j]=a[t+1][j]-a[i][j]*(w/a[i][i]); } b[t+1]=b[t+1]-b[i]*(w/a[i][i]); }8/8 7、 k++; } for(i=n;i>=1;i--) //回代过程 { for(j=1;j<=n;j++) v=a[i][j]*x[j]+v; x[i]=(b[i]-v)/a[i][i]; v=0; }4、实验数据截频:8/85、程序说明: 本程序在DevC++环境中编译运行并且通过测试,也可以在VC++8、6.0环境中编译运行。通过提示语句输入相应的系数矩阵和常数项。6:总结体会8/8列主元消元法和Gauss消元法的计算过程基本上是一样的,只是在每一次消元前要选取系数矩阵的列主元,然后把方程组做适当的行交换再进行消元运算,这就保证了舍入误差不扩散。列主元消元法克服了顺序Gauss消元的缺点,运算量也没有全主元消元法那么大,因此是解线性方程组的一种
5、 a[q][m]=a[i][m]; a[i][m]=a[0][0]; } b[0]=b[q]; //交换常数项,用b[0]做暂存单元 b[q]=b[i]; b[i]=b[0]; for(t=i;t<=n-1;t++) //具体的Gauss消元算法
6、 { w=a[t+1][i]; for(j=i;j<=n;j++) { a[t+1][j]=a[t+1][j]-a[i][j]*(w/a[i][i]); } b[t+1]=b[t+1]-b[i]*(w/a[i][i]); }8/8
7、 k++; } for(i=n;i>=1;i--) //回代过程 { for(j=1;j<=n;j++) v=a[i][j]*x[j]+v; x[i]=(b[i]-v)/a[i][i]; v=0; }4、实验数据截频:8/85、程序说明: 本程序在DevC++环境中编译运行并且通过测试,也可以在VC++
8、6.0环境中编译运行。通过提示语句输入相应的系数矩阵和常数项。6:总结体会8/8列主元消元法和Gauss消元法的计算过程基本上是一样的,只是在每一次消元前要选取系数矩阵的列主元,然后把方程组做适当的行交换再进行消元运算,这就保证了舍入误差不扩散。列主元消元法克服了顺序Gauss消元的缺点,运算量也没有全主元消元法那么大,因此是解线性方程组的一种
此文档下载收益归作者所有