数组分析实验高斯消去法的实现..doc
文本预览下载声明
南昌大学实验报告二
学生代号: 信念 学 号: 5215201314 专业班级: 网络间谍088班
实验类型:□验证 □ 综合■设计□创新 实验日期:2010-12-5 实验成绩:
实验目的
用C语言或C++语言编程实现高斯消去法。
实验基本原理和内容
基本思想:
高斯消去法算法的构造:
记方程组AX=bA(1)X=b(1), 其中,Ab(1)的元素分别记为
Step1:第一次消元
设,将增广矩阵的第i行减去倍,(i=2,…,n),目的是将增广矩阵的第一列内除每一个元素不变外,其余全部消为零,得到A(2)X=b(2),即
其中
Step2:第k次消元()
设第k-1次消元已完成,且,得到A(k)X=b(k),即
,
如此反复,经过n-1次消元之后得到一个与原方程组等价的上三角形方程组.
Step3:回代
只要就可以回代求解
高斯消去法的算法
Step1消元 :
对k=1,2,…,n-1
则停止计算
对i=k+1,k+2,…,n
计算因子;
对j=k+1,k+2,…,n
计算;
Step2回代:
对=n,n-1,…,1
(高斯消去法的条件)
若A的所有顺序主子式均不为0,则高斯消元无需换行即可进行到底,且得到唯一解.
若消元过程中允许对增广矩阵进行行交换,则方程组Ax=b可用消去法求解的充要条件是A可逆.
主要仪器设备及耗材
PC机一台PC微机
Windows 操作系统
Microsoft Visual Studio 6.0集成开发环境
实验程序及运行结果
高斯消元法实验程序代码如下:
#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] = {{2,1,1},{1,3,2},{1,2,2}};
//float b[N] = {4,6,5};
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
显示全部