列主元高斯约当消去法实验.docx
- 文档编号:9237173
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:13
- 大小:75KB
列主元高斯约当消去法实验.docx
《列主元高斯约当消去法实验.docx》由会员分享,可在线阅读,更多相关《列主元高斯约当消去法实验.docx(13页珍藏版)》请在冰豆网上搜索。
列主元高斯约当消去法实验
山西大学计算机与信息技术学院
实验报告
姓名
小超
学号
11111111
专业班级
2013级计算机科学与技术
课程名称
计算方法实验
指导教师
李
实验日期
2015/11/03
成绩
实验名称
用列主元高斯-约当法解方程组
一、实验目的:
用列主元高斯-约当法解线性方程组
。
式中,
为
阶非奇异方阵,
,
式
阶列向量,并分析选主元的重要性。
二、实验内容:
解下列方程组
三、实验程序:
源代码
#include
//Hello.cpp:
定义控制台应用程序的入口点。
#include"stdio.h"
#include"stdlib.h"
#include"math.h"
intmain(){
doublearr[4][5]={{1.1348,3.8326,1.1651,3.4017,9.5342},
{0.5301,1.7875,2.5330,1.5435,6.3941},
{3.4129,4.9317,8.7643,1.3142,18.4231},
{1.2371,4.9998,10.6721,0.0147,16.9237}
};
for(inti=1;i<3;i++){//确定第一列列主元
if(arr[0][0] for(intj=0;j<5;j++){ doubletemp=arr[0][j]; arr[0][j]=arr[i][j]; arr[i][j]=temp; } } ////////////////////////////////////////输出矩阵 printf("确定第一列列主元\n"); for(inti=0;i<4;i++){ for(intj=0;j<5;j++){ printf("%f",arr[i][j]); printf("\t"); } printf("\n"); }///////////////////////////////////////////////////////////// //将第一列除第一行外其他值变成0 doubleolda; for(inti=1;i<4;i++){ olda=arr[i][0]; for(intj=0;j<5;j++){ arr[i][j]=(arr[i][j]-(olda/arr[0][0])*arr[0][j]); } } ////////////////////////////////////////输出矩阵 printf("\n"); printf("\n"); printf("将第一列除第一行外其他值变成0\n"); for(inti=0;i<4;i++){ for(intj=0;j<5;j++){ printf("%f",arr[i][j]); printf("\t"); } printf("\n"); }///////////////////////////////////////////////////////////// //把第一行第一列值变为1 for(intj=4;j>-1;j--){ arr[0][j]=arr[0][j]/arr[0][0]; } ////////////////////////////////////////输出矩阵 printf("\n"); printf("\n"); printf("把第一行第一列值变为1\n"); for(inti=0;i<4;i++){ for(intj=0;j<5;j++){ printf("%f",arr[i][j]); printf("\t"); } printf("\n"); }///////////////////////////////////////////////////////////// //确定第二列列主元 for(inti=2;i<4;i++){ if(fabs(arr[1][1]) for(intj=1;j<5;j++){ doubletemp=arr[1][j]; arr[1][j]=arr[i][j]; arr[i][j]=temp; } } ////////////////////////////////////////输出矩阵 printf("\n"); printf("\n"); printf("确定第二列列主元\n"); for(inti=0;i<4;i++){ for(intj=0;j<5;j++){ printf("%f",arr[i][j]); printf("\t"); } printf("\n"); }///////////////////////////////////////////////////////////// //把第二列三四行变为0 for(inti=2;i<4;i++){ for(intj=4;j>0;j--){ arr[i][j]=arr[i][j]-arr[i][1]/arr[1][1]*arr[1][j]; } } ////////////////////////////////////////输出矩阵 printf("\n"); printf("\n"); printf("把第二列三四行变为0\n"); for(inti=0;i<4;i++){ for(intj=0;j<5;j++){ printf("%f",arr[i][j]); printf("\t"); } printf("\n"); }///////////////////////////////////////////////////////////// //把第二行第二列的值变为1 for(intj=4;j>0;j--){ arr[1][j]=arr[1][j]/arr[1][1]; } ////////////////////////////////////////输出矩阵 printf("\n"); printf("\n"); printf("第二行第二列的值变为1\n"); for(inti=0;i<4;i++){ for(intj=0;j<5;j++){ printf("%f",arr[i][j]); printf("\t"); } printf("\n"); }///////////////////////////////////////////////////////////// //把第一行第二列值变为0 for(intj=4;j>0;j--){ arr[0][j]=arr[0][j]-arr[1][j]*arr[0][1]; } ////////////////////////////////////////输出矩阵 printf("\n"); printf("\n"); printf("把第一行第二列值变为0\n"); for(inti=0;i<4;i++){ for(intj=0;j<5;j++){ printf("%f",arr[i][j]); printf("\t"); } printf("\n"); }///////////////////////////////////////////////////////////// //确定第三列列主元 for(inti=3;i<4;i++){ if(fabs(arr[2][2]) for(intj=2;j<5;j++){ doubletemp=arr[2][j]; arr[2][j]=arr[i][j]; arr[i][j]=temp; } } ////////////////////////////////////////输出矩阵 printf("\n"); printf("\n"); printf("确定第三列列主元\n"); for(inti=0;i<4;i++){ for(intj=0;j<5;j++){ printf("%f",arr[i][j]); printf("\t"); } printf("\n"); }///////////////////////////////////////////////////////////// //把第四行第三列的值变为0 for(intj=4;j>1;j--){ arr[3][j]=arr[3][j]-arr[3][2]/arr[2][2]*arr[2][j]; } ////////////////////////////////////////输出矩阵 printf("\n"); printf("\n"); printf("把第四行第三列的值变为0\n"); for(inti=0;i<4;i++){ for(intj=0;j<5;j++){ printf("%f",arr[i][j]); printf("\t"); } printf("\n"); }///////////////////////////////////////////////////////////// //把第三行第三列的值变为1 for(intj=4;j>1;j--){ arr[2][j]=arr[2][j]/arr[2][2]; } ////////////////////////////////////////输出矩阵 printf("\n"); printf("\n"); printf("把第三行第三列的值变为1\n"); for(inti=0;i<4;i++){ for(intj=0;j<5;j++){ printf("%f",arr[i][j]); printf("\t"); } printf("\n"); }///////////////////////////////////////////////////////////// //把第一、二行的第三列元素变为0 for(inti=0;i<2;i++){ for(intj=4;j>1;j--){ arr[i][j]=arr[i][j]-arr[i][2]*arr[2][j];//kk } } ////////////////////////////////////////输出矩阵 printf("\n"); printf("\n"); printf("把第一、二行的第三列元素变为0\n"); for(inti=0;i<4;i++){ for(intj=0;j<5;j++){ printf("%f",arr[i][j]); printf("\t"); } printf("\n"); }///////////////////////////////////////////////////////////// //把第四行第四列的值变为1 for(intj=4;j>2;j--){ arr[3][j]=arr[3][j]/arr[3][3]; } ////////////////////////////////////////输出矩阵 printf("\n"); printf("\n"); printf("把第四行第四列的值变为1\n"); for(inti=0;i<4;i++){ for(intj=0;j<5;j++){ printf("%f",arr[i][j]); printf("\t"); } printf("\n"); }///////////////////////////////////////////////////////////// //把第一、二、三行的第四列值变为0 for(inti=0;i<3;i++){ for(intj=4;j>2;j--){ arr[i][j]=arr[i][j]-arr[i][3]*arr[3][j];//kk } } ////////////////////////////////////////输出矩阵 printf("\n"); printf("\n"); printf("把第一、二、三行的第四列值变为0\n"); for(inti=0;i<4;i++){ for(intj=0;j<5;j++){ printf("%f",arr[i][j]); printf("\t"); } printf("\n"); }///////////////////////////////////////////////////////////// doublex1=arr[0][4]; doublex2=arr[1][4]; doublex3=arr[2][4]; doublex4=arr[3][4]; printf("x1=%f",x1); printf("\n"); printf("x2=%f",x2); printf("\n"); printf("x3=%f",x3); printf("\n"); printf("x4=%f",x4); while (1); return0; } 三、结果分析: 虽然两种方法得出的结果均正确,列主元素的计算量稍多,但是从计算过程上看,不列主元素时,矩阵在变换过程中曾出现4539多的数据,而列主元素数据较为稳定,波动不大。 对于不能精确保留所有数据的计算机来说,数据变化越大,损失的精度越多。 所以在进行精确计算时,还是列主元素更为精确稳定。 WelcomeTo Download! ! ! 欢迎您的下载,资料仅供参考!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 列主元高斯约 消去 实验