04033020用高斯列主元消元法解线性方程组.docx

上传人:b****1 文档编号:2170110 上传时间:2023-05-02 格式:DOCX 页数:17 大小:67.83KB
下载 相关 举报
04033020用高斯列主元消元法解线性方程组.docx_第1页
第1页 / 共17页
04033020用高斯列主元消元法解线性方程组.docx_第2页
第2页 / 共17页
04033020用高斯列主元消元法解线性方程组.docx_第3页
第3页 / 共17页
04033020用高斯列主元消元法解线性方程组.docx_第4页
第4页 / 共17页
04033020用高斯列主元消元法解线性方程组.docx_第5页
第5页 / 共17页
04033020用高斯列主元消元法解线性方程组.docx_第6页
第6页 / 共17页
04033020用高斯列主元消元法解线性方程组.docx_第7页
第7页 / 共17页
04033020用高斯列主元消元法解线性方程组.docx_第8页
第8页 / 共17页
04033020用高斯列主元消元法解线性方程组.docx_第9页
第9页 / 共17页
04033020用高斯列主元消元法解线性方程组.docx_第10页
第10页 / 共17页
04033020用高斯列主元消元法解线性方程组.docx_第11页
第11页 / 共17页
04033020用高斯列主元消元法解线性方程组.docx_第12页
第12页 / 共17页
04033020用高斯列主元消元法解线性方程组.docx_第13页
第13页 / 共17页
04033020用高斯列主元消元法解线性方程组.docx_第14页
第14页 / 共17页
04033020用高斯列主元消元法解线性方程组.docx_第15页
第15页 / 共17页
04033020用高斯列主元消元法解线性方程组.docx_第16页
第16页 / 共17页
04033020用高斯列主元消元法解线性方程组.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

04033020用高斯列主元消元法解线性方程组.docx

《04033020用高斯列主元消元法解线性方程组.docx》由会员分享,可在线阅读,更多相关《04033020用高斯列主元消元法解线性方程组.docx(17页珍藏版)》请在冰点文库上搜索。

04033020用高斯列主元消元法解线性方程组.docx

04033020用高斯列主元消元法解线性方程组

沈阳航空工业学院

课程设计

学号200704033020

班级7403301

姓名刘阳

指导教师王晓岩

2009年3月6日

沈阳航空工业学院

课程设计任务书

院系:

航空宇航工程学院专业:

飞行器设计与工程班级:

7403301

学号:

200704033020题目:

用高斯列主元消元法解线性方程组

一、课程设计时间

2008~09第2学期第1周,共计1周,20学时。

二、课程设计内容

用C语言编写程序完成以下任务:

请用高斯列主元消元法解下列线性方程组:

三、课程设计要求

1.程序质量:

✧贯彻结构化的程序设计思想。

✧用户界面友好,功能明确,操作方便。

✧用户界面中的菜单至少应包括“输入数据”、“开始计算”、“退出”3项。

✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。

2.课程设计说明书:

课程结束后,上交课程设计说明书和源程序。

课程设计说明书的格式和内容参见提供的模板。

高斯消元法解题步骤:

(AX=b):

方法说明(以4阶为例)

●第一步消元——在增广矩阵(A,b)第一列中找到绝对值最大的元素,将其所在行与第一行交换,再对(A,b)做初等行变换使原方程组转化为如下形式:

●第二步消元——在增广矩阵(A,b)中的第二列中(从第二行开始)找到绝对值最大的元素,将其所在行与第二行交换,再对(A,b)做初等行变换使原方程组转化为:

●第三步消元——在增广矩阵(A,b)中的第三列中(从第三行开始)找到绝对值最大的元素,将其所在行与第二行交换,再对(A,b)做初等行变换使原方程组转化为:

按x4x3x2x1的顺序回代求解出方程组的解。

指导教师:

________学生签名:

________

五、说明书成绩:

六、教师评语:

 

 

目录

一、需求分析1

二、程序流程图2

三、核心技术的实现说明及相应程序段8

四、个人总结11

五、参考文献11

六、源程序11

 

一、需求分析

经过对程序设计题目的分析可知,整个程序的设计实现大致分为三个模块,分别是:

输入方程组系数及结果,计算方程组,继续运算或退出。

计算方程组模块对应如下:

一、添加数据(行列式每行的系数和结果):

主要实现程序最初运行时学生数据的录入。

二、进行运算:

运用gauss函数进行运算,并最终显示结果。

三、继续运算/退出:

可以在程序的一次运行当中循环执行所有的功能,并根据需要,终止程序的执行。

二、程序流程图

1、程序总体结构图

图1:

程序总体结构图

显示文本模式窗口

输出:

用Gauss列主元消元法解线性方程组

输出:

解方程组请按Enter.

输出:

退出程式请按Esc.

输入:

所须选择的序号.

根据输入信息进行选择

ESCEnter其他

退出输出“无根或大于二个

调用gauss函数

 

图1程序总体结构图

2、具体功能框图

(1)菜单函数

图1

(2)添加系数:

Putin函数,输入行列式系数和结果

图2

图3

(3)guass

图4

 

三、核心技术的实现说明及相应程序段

本程序一共由两个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。

在这些函数当中,运算函数是程序中较为核心的部分,下面分别进行说明。

1、运算函数

运算函数是本程序的主要部分,首先输入系数和向量后存入数组,判断方程是否合法,不合法则返回菜单,然后通过循环解二维数组,最后输出结果x[i],具体程序段如下:

voidgauss()

{

//doublea[n][n];

//doubleb[n];

doublex[n];

for(intk=0;k<(n-1);k++)

{

doubleamax=abc(a[k][k]);

intl=k;

for(inti=k+1;i

{

if(amax

{

amax=abc(a[i][k]);

l=i;

}

}

if(amax==0)

{printf("无根或根大于二个\n");

return;

}

if(l!

=k)

{

doublet=0;

for(intj=k;j

{

t=a[k][j];a[k][j]=a[l][j];a[l][j]=t;

}

t=b[k];b[k]=b[l];b[l]=t;

}

for(i=k+1;i

{a[i][k]=a[i][k]/a[k][k];

b[i]=b[i]-a[i][k]*b[k];

for(intj=k+1;j

{

a[i][j]=a[i][j]-a[i][k]*a[k][j];

}

}

}

if(a[n-1][n-1]==0)

{printf("无根或根大于二个\n");

return;

}

else

{

b[n-1]=x[n-1]=b[n-1]/a[n-1][n-1];

for(inti=n-2;i>=0;i--)

{

doubles=0;

for(intj=i+1;j

{

s+=a[i][j]*x[j];

}

b[i]=x[i]=(b[i]-s)/a[i][i];

}

}

printf("方程组的解为x=(");

for(inti=0;i

{

printf("%lf",x[i]);

if(i!

=(n-1))

printf(",");

}

printf(")");

}

四、个人总结

这次课设让我更熟悉的掌握了通过C语言运用高斯定理解方程组,也使我对二维数组的认识更加深入了解,在完成程序中,遇到过较大的困难,但通过重新深入教材和对资料理解的基础逐步完成。

五、参考文献

1谭浩强.《C程序设计》.北京:

清华大学出版社,2005

2刘成等.《C语言程序设计实验指导与习题集》.北京:

中国铁道出版社,2006

六、源程序

#include

#include

#include

#include"stdlib.h"//其中定义了system()函数

#definen3

doublea[n][n];

doubleb[n];

voidmenu();

voidputin();

voidstart();

voidmenu()

{printf("*************************高斯消去法*************************");

printf("\n1输入数据");

printf("\n2开始计算");

printf("\n3退出");

}

voidputin()

{

intp,j;

for(p=0;p

{

printf("输入第");

printf("%d",p+1);

printf("行系数:

\n");

for(j=0;j

scanf("%lf",&a[p][j]);

}

for(p=0;p

{

printf("输入第");

printf("%d",p+1);

printf("行结果:

\n");

scanf("%lf",&b[p]);

}

}

doubleabc(doublex)

{

if(x<0)return((-1)*x);

returnx;

}

 

voidgauss()

{

 

//doublea[n][n];

//doubleb[n];

doublex[n];

for(intk=0;k<(n-1);k++)

{

doubleamax=abc(a[k][k]);

intl=k;

for(inti=k+1;i

{

if(amax

{

amax=abc(a[i][k]);

l=i;

}

}

if(amax==0)

{printf("无根或根大于二个\n");

return;

}

if(l!

=k)

{

doublet=0;

for(intj=k;j

{

t=a[k][j];a[k][j]=a[l][j];a[l][j]=t;

}

t=b[k];b[k]=b[l];b[l]=t;

}

for(i=k+1;i

{a[i][k]=a[i][k]/a[k][k];

b[i]=b[i]-a[i][k]*b[k];

for(intj=k+1;j

{

a[i][j]=a[i][j]-a[i][k]*a[k][j];

}

}

}

if(a[n-1][n-1]==0)

{printf("无根或根大于二个\n");

return;

}

else

{

b[n-1]=x[n-1]=b[n-1]/a[n-1][n-1];

for(inti=n-2;i>=0;i--)

{

doubles=0;

for(intj=i+1;j

{

s+=a[i][j]*x[j];

}

b[i]=x[i]=(b[i]-s)/a[i][i];

}

}

printf("方程组的解为x=(");

for(inti=0;i

{

printf("%lf",x[i]);

if(i!

=(n-1))

printf(",");

}

printf(")");

}

voidmain()

{

while

(1)

{

intq;

menu();

printf("\n请输入您要选择的操作序列号,按回车键确认:

");

scanf("%d",&q);

switch(q)

{

case1:

putin();break;

case2:

gauss();break;

case3:

exit(0);break;

default:

printf("输入错误,请输入列表中存在的序列号!

\n");

}

}

}

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

当前位置:首页 > 幼儿教育 > 唐诗宋词

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

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