高斯消元,解线性方程组
2017-04-20 23:24
405 查看
讲 高斯消元, 必然会讲到线性代数问题, 解决线性方程组,多元问题, 转化为矩阵求解
我们拿这个为例子 可以写出 增广矩阵
2x + y - z = 8 (L1)
-3x - y + 2z = -11 (L2)
-2x + y + 2z = -3 (L3)
代码的思路也是如此
我们拿这个为例子 可以写出 增广矩阵
2x + y - z = 8 (L1)
-3x - y + 2z = -11 (L2)
-2x + y + 2z = -3 (L3)
代码的思路也是如此
#include <iostream> #include <algorithm> #include <cstring> #include <cmath> #include <stdio.h> const int MAXN=1000; const double inf=0; using namespace std; double a[MAXN][MAXN]; double b[MAXN],c[MAXN]; int col,row;//col 行 row 列 void input() { for(int i=1;i<=col;i++) { for(int j=1;j<=row;j++) cin>>a[i][j];//方程系数 cin>>b[i];//常数项 } } void change(int x,int y) //更换行 { for(int i=1;i<=row;i++)//当前行的 每一项 { swap(a[x][i],a[y][i]); } swap(b[x],b[y]); } int gauss() { bool flag,fflag=false;;//fflaga 判断 是否多解问题 for(int i=1;i<=row;i++)//每一列 { flag=false; for(int j=i;j<=col;j++)// 每一行开始检索不为0 的项 { if(fabs(a[j][i])>0) { change(i,j); flag=true; break; } } if(!flag) { fflag=true; //说明秩 小于n 方程多解 continue; } for(int j=i+1;j<=col;j++)// 当前i的下一行 { double temp=a[j][i]/a[i][i];// 两行之间的比例关系 for(int k=1;k<=row;k++)//每一项都要操作 { a[j][k]-=temp*a[i][k]; } b[j]-=temp*b[i]; } } if(fflag) return 0;//多解问题 for(int i=1;i<=col;i++)//判断 是否为0 无解问题 { flag=false; for(int j=1;j<=row;j++) { if(fabs(a[i][j])>0) { 4000 flag=true; break; } } if(!flag&&fabs(b[i])>inf)//无解 return -1; } for(int i=row;i>=1;i--) { for(int j=i+1;j<=row;j++)//巧妙 倒着 将结果带进去 { b[i]-=a[i][j]*c[j]; a[i][j]=0; } c[i]=b[i]/a[i][i];//存结果 } return 1; } int main() { while(cin>>col>>row) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); input(); int flag=gauss(); switch(flag) { case -1:printf("方程无解\n");break; case 0: printf("方程多解\n");break; case 1:for(int i=1;i<=row;i++) printf("%d ",(int)(c[i])); puts("");break; } } return 0; } /* 3 3 2 1 -1 8 -3 -1 2 -11 -2 1 2 -3 */
相关文章推荐
- poj 2065 SETI(高斯消元求模线性方程组)
- 解线性方程组——高斯消元の板子
- poj 1830 开关问题(线性方程组,高斯消元)
- poj 2065 SETI 【高斯消元 + 快速幂 解模线性方程组】
- hdu 5755(高斯消元——模线性方程组模板)
- POJ.2065.SETI(高斯消元 模线性方程组)
- 线性方程组(高斯消元)
- [SDOI2006]线性方程组 高斯消元
- 高斯消元解线性方程组
- 高斯消元的应用——解模线性方程组
- HDU.3571.N-dimensional Sphere(高斯消元 模线性方程组)
- 高斯消元(解线性方程组 or 线性同余方程组)
- 高斯消元解线性方程组
- 高斯消元求解线性方程组
- bzoj 1923: [Sdoi2010]外星千足虫【高斯消元】
- 【JLOI 2012】时间流逝(期望,树上高斯消元)
- bzoj 3601: 一个人的数论 高斯消元&莫比乌斯反演
- zoj 3155 Street Lamp 高斯消元 异或方程组 求方案数
- C++高斯赛德迭代法,求线性方程组的解(version1.0)
- POJ 1681 Painter's Problem (高斯消元)