- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数值分析与算法 高斯消法求解线性方程组
高斯消法求解线性代数方程组
1.原理:
高斯消去法是利用矩阵的初等行变换将系数矩阵化成一个上三角矩阵,同时,增广矩阵后面的右端向量也跟着变化。其实质是将线性方程组进行一系列的相加相减等变化通过矩阵反映出来的过程。高斯消去法包括两个步骤,即消元和回代。当矩阵变成上三角矩阵后,可以从右下角开始依次解出方程组的xn,xn-1…x1这也就是回代的过程。
2.C++语言实现方式:
定义n*n二维数组a[n][n]存放系数矩阵,一维数组b[n]存放右端常向量x[n]存放解向量;
(1) 归一化:
对j=k+1…n的数值 a[k][j]/a[k][k]赋值给a[k][j]
同时b[n]也跟着变化:b[k]/a[k][k]赋值给b[k]
(2) 消元:
对a[i][j]赋值为a[i][j]-a[i][k] (i=k+1…n;j=k+1…n)
同时b[i]赋值为b[i]-a[i][k]b[k] (i=k+1…n)
(3) 回代:
从最后一个xn开始
有x[n-1]=b[n-1]/a[n-1][n-1]
且依次用已经往上迭代可解出的值b[k]…b[0]。
3.源程序如下:
#include stdio.h
#include stdlib.h
#define N 10 //矩阵大小范围
/*
* 使用已经求出的x,向前计算x(供getx()调用)
* float a[][] 系数矩阵
* float x[] 方程组解
* int i 解的序号
* int n 矩阵大小
* return 公式中需要的和
*/
float getm(float a[N][N], float x[N], int i, int n)
{
float m = 0;
int r;
for(r=i+1; rn; r++)
{
m += a[i][r] * x[r];
}
return m;
}
/*
* 解方程组,计算x
* float a[][] 系数矩阵
* float b[] 右端项
* float x[] 方程组解
* int i 解的序号
* int n 矩阵大小
* return 方程组的第i个解
*/
float getx(float a[N][N], float b[N], float x[N], int i, int n)
{
float result;
if(i==n-1) //计算最后一个x的值
result = float(b[n-1]/a[n-1][n-1]);
else //计算其他x值(对于公式中的求和部分,需要调用getm()函数)
result = float((b[i]-getm(a,x,i,n))/a[i][i]);
return result;
}
void main()
{
float a[N][N]; //系数矩阵
float b[N]; //右端项
float x[N]; //方程组解
int i,j,k;
int n=N; //矩阵大小
/*用户手工输入矩阵*/
printf(请输入系数矩阵的大小:);
scanf(%d, n);
printf(请连续输入矩阵值:);
for(i=0; in; i++)
{
for(j=0; jn; j++)
scanf(%f, a[i][j]);
}
printf(请输入右端项:);
for(i=0; in; i++)
{
scanf(%f, b[i]);
}
/*显示原始矩阵*/
printf(\n原始矩阵\n);
for(i=0; in; i++)
{
for(j=0; jn; j++)
printf(%f ,a[i][j]);
printf(\t|\t%f\n,b[i]);
}
printf(\n\n);
/*进行高斯消去*/
for(i=0; in-1; i++)
{
for(j=i+1; jn; j++)
{
a[i][j]=(float)(a[i][j]/a[i][i]);
}
b[i]=(float)
文档评论(0)