guass列主元消去法
来源:互联网 发布:python时间序列分析包 编辑:程序博客网 时间:2024/05/12 19:52
#include<iostream>
#include<math.h>
#include<iomanip>
#define kk 50 //定义最大方程元数
int n;
using namespace std;
void changer(double *p,double *q);
void main()
{
cout<<" ****************************************************************"<<endl;
cout<<" **************本程序是利用高斯列主元消元法求解线性方程组********"<<endl;
cout<<" *************************制作人:李小龙*************************"<<endl;
cout<<" ********************说明:方程最多个数为50**********************"<<endl;
cout<<" ****************************************************************"<<endl;
int i,j,k,s;
double A[kk][kk],r,l[kk][kk],b[kk],u,temp;
aa: cout<<"输入的方程元数"<<endl;
cin>>n;
cout<<"请输入方程系数矩阵:"<<"/n";
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>A[i][j];
cout<<"请输入右边向量:"<<"/n";
for(i=0;i<n;i++)
cin>>b[i];
for(k=0;k<n-1;k++)
{
s=k;
r=fabs(A[k][k]);
for(i=k;i<n;i++)
if(r<fabs(A[i][k]))
{
r=fabs(A[i][k]);
s=i;
}//获取主元
if(s!=k)
{
changer(*(A+k),*(A+s));//交换行元素
temp=b[k];b[k]=b[s];b[s]=temp; //右边向量的交换
}
cout<<"第"<<k+1<<"次选取主元并交换行的顺序"<<endl;
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
cout<<setw(4)<<setprecision(4)<<A[i][j]<<" ";
cout<<b[i]<<endl;
}//
cout<<endl;
for(i=k+1;i<n;i++)
{
l[i][k]=A[i][k]/A[k][k];//计算消去系数
for(j=k;j<n;j++)
A[i][j]=A[i][j]-l[i][k]*A[k][j];
b[i]=b[i]-l[i][k]*b[k];
}//消元过程
cout<<"第"<<k+1<<"次消元"<<endl;
for (int e=0;e<n;e++)
{
for (j=0;j<n;j++)
cout<<setw(4)<<setprecision(4)<<A[e][j]<<" ";
cout<<b[e]<<endl;
}
cout<<endl;
}
if(A[k][k]<0.0001)
{
cout<<"系数矩阵是非奇异矩阵!"<<"/n";
cout<<"所以:方程无唯一解!"<<"/n";
cout<<"********请问是否继续*********?"<<endl;
cout<<"********退出请输入1*********"<<endl;
cout<<"********要继续请输入任意非1的整数*********"<<endl;
int g;
cin>>g;
if(g!=1)goto aa;
else exit(1);
}//判断系数矩阵的奇异性
for(i=n-1;i>=0;i--)
{
u=0;
for(j=i+1;j<n;j++)
u=u+A[i][j]*b[j];
b[i]=(b[i]-u)/A[i][i];
}//回代过程
cout<<"最后得方程的根为:"<<"/n";
for(i=0;i<n;i++)
cout<<"x"<<i+1<<"="<<b[i]<<"/n";
cout<<"********退出请输入1*********"<<endl;
cout<<"********要继续请输入任意非1的整数*********"<<endl;
int g;
cin>>g;
if(g!=1)goto aa;
else exit(1);
}
void changer(double *p,double *q)
{
int i;
double temp;
for(i=0;i<n;i++)
{
temp=*(p+i);
*(p+i)=*(q+i);
*(q+i)=temp;
}
} //交换行元素的函数
#include<math.h>
#include<iomanip>
#define kk 50 //定义最大方程元数
int n;
using namespace std;
void changer(double *p,double *q);
void main()
{
cout<<" ****************************************************************"<<endl;
cout<<" **************本程序是利用高斯列主元消元法求解线性方程组********"<<endl;
cout<<" *************************制作人:李小龙*************************"<<endl;
cout<<" ********************说明:方程最多个数为50**********************"<<endl;
cout<<" ****************************************************************"<<endl;
int i,j,k,s;
double A[kk][kk],r,l[kk][kk],b[kk],u,temp;
aa: cout<<"输入的方程元数"<<endl;
cin>>n;
cout<<"请输入方程系数矩阵:"<<"/n";
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>A[i][j];
cout<<"请输入右边向量:"<<"/n";
for(i=0;i<n;i++)
cin>>b[i];
for(k=0;k<n-1;k++)
{
s=k;
r=fabs(A[k][k]);
for(i=k;i<n;i++)
if(r<fabs(A[i][k]))
{
r=fabs(A[i][k]);
s=i;
}//获取主元
if(s!=k)
{
changer(*(A+k),*(A+s));//交换行元素
temp=b[k];b[k]=b[s];b[s]=temp; //右边向量的交换
}
cout<<"第"<<k+1<<"次选取主元并交换行的顺序"<<endl;
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
cout<<setw(4)<<setprecision(4)<<A[i][j]<<" ";
cout<<b[i]<<endl;
}//
cout<<endl;
for(i=k+1;i<n;i++)
{
l[i][k]=A[i][k]/A[k][k];//计算消去系数
for(j=k;j<n;j++)
A[i][j]=A[i][j]-l[i][k]*A[k][j];
b[i]=b[i]-l[i][k]*b[k];
}//消元过程
cout<<"第"<<k+1<<"次消元"<<endl;
for (int e=0;e<n;e++)
{
for (j=0;j<n;j++)
cout<<setw(4)<<setprecision(4)<<A[e][j]<<" ";
cout<<b[e]<<endl;
}
cout<<endl;
}
if(A[k][k]<0.0001)
{
cout<<"系数矩阵是非奇异矩阵!"<<"/n";
cout<<"所以:方程无唯一解!"<<"/n";
cout<<"********请问是否继续*********?"<<endl;
cout<<"********退出请输入1*********"<<endl;
cout<<"********要继续请输入任意非1的整数*********"<<endl;
int g;
cin>>g;
if(g!=1)goto aa;
else exit(1);
}//判断系数矩阵的奇异性
for(i=n-1;i>=0;i--)
{
u=0;
for(j=i+1;j<n;j++)
u=u+A[i][j]*b[j];
b[i]=(b[i]-u)/A[i][i];
}//回代过程
cout<<"最后得方程的根为:"<<"/n";
for(i=0;i<n;i++)
cout<<"x"<<i+1<<"="<<b[i]<<"/n";
cout<<"********退出请输入1*********"<<endl;
cout<<"********要继续请输入任意非1的整数*********"<<endl;
int g;
cin>>g;
if(g!=1)goto aa;
else exit(1);
}
void changer(double *p,double *q)
{
int i;
double temp;
for(i=0;i<n;i++)
{
temp=*(p+i);
*(p+i)=*(q+i);
*(q+i)=temp;
}
} //交换行元素的函数
- guass列主元消去法
- Guass消去法解方程组
- 实验一:Guass列选主元消去法之C语言代码
- 数值作业:Guass全选主元消去法之C语言代码
- (C#)列主元消去法解方程组
- Gauss 列主元消去法的Python程序
- 全主元消去法
- 高斯消去法
- 高斯消去法
- 高斯消去法
- 高斯消去法
- 高斯消去法
- 高斯消去法
- 高斯列主元消去法
- 高斯消去法
- Guass列主元、平方根法、追赶法求解方程组的C++实现
- 列主元Gauss消去法解线性方程组(C语言)
- 列主元消去法求解线性方程组(C++实现)
- Application 的应用
- 对一张上亿表的字段做增加或删除操作
- Java实现嵌入式数据库(文本数据库)代码实例
- 用强制订阅实现数据库同步操作
- 两个JSP小技巧
- guass列主元消去法
- Vector、ArrayList、List使用深入剖析
- DataGridView 编程36计
- Spring2 ApplicationContext
- 造句
- Lumigent Log Explorer 使用方法
- 在virtualbox中主机(debian)与客户机(windows)共享文件
- 仿windows菜单
- SQLServer2000同步复制技术实现步骤