首页 > 代码库 > 论高斯消元实现
论高斯消元实现
高斯消元的实现是用到了增广矩阵变成上三角矩阵,然后从下往上迭代求值。
具体是这样的,
比如说有一个二元一次方程组
那么,把未知数的系数提出来弄成一个2*2的矩阵,然后再把方程组中等号右边的常数项加进来,成为一个2*3的矩阵
这就是一个增广矩阵了,
接下来变成一个上三角矩阵,
从矩阵的第一行开始,一直到最后一行,
比方说现在面临的是第i行,
那么在i到最后一行,找到第i列数的绝对值最大的那行跟第i行换一个位置,这样交换是有好处的,就是当面对0的情况,哈哈,想一想
然后就用第i行开始把从i+1到最后一行的所有行进行消元操作,消元的目的是把i行之后的所有行的第i列变成0
最后,变成的就是一个上三角矩阵了
从下往上迭代求值即可
如果不懂如何迭代求值,打个草稿看看就好了
我的代码:
#include<iostream> #include<map> #include<string> #include<cstring> #include<cstdio> #include<cstdlib> #include<cmath> #include<queue> #include<vector> #include<algorithm> using namespace std; double gauss(double a[10][10],int n) { int i,j,k,t; for(i=0;i<n;i++) { t=i; for(j=i+1;j<n;j++) if(fabs(a[j][i])>fabs(a[t][i])) t=j; if(t!=i) for(j=0;j<=n;j++) swap(a[i][j],a[t][j]); if(a[i][i]!=0) for(j=i+1;j<n;j++) for(k=n;k>=i;k--) a[j][k]-=a[j][i]/a[i][i]*a[i][k]; } for(i=n-1;i>-1;i--) { for(j=i+1;j<n;j++) a[i][n]-=a[j][n]*a[i][j]; a[i][n]/=a[i][i]; } } int main() { double a[10][10]; int i,j,n; while(cin>>n) { for(i=0;i<n;i++) for(j=0;j<=n;j++) cin>>a[i][j]; gauss(a,n); for(i=0;i<n;i++) cout<<a[i][n]<<" "; cout<<endl; } }
论高斯消元实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。