消元法实验报告2.docx
- 文档编号:23946447
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:12
- 大小:150.22KB
消元法实验报告2.docx
《消元法实验报告2.docx》由会员分享,可在线阅读,更多相关《消元法实验报告2.docx(12页珍藏版)》请在冰豆网上搜索。
消元法实验报告2
西京学院数学软件实验任务书
课程名称
数学软件实验
班级
***
学号
***
姓名
***
实验课题
线性方程组高斯消去法,高斯列主元消去法,高斯全主元消去法
实验目的
熟悉线性代数方程组高斯消去法,高斯列主元消去法
实验要求
运用Matlab/C/C++/Java/Maple/Mathematica等其中一种语言完成
实验内容
线性方程组高斯消去法
线性方程组高斯列主元消去法
线性方程组高斯全主元消去法
成绩
教师
王震
一、实验目的:
了解高斯消元法的基本原理,熟悉高斯顺序消元法和高斯列主元消元法的基本算法。
运用Matlab/C/C++/Java/Maple/Mathematica等其中一种语言实现高斯消元法。
对于输入的任意矩阵能解其线性方程组。
二、实验基本原理和内容:
用高斯消元法求解线性方程组的基本思想是设法消去方程组的系数矩阵A的主对角线下的元素,而将
化为等价的上三角方程组,然后再回代过程便可以获得方程组的解。
这种解线性方程组的方法,常称为高斯消元法。
内容
高斯消元法解方程组:
(1)高斯顺序消元法:
第一步:
消元
对
若
则停止计算
对
计算因子
;
对
计算
;
第二步:
回代
对
(高斯消元的条件)
若A的所有顺序主子式均不为0,则高斯消元无需换行即可进行到底,且得到唯一解。
若消元过程中允许对增广矩阵进行行交换,则方程组
可用消元法求解的充要条件是A可逆。
(二)高斯列主元消元法
第一步:
在
即
的系数矩阵
的第一列元素中选择一个绝对值最大的元素,不妨设
。
对调
和
及
和
。
以
作为新的
进行消元(消去对调后的第2~n个方程中的
)。
第
步:
设第
步消元过程完成,得到
,检查
中第
列的后
个元素
,从中选出绝对值最大者,不妨设
,称它为第
列主元素。
若
,则取
做除数直接进行消元。
若
,则将第
个方程对调,使
成为新的
,然后以其作为除数进行消元,继续这一过程,直至得到等价的三角形方程组
,下一阶段的回代过程不变。
;
三、实验程序及运行结果
运行环境:
C/C++
(1)高斯顺序消元实验代码如下:
#include
main()
{
floata[100][100],b[100],x[100];
inti,j,n,k;
floatl,s;
//输入任意矩阵
printf("请输入矩阵的阶数n:
");
scanf("%d",&n);
printf("请输入方程组的系数矩阵:
");
for(i=0;i { for(j=0;j { scanf("%f",&a[i][j]); } } printf("请输入B: "); for(i=0;i scanf("%f",&b[i]); //输出矩阵 printf("方程组的系数矩阵为: A=\n"); for(i=0;i { for(j=0;j { printf("%f",a[i][j]); } printf("\n"); } printf("b向量为: \n"); for(i=0;i printf("%f",b[i]); printf("\n\n"); //消去过程 for(k=0;k { if(! a[k][k]) return-1; for(i=k+1;i { l=a[i][k]/a[k][k]; for(j=k;j { a[i][j]=a[i][j]-l*a[k][j]; } b[i]=b[i]-l*b[k]; } } //消去结果 printf("消去后: A[]\n"); for(i=0;i { for(j=0;j printf("%f",a[i][j]); printf("\n"); } printf("消去后: b[]\n"); for(i=0;i printf("%f",b[i]); printf("\n\n"); //回代过程 x[n-1]=b[n-1]/a[n-1][n-1]; for(k=n-2;k>=0;k--) { s=b[k]; for(j=k+1;j { s=s-a[k][j]*x[j]; } x[k]=s/a[k][k]; } //结果输出 printf("方程组的解x[]=\n"); for(i=0;i printf("%f",x[i]); return0; printf("\n\n"); } (2)高斯列主元消元法实验代码如下: #include #include main() { floata[100][100],b[100],x[100]; inti,j,n,k; floatl,s,temp; floatmax;//列主元的绝对值 intcol;//列主元所在的行 //输入任意矩阵 printf("请输入矩阵的阶数n: "); scanf("%d",&n); printf("请输入方程组的系数矩阵: "); for(i=0;i { for(j=0;j { scanf("%f",&a[i][j]); } } printf("请输入B: "); for(i=0;i scanf("%f",&b[i]); //输出矩阵 printf("方程组的系数矩阵为: A=\n"); for(i=0;i { for(j=0;j { printf("%f",a[i][j]); } printf("\n"); } printf("b向量为: \n"); for(i=0;i printf("%f",b[i]); printf("\n\n"); //消去过程 for(k=0;k { max=fabs(a[k][k]); col=k; //查找最大元素所在的行 for(i=k;i { if(max { max=fabs(a[i][k]); col=i; } } printf("最大元所在的行col: %d\n",col); for(j=k;j { temp=a[col][j]; a[col][j]=a[k][j]; a[k][j]=temp; } temp=b[col];b[col]=b[k];b[k]=temp; if(! a[k][k]) return-1; for(i=k+1;i { l=a[i][k]/a[k][k]; for(j=k;j { a[i][j]=a[i][j]-l*a[k][j]; } b[i]=b[i]-l*b[k]; } } //消去的结果 printf("列主元消去后A[]\n"); for(i=0;i { for(j=0;j printf("%f",a[i][j]); printf("\n"); } printf("向量b[]\n"); for(i=0;i printf("%f",b[i]); printf("\n\n"); //回代过程 x[n-1]=b[n-1]/a[n-1][n-1]; for(k=n-2;k>=0;k--) { s=b[k]; for(j=k+1;j { s=s-a[k][j]*x[j]; } x[k]=s/a[k][k]; } //solution printf("线性方程组的解x[]=\n"); for(i=0;i printf("%f\n",x[i]); printf("\n\n"); return0; } 四、实验小结 相对于高斯顺序消元法,高斯列主元消去法更精确些。 它避免了小主元对计算结果的影响,从而提高了计算的精确度。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 消元法 实验 报告