大规模线性方程组求解 c语言,线性方程组求解高质量C语言程序.doc

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

课 题: 线性方程组求解

目录

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

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

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

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

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

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

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

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

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

线性方程组求解

陈龙

一.课题描述和功能要求

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

int GS(int,double**,double *,double);

double **TwoArrayAlloc(int,int);

void TwoArrayFree(double **);

void main()

{

int i,j,n;

double ep,**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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值