数值分析高斯实验报告Word格式.docx

上传人:b****1 文档编号:4245153 上传时间:2023-05-03 格式:DOCX 页数:13 大小:149.22KB
下载 相关 举报
数值分析高斯实验报告Word格式.docx_第1页
第1页 / 共13页
数值分析高斯实验报告Word格式.docx_第2页
第2页 / 共13页
数值分析高斯实验报告Word格式.docx_第3页
第3页 / 共13页
数值分析高斯实验报告Word格式.docx_第4页
第4页 / 共13页
数值分析高斯实验报告Word格式.docx_第5页
第5页 / 共13页
数值分析高斯实验报告Word格式.docx_第6页
第6页 / 共13页
数值分析高斯实验报告Word格式.docx_第7页
第7页 / 共13页
数值分析高斯实验报告Word格式.docx_第8页
第8页 / 共13页
数值分析高斯实验报告Word格式.docx_第9页
第9页 / 共13页
数值分析高斯实验报告Word格式.docx_第10页
第10页 / 共13页
数值分析高斯实验报告Word格式.docx_第11页
第11页 / 共13页
数值分析高斯实验报告Word格式.docx_第12页
第12页 / 共13页
数值分析高斯实验报告Word格式.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数值分析高斯实验报告Word格式.docx

《数值分析高斯实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《数值分析高斯实验报告Word格式.docx(13页珍藏版)》请在冰点文库上搜索。

数值分析高斯实验报告Word格式.docx

1.高斯消元法基本思路

如果一个线性方程组的系数矩阵是上三角矩阵时,这种方程组我们称之为上三角方程组,它是很容易求解的。

只要把方程组的最下面的一个方程求解出来,在把求得的解带入倒数第二个方程,求出第二个解,依次往上回代求解。

高斯消元法的目的就是把一般线性方程组简化成上三角方程组。

于是高斯消元法的基本思想是:

通过逐次消元将所给的线性方程组化为上三角形方程组,继而通过回代过程求解线性方程组。

2.高斯列主消元法计算步骤

将方程组用增广矩阵

表示。

步骤1:

消元过程,对

选主元,找

使得

,如果

,则矩阵

奇异,程序结束。

如果

,则交换第

行与第

行对应元素位置,

消元,对

,计算

步骤2:

回代过程:

则矩阵奇异,程序结束;

四、分析

1时间复杂度

时间频度一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。

但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。

并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。

一个算法中的语句执行次数称为语句频度或时间频度。

记为T(n)。

常数阶O

(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3),...,k次方阶O(nk),指数阶O(2n)。

随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。

就本程序而言,因为出现了三个for循环的嵌套所以时间复杂度为O(n^3)

2空间复杂度

空间复杂度与时间复杂度类似,空间复杂度是指算法在计算机内执行时所需存储空间的度量。

记作:

S(n)=O(f(n))我们一般所讨论的是除正常占用内存开销外的辅助存储单元规模。

空间复杂度为O

(1)。

五、程序流程图

六、程序描述

程序要用到的函数

(1、)matrix_getElement(array,n,m);

此函数的作用是获得用户输入的线性方程组的系数矩阵。

(2、)matrix_outputElement(array,n,m);

此函数的作用是显示用户输入的矩阵。

(3、)selectMaxElement(array,n,m,row);

此函数的作用是选择主元素,并把此时对角线上的那列元素与主元素行交换。

(4、)GAUSSProcess(array,n,m,row);

此函数的作用是用主元素列进行高斯消元,把此行以后所有的行的,此列的元素变为0。

(5、)GAUSSProcess_result(array,n,m);

此函数的作用是显示经过高斯消元后的矩阵,此时的系数矩阵为一个上下三角矩阵。

(6、)GAUSSCalculate_result(array,n,m);

此函数的作用是对已经消元好的矩阵,进行回代求解。

并将结果输出。

七、程序代码

#include<

stdio.h>

math.h>

iostream.h>

#include<

iomanip.h>

constintN=60;

//最大

constintM=61;

//60列,再加上等号右边的一列值

//输入要计算方程组的矩阵

voidmatrix_getElement(doubleARRAY[N][M],intn,intm){

for(inti=0;

i<

n;

i++){

cout<

<

"

请您输入第"

\t"

(i+1)<

行:

endl;

for(intj=0;

j<

m;

j++){

cin>

>

ARRAY[i][j];

}

}

return;

}

//输出用户刚才用户输入的矩阵,以便用户检测是否输入正确

voidmatrix_outputElement(doubleARRAY[N][M],intn,intm){

cout<

yourhaveinputthematrixasfllows:

\n"

;

i<

i++){

cout<

ARRAY[i][j]<

"

endl<

//选择主元素,并把主元行与对角线上的那一行交换

voidselectMaxElement(doubleARRAY[N][M],intn,intm,intline){

doublemax=0;

doublet=0;

intj=0;

inti=line;

max=ARRAY[line][line];

for(i=line+1;

if(fabs(ARRAY[i][line])>

fabs(max)){

max=ARRAY[i][line];

j=i;

if(j>

line){

for(i=0;

i++){

t=ARRAY[j][i];

ARRAY[j][i]=ARRAY[line][i];

ARRAY[line][i]=t;

//用对角线上的元素消元后续行中此列的元素

voidGAUSSProcess(doubleARRAY[N][M],intn,intm,introw)

{

doubleROW1[M];

for(intt=0;

t<

(m-row);

t++){

ROW1[t]=ARRAY[row][row+t];

for(intj=(row+1);

j<

n;

j++){

doubleROW_CHANGE[M];

for(intr=0;

r<

r++){

doublemainElement=ROW1[0];

if(fabs(mainElement)<

1e-7){

cout<

Single!

pressanykeyreturn...\n"

getchar();

return;

}

ROW_CHANGE[r]=ROW1[r]*ARRAY[j][row]/ROW1[0];

for(inth=0;

h<

h++){

ARRAY[j][h+row]=ARRAY[j][h+row]-ROW_CHANGE[h];

//用回代的方法求出线性方程组的解

voidGAUSSCalculate_result(doubleARRAY[N][M],intn,intm){

doublea[N];

a[n-1]=ARRAY[n-1][m-1]/ARRAY[n-1][n-1];

for(intp=n-2;

p>

=0;

p--){

for(intq=n-1;

q>

p;

q--){

ARRAY[p][m-1]=ARRAY[p][m-1]-ARRAY[p][q]*a[q];

a[p]=ARRAY[q][m-1]/ARRAY[p][p];

-------thefinalresultasfollows-----------:

for(inte=0;

e<

e++){

x"

e+1<

="

<

a[e]<

endl;

//输出经过高斯消元法处理后得到的矩阵

voidGAUSSProcess_result(doubleARRAY[N][M],intn,intm){

您输入的矩阵经过高斯消元法处理后得到如下形式:

//main函数

voidmain()

doublearray[N][M];

请输入您要运算的矩阵的大小!

intn=0,m=0;

请输入您要运算的矩阵的行数:

cin>

请输入您要运算的矩阵的列数:

您所输入的行为:

n<

您所输入的列为:

m<

matrix_getElement(array,n,m);

//获得矩阵的元素

matrix_outputElement(array,n,m);

//显示输入的矩阵

for(introw=0;

row<

row++)//高斯消元法的主体

{

selectMaxElement(array,n,m,row);

GAUSSProcess(array,n,m,row);

GAUSSProcess_result(array,n,m);

//显示消元后的矩阵

GAUSSCalculate_result(array,n,m);

//回代求解并显示解结果

cout<

Thisistheend!

八、运行程序

本程序可以自己选择线性方程组的行数和列数。

例子如下:

2x1+x2-5x3+x4=8;

x1-3x2-6x4=9;

2x2-x3+2x4=-5;

x1+4x2-7x3+6x4=0;

输入您要运算的矩阵的大小!

4

5

4您所输入的列为:

请您输入第1行:

21-518

请您输入第2行:

1-30-69

请您输入第3行:

02-12-5

请您输入第4行:

14-760

完成以上的数据输入后,出现结果如下图所示:

此图片为用户运行程序后所看到的结果,即:

x1=3

x2=-4

x3=-1

x4=1

九、感想

该程序完成不是一帆风顺的,在编写过程中遇到了许多的疑难问题有幸得到了同学与老师的帮助,同时自己也翻阅了相关书籍,努力编好与完善。

刚开始对自己解线性方程组的课题无从下手,对用“高斯列主消元法”更是莫名其妙。

这次的程序基本上是参考的别人的,不过通过我的不懈努力,也算是对高斯列主消元法有了基本的了解和认识。

这次课设在一定程度上给自己打下了基础,希望以后能有更多的机会参加课程设计。

十、参考文献

【1】谭浩强《C程序设计教程》北京清华大学出版社

【2】刘成等《C语言程序设计实验指导与习题集》北京中国铁道出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2