高斯消元法解方程--gauss
来源:互联网 发布:中国水污染地图数据库 编辑:程序博客网 时间:2024/06/04 23:30
好吧,现在没时间了,等回家再继续写吧.#include <iostream>
#include <algorithm>
#include <cmath>
#include <fstream>
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
//#define cin fin
//#define cout fout
int n,m;
double x[51][21]; //x[i][j]-> i个方程 j元
double ans[21];
void Read();
void del();
void getMax(int a,int b);
int gcd(int a,int b);
void getans();
void Write();
int main()
{
Read();
del();
Write();
return 0;
}
void Read()
{
cin>>n>>m;
for(int i=0;i<m;i++)
{
for(int j=1;j<=n;j++)
cin>>x[i][j];
cin>>x[i][0];
}
}
void del()
{
for(int i=0,j=1;i<m && j<=n;i++,j++)
{
getMax(i,j);
for(int k=i+1;k<m;k++)
{
int g=abs(gcd(x[i][j],x[k][j]));
int tmp1=abs(x[k][j]/g),tmp2=abs(x[i][j]/g);
int t=1;
if(x[i][j]*tmp1!=x[k][j]*tmp2)
t=-1;
for(int l=j;l<=n;l++)
x[k][l]=x[i][l]*tmp1-t*x[k][l]*tmp2;
x[k][0]=x[i][0]*tmp1-t*x[k][0]*tmp2;
//Write();
//cout<<"gcd:"<<g<<" t:"<<t<<endl;
}
}
getans();
}
void getMax(int a,int b)
{
int p=b;
for(int i=a;i<m;i++)
if(abs(x[p][b])<abs(x[i][b]))
p=i;
for(int i=0;i<=n;i++)
swap(x[p][i],x[a][i]);
}
int gcd(int a,int b)
{
if(a%b==0) return b;
return gcd(b,a%b);
}
void getans()
{
ans[n]=x[n-1][0]/x[n-1][n];
for(int i=n-1;i>=1;i--)
{
double tmp=0;
for(int j=i+1;j<=n;j++)
tmp+=x[i-1][j]*ans[j];
ans[i]=(x[i-1][0]-tmp)/x[i-1][i];
}
}
void Write()
{
/*cout<<endl;
for(int i=0;i<m;i++)
{
for(int j=1;j<=n;j++)
cout<<x[i][j]<<" ";
cout<<x[i][0];
cout<<endl;
}
*/
for(int i=1;i<=n;i++)
cout<<"x"<<i<<": "<<ans[i]<<endl;
}
- 高斯消元法解方程--gauss
- Gauss
- Gauss
- 高斯消元法解方程
- 方程
- 方程
- 方程
- GAUSS RESOURCES
- Gauss平滑
- gauss 函数
- EOJ gauss
- Gauss Fibonacci
- gauss function
- Gauss Fibonacci
- gauss 模板
- Gauss Fibonacci
- gauss 2
- Gauss template
- 创新班20课3题+总结
- git使用笔记
- LCA
- 创新班21课总结
- 反射机制
- 高斯消元法解方程--gauss
- Java心得体会之面向接口编程
- 文献管理者ReferenceManager开发及使用
- maven 打包 常见错误问题
- HDOJ-----1874最短路
- hdu 水题 2044 一只小蜜蜂...
- java i/o流-----缓冲流
- Hdu 5437 Alisha’s Party(模拟)
- 【已解决】安装Scrapy过程中出错:ERROR: ‘xslt-config’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。