电子商务网站建设的规章制度,深圳新闻最新事件,自己做的网站如何赚钱,惠东住房建设局网站P3389 【模板】高斯消元法
题目#xff1a;
给定一个线性方程组#xff0c;对其求解
题解#xff1a;
还没接触高斯消元时以为是什么神仙算法#xff0c;接触后发现。。。就是把我们手算线性方程组的方法#xff0c;写成了代码emm。。。 比如#xff1a;
x-2y3z6
4x…P3389 【模板】高斯消元法
题目
给定一个线性方程组对其求解
题解
还没接触高斯消元时以为是什么神仙算法接触后发现。。。就是把我们手算线性方程组的方法写成了代码emm。。。 比如
x-2y3z6
4x-5y6z12
7x-8y10z21化为矩阵
1 -2 3 6
4 -5 6 12
7 -8 10 21如果矩阵是这种形式那么答案就显而易见了 xa,yb,zcxa,yb,zc
1 0 0 a
0 1 0 b
0 0 1 c我们一般手算时其实就是朝着这个方向做高斯消元就是一步步这样走 首先我们将第一列系数绝对值最大的数作为被减数 因为这个系数绝对值最大的方程转移到被减的这一行这样就可以减小误差 矩阵变为
7 -8 10 21
4 -5 6 12
1 -2 3 6然后第一行除以7然后利用加减法将第二行和第三行的第一个系数消去
1 -8/7 10/7 3
0 -3/7 2/7 0
0 -6/7 11/7 3然后看第二列同理
1 0 2/3 3
0 1 -2/3 0
0 0 1 3用第一行减去第三行×2/3第二行减去第三行×(-2/3)
1 0 0 1
0 1 0 2
0 0 1 3答案就是x1,y2,y3这过程不就是解方程组的过程吗。。emmm 什么时候没答案呢 当系数矩阵不是单位矩阵时也就是存在某列系数绝对值最大为0时
代码
#includebits/stdc.h
#define re register
#define il inline
#define debug printf(Now is %d\n,__LINE__);
using namespace std;
#define maxn 105
#define D double
D a[maxn][maxn];
int n;
int main()
{scanf(%d,n);for(re int i1;in;i){for(re int j1;jn1;j){scanf(%lf,a[i][j]);}}for(re int i1;in;i)//枚举列项 {re int maxi;for(re int ji1;jn;j)//选出该列最大系数 {if(fabs(a[j][i])fabs(a[max][i]))//fabs是取浮点数的绝对值的函数{maxj;}}for(re int j1;jn1;j)//交换{swap(a[i][j],a[max][j]);}if(!a[i][i])//最大值等于0则说明该列都为0肯定无解 {puts(No Solution);return 0;}for(re int j1;jn;j)//每一项都减去一个数即加减消元{//对于每一行 if(j!i){register double tempa[j][i]/a[i][i];for(re int ki1;kn1;k)//对于第j行的每一列 {a[j][k]-a[i][k]*temp;//a[j][k]-a[j][i]*a[i][k]/a[i][i];}}}}//上述操作结束后矩阵会变成这样/*k1*ae1k2*be2k3*ce3k4*de4*///所以输出的结果要记得除以该项系数消去常数for(re int i1;in;i){printf(%.2lf\n,a[i][n1]/a[i][i]);}return 0;
}