线性方程组求解高质量C语言程序精编.docx

上传人:b****5 文档编号:28148621 上传时间:2023-07-08 格式:DOCX 页数:8 大小:103.60KB
下载 相关 举报
线性方程组求解高质量C语言程序精编.docx_第1页
第1页 / 共8页
线性方程组求解高质量C语言程序精编.docx_第2页
第2页 / 共8页
线性方程组求解高质量C语言程序精编.docx_第3页
第3页 / 共8页
线性方程组求解高质量C语言程序精编.docx_第4页
第4页 / 共8页
线性方程组求解高质量C语言程序精编.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

线性方程组求解高质量C语言程序精编.docx

《线性方程组求解高质量C语言程序精编.docx》由会员分享,可在线阅读,更多相关《线性方程组求解高质量C语言程序精编.docx(8页珍藏版)》请在冰豆网上搜索。

线性方程组求解高质量C语言程序精编.docx

线性方程组求解高质量C语言程序精编

Highqualitymanuscriptsarewelcometodownload

 

线性方程组求解高质量C语言程序精编

 

课题:

线性方程组求解

 

课题描述及要求··········································2

项目分析················································2

算法流程················································2

方法说明················································3

源代码··················································3

程序说明················································6

运行结果················································7

总结····················································7

参考文献················································8

 

线性方程组求解

05111114陈龙

一.课题描述和功能要求

1.描述:

求解线性方程组Ax=b,写成函数。

其中,A为n乘n阶矩阵,x为n元未知向量,b为n个常数组成的矩阵。

2.要求:

采用高斯先列主元消元法(也可采用其他方法)求解线性方程组AX=b。

二.项目分析

数学上,高斯消去法或称高斯-约当消去法,由高斯和约当得名(很多人将高斯消去作为完整的高斯-约当消去的前半部分),它是线性代数中的一个算法,用于决定线性方程组的解,决定矩阵的秩,以及决定可逆方矩阵的逆。

当用于一个矩阵时,高斯消去产生“行消去梯形形式”。

  例如:

一个二元一次方程组,设法对每个等式进行变形,使两个等式中的同一个未知数的系数相等,这两个等式相减,得到一个新的等式,在这个新的等式中,细数相等的未知数就被除去了(系数为0)。

  同样的也适合多元多次方程组。

我们知道m*n矩阵(用大写字母表示)是一个m行n列的数阵,n维向量(用加粗的小写字母表示)是n个数的数组,也就是一个n*1矩阵(列向量。

我们不考虑行向量)。

另外,大家也都知道矩阵乘法。

因此一个m*n线性方程组可以表示为

  Ax=b,其中A是由系数aij组成的m*n矩阵即系数矩阵,x是n维的未知数向量,b是m维的结果向量。

如果把向量b写到A的右边得到m*(n+1)的矩阵,得到的新矩阵称为这个方程组的增广矩阵。

每一个方程组均对应于一个增广矩阵。

三.算法流程图

四.方法说明

(1)第1步消元——在增广矩阵(A,b)第一列中找到绝对值最大的元素,将其所在行与第一行交换

(2)第2步消元——在增广矩阵(A,b)中的第二列中(从第二行开始)找到绝对值最大的元素,将其所在行与第二行交换

(3)第3步消元——在增广矩阵(A,b)中的第三列中(从第三行开始)找到绝对值最大的元素,将其所在行与第二行交换

(4)按x4-x3-x2-x1的顺序回代求解出方程组的解。

五.源代码

#include<>

#include<>

#include<>

#include<>

intGS(int,double**,double*,double);

double**TwoArrayAlloc(int,int);

voidTwoArrayFree(double**);

voidmain()

{

inti,j,n;

doubleep,**a,*b;

ep=1e-4;

printf("有几个未知数");

scanf("%d",&n);

a=TwoArrayAlloc(n,n);

b=(double*)calloc(n,sizeof(double));

if(b==NULL)

{

printf("内存分布失败\n");

exit

(1);

}

for(i=0;i

{

printf("请输入第%d行相应的系数:

\n",i+1);

for(j=0;j

{

printf("a[%d][%d]:

",i,j);

scanf("%lf",a[i]+j);

fflush(stdin);

}

printf("请输入第%d行相应的常数:

\n",i+1);

printf("b[%d]:

",i);

scanf("%lf",b+i);

fflush(stdin);

}

if(!

GS(n,a,b,ep))

{

printf("不能用高斯消元法求解\n");

exit(0);

}

printf("该方程组的解为:

\n");

for(i=0;i

printf("x%d=%.2f\n",i+1,b[i]);

TwoArrayFree(a);

free(b);

}

intGS(intn,double**a,double*b,doubleep)

{

inti,j,k,l;

doublet;

for(k=1;k<=n;k++)

{

for(l=k;l<=n;l++)

if(fabs(a[l-1][k-1])>ep)

break;

elseif(l==n)

return(0);

if(l!

=k)

{

for(j=k;j<=n;j++)

{

t=a[k-1][j-1];

a[k-1][j-1]=a[l-1][j-1];

a[l-1][j-1]=t;

}

t=b[k-1];

b[k-1]=b[l-1];

b[l-1]=t;

}

t=1/a[k-1][k-1];

for(j=k+1;j<=n;j++)

a[k-1][j-1]=t*a[k-1][j-1];

b[k-1]*=t;

for(i=k+1;i<=n;i++)

{

for(j=k+1;j<=n;j++)

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

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

}

}

for(i=n-1;i>=1;i--)

for(j=i+1;j<=n;j++)

b[i-1]-=a[i-1][j-1]*b[j-1];

return

(1);

}

double**TwoArrayAlloc(intr,intc)

{

double*x,**y;

intn;

x=(double*)calloc(r*c,sizeof(double));

y=(double**)calloc(r,sizeof(double*));

if(!

x||!

y)

{

printf("内存分配失败\n");

exit

(1);

}

for(n=0;n<=r-1;++n)

y[n]=&x[c*n];

return(y);

}

voidTwoArrayFree(double**x)

{

free(x[0]);

free(x);

}

六.程序说明

1.输入方程系数与常数

for(i=0;i

语言程序设计

[2]畅斌,潘莉.VisualC++完全手册

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

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1