Gauss消去法和gauss列组消元法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一:实验题目:
编程实现《计算机数值方法》习题二(p59)的2、3题。
二:实验代码:
高斯消去法:
#include<iostream>
#include<cmath>
using namespace std;
float x[100];
float a[100][100];//定义一个足够大的全局二维数组//高斯消元法
void gauss(int m,int n)
{
int i,j,k,p;
k=m;
p=n;
for(i=0;i<m;++i)//找到对比列
{
for(j=i+1;j<m;++j)//找到要消元的列
{
if(a[j][i]!=0)
{
// a[j][i]=0;
for(int p=i+1;p<n;++p)//找到两列之后进行相减消元
{
a[j][p]=a[j][p]-a[i][p]*(a[j][i]/a[i][i]);
}
}
}
}
x[k-1]=a[k-1][p-1]/a[k-1][p-2]; //最后一个解
for(i=k-2;i>=0;i--) //其他的解
{
float total=a[i][p-1];
for(j=p-1;j>i;j--)
{
total=total-x[j]*a[i][j];
}
x[i]=total/a[i][i];
}
for(i=0;i<k;i++) //把求出来的解一个一个输出
cout<<"x"<<i+1<<"="<<x[i]<<" "<<endl;
}
int main()
{
int m,n,i,j;
/* float **a;
cin>>m>>n;
a=new float *[n]; //动态数组
for(i=0; i<n; i++)
{
a[i]=new float [m];
}*/
// float x[100];
cout<<"请输入行列式的大小"<<endl;
cin>>m>>n;
cout<<"请输入每行每列的元素"<<endl;
for(i=0;i<m;++i)
{
for(j=0;j<n;++j)
{
cin>>a[i][j];
}
}
//cin>>x[i];
gauss(m,n);//调用高斯算法
system("pause");
return 0;
}
高斯列组元素消去法:
#include <iostream>
#include <math.h>
using namespace std;
//列组消去法
void gauss2(int **a,float *x,int n)
{
int k,Pr,i,j;
float t,total;
for(k=0;k<n-1;k++)
{
Pr=k;
for(i=k+1;i<n;i++)
{
if(fabs(a[i][k])>fabs(a[Pr][k])) Pr=i;
}
if(Pr>k)
for(j=k;j<n+1;j++)
{
t=a[k][j];
a[k][j]=a[Pr][j];
a[Pr][j]=t;
}
for(i=k+1;i<n;i++)
{
t=a[i][k];
for(j=k;j<n+1;j++)
a[i][j]=a[i][j]-(t*a[k][j])/a[k][k];
}
}
x[n-1]=a[n-1][n]/a[n-1][n-1];
for(i=n-2;i>=0;i--)
{
total=a[i][n];
for(j=n-1;j>i;j--)
total=total-x[j]*a[i][j];
x[i]=total/a[i][i];
}
for(i=0;i<n;i++)
cout<<"x"<<i+1<<"="<<x[i]<<" "<<endl; }
int main()
{
int i,j,m,n;
int **a;
cin>>m>>n;
a=new int *[n]; //动态数组
for(i=0; i<n; i++)
a[i]=new int [m];
cout<<"\n请输入方程的系数:"<<endl;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
cin>>a[i][j];
}
float x[30];
gauss2(a,x,m); //a解的数组,m解
delete []a;
cout<<endl;
return 0; }
三:实验结果;
高斯消去法:
高斯列组消去法:。