什么是列主消元

(注: akk代表第k行第k列的权值, 以下摘自百度百科:列主消元法)
列主元素消去法是为控制舍入误差而提出来的一种算法,列主元素消去法计算基本上能控制舍入误差的影响,其基本思想是:在进行第 k(k=1,2,…,n-1)步消元时,从第k列的 akk及其以下的各元素中选取绝对值最大的元素,然后通过行变换将它交换到主元素akk的位置上,再进行消元。
BZ:好吧!其实思路的挺清晰的,那么,我们就开始放代码了:::

//#include<bits/stdc++.h>
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<stack>
#include<queue>           //stack的头文件
using namespace std ;
typedef long long ll;
#define MAXN 501
#define INF 0x3f3f3f3f
#define MALL (BiTnode *)malloc(sizeof(BiTnode));double a[MAXN][MAXN+1];
double b[MAXN][MAXN+1];
double x[MAXN];
void init(int n)                            //输入n阶矩阵,包含输入增广矩阵,即[n*(n-1)]
{memset(a, 0, sizeof(a));for(int i=1; i<=n; ++i)for(int j=1; j<=n+1; ++j){scanf("%lf", &a[i][j]);b[i][j] = a[i][j];}
}int gaosi(int n)
{for(int i=1; i<n; ++i){if(!b[i][i])return 0;for(int j=i+1; j<=n+1; ++j){double ans = 1.0*b[j][i]/b[i][i];for(int k=i; k<=n+1; ++k)b[j][k] = b[j][k] - 1.0*ans*b[i][k];}}if(!b[n][n])return 0;return 1;
}int gaosi_liezhu(int n)                      //列主消元(上三角)
{for(int i=1; i<n; ++i){double tem = fabs(a[i][i]);          //tem标记第i行第i列以下第x(x >= i)列中的绝对值最大的数int cnt = i;                         //cnt标记第几行,用于行交换。for(int j=i+1; j<=n; ++j){if(fabs(a[j][i]) > tem){tem = fabs(a[j][i]);cnt = j;}}for(int j=i; j<=n+1; ++j)           //行交换{double p = a[i][j];a[i][j] = a[cnt][j];a[cnt][j] = p;}if(!a[i][i])                        //正常的高斯消元return 0;for(int j=i+1; j<=n; ++j){double ans = 1.0*a[j][i]/a[i][i];for(int k=i; k<=n+1; ++k)a[j][k] = a[j][k] - 1.0*ans*a[i][k];}}if(!a[n][n])return 0;return 1;
}void print_a(int n)           //输出消元后的上三角矩阵
{for(int i=1; i<=n; ++i){for(int j=1; j<=n+1; ++j)if(a[i][j] < 1e-5 && a[i][j] > -1e-5)printf("0.0 ");elseprintf("%.1f ", a[i][j]);cout << '\n';}
}void print_b(int n)           //输出消元后的上三角矩阵
{for(int i=1; i<=n; ++i){for(int j=1; j<=n+1; ++j)if(b[i][j] < 1e-5 && b[i][j] > -1e-5)printf("0.0 ");elseprintf("%.1f ", b[i][j]);cout << '\n';}
}void jie_a(int n)                //回代方程求出方程组的解;
{memset(x, 0, sizeof(x));x[n] = 1.0*a[n][n+1]/a[n][n];for(int i=n-1; i>0; --i){double ans=0.0;for(int j=i+1; j<=n; ++j)ans+=1.0*a[i][j]*x[j];x[i] = (a[i][n+1] - ans)*1.0/a[i][i];}for(int i=1; i<=n; ++i)if(x[i] < 1e-5 && x[i] > -1e-5)printf("x%d = 0.0\n", i);elseprintf("x%d = %.1f\n", i, x[i]);
}void jie_b(int n)                //回代方程求出方程组的解;
{memset(x, 0, sizeof(x));x[n] = 1.0*b[n][n+1]/b[n][n];for(int i=n-1; i>0; --i){double ans=0.0;for(int j=i+1; j<=n; ++j)ans+=1.0*b[i][j]*x[j];x[i] = (b[i][n+1] - ans)*1.0/b[i][i];}for(int i=1; i<=n; ++i)if(x[i] < 1e-5 && x[i] > -1e-5)printf("x%d = 0.0\n", i);elseprintf("x%d = %.1f\n", i, x[i]);
}
int main()
{double a[MAXN][MAXN+1];cout << "请输入方程的阶数n:";int n;cin >> n;cout << "请输入n阶方程的增广矩阵:" << '\n';init(n);cout << "\n-------高斯消元后的结果为------" << '\n';int j = gaosi(n);if(j){print_b(n);cout << "----利用该矩阵回代后解出其解为----" << '\n';jie_b(n);}elsecout << "该方程组顺序消元后无解!" << '\n';cout << "\n-------列主消元后的结果为------" << '\n';int i = gaosi_liezhu(n);if(i){print_a(n);cout << "----利用该矩阵回代后解出其解为----" << '\n';jie_a(n);}elsecout << "该方程组列主消元后无解!" << '\n';return 0;
}

##### 样例检测:

方程组:
x1 - x2 - x3 = 2,
2 * x1 - x2 - 3 * x3 = 1,
3 * x1 + 2 * x2 - 5 * x3 = 0.

高斯消元:列主消元法相关推荐

  1. Covering(dfs打表+高斯消元+矩阵快速幂)

    传送门 这是个递推题,可以看下维基的各种解释:传送门 假设递推式是一个四元方程,至于为什么也不大清楚(可能是操场是4*n的缘故) 然后得到递推式f(n)=f(n-1)+5*f(n-2)+f(n-3)- ...

  2. 并行程序设计实验——高斯消元

    并行程序设计实验--高斯消元 一.问题描述 熟悉高斯消元法解线性方程组的过程,然后实现SSE算法编程.过程中,自行构造合适的线性方程组,并选取至少2个角度,讨论不同算法策略对性能的影响. 可选角度包括 ...

  3. hihoCoder 1166 交换代数 (高斯消元,概率)

    题意: 给出区间[1,n]的状态,有0.1.现在每次可以选择任意区间取翻转,问全部翻转成0的次数期望.总共有n(n+1)/2个区间. 题解: 这个CLJ链接将的很清楚了. 那么根据高斯消元列方程求解, ...

  4. luogu P4035 [JSOI2008]球形空间产生器(高斯消元 / 模拟退火)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 数据范围只开到了10,而且是经典的力学结构,所以我们可以用模拟退火,可以做一下 nnn 维的正交分解h ...

  5. POJ 1753 Flip Game 高斯消元

    和1222,1681差不多 POJ 1222 高斯消元更稳 POJ 1681 高斯消元 枚举自由变元 equ = 16 ,var = 16的方程组 #include <cstdio> #i ...

  6. 浅谈高斯消元的实现和简单应用

    一.高斯消元的原理 对于n元的m个线性方程组成的方程组,我们将其以矩阵的形式记录下来: a11 a12 a13 ...... a1n b1 a21 a22 a23 ...... a2n b2 ... ...

  7. 列主消元法解非奇异线性方程组的MATLAB程序

    function [x] = LMain_elimination(A,b,prec,n) %% % 列主消元法求解线性代数方程组 Ax = b的MATLAB实现 % A为待求解方程组的系数矩阵(要求A ...

  8. 【BZOJ】1013: [JSOI2008]球形空间产生器sphere(高斯消元)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1013 只要列出方程组就能套高斯来解了. 显然距离相等,所以开不开平方都无所谓. b表示圆心,可列 s ...

  9. 计算机编程 高斯消元,高斯-若尔当消元法

    高斯-若尔当消元法(英语:Gauss-Jordan Elimination),或译为高斯-约旦消元法,简称G-J消元法,是数学中的一个算法,是高斯消元法的另一个版本.它在线性代数中用来找出线性方程组的 ...

最新文章

  1. 京东程序员回应“被猝死”:我还活着,还在写代码
  2. html js不触发_图文详解鼠标事件CSS:hover和JS:mouseover的区别
  3. 太赞了!包邮送 60 本 Python 畅销书!
  4. UI5控件类似Java反射机制的一个小技巧
  5. “约见”面试官系列之常见面试题之第七十二篇之arrayList(建议收藏)
  6. GitHub 标星 11000+,阿里开源微服务如何连续 10 年扛住双十一大促
  7. EntityFramework 4.1 如何加入项目
  8. java进销存系统源码_青云源码——最新企业进销存管理系统源码分享
  9. python123-Python123
  10. android新手上路 一
  11. Trime同文输入法
  12. Windows 编程之 WINUSERAPI 和 WINAPI 区别
  13. 黑苹果完美升级mac10.13.6,更换内置无线网卡dw1820A
  14. 全面了解#中国加密艺术圈、元宇宙和就业
  15. google浏览器更新后,出现并行配置不正确问题
  16. CCCC选拔赛赛后总结
  17. Git 笔记 - git rebase
  18. 永久免费的抠图软件分享
  19. T1320 均分纸牌
  20. Java里面的四种内存屏障

热门文章

  1. 计算机网络辅助教学论文,利用计算机网络技术辅助英语听力教学论文
  2. 无线传感器:智能建筑系统的眼睛和指尖
  3. python win10 捕获 弹出窗口_Selenium-webdriver 系列Python教程(6)————如何捕获弹出窗口...
  4. 网站服务器怎么配置,怎么配置自己的网站服务器
  5. 贝索斯、比尔盖茨和库克认为你应该阅读的7本书
  6. Java基础 - 坦克大战(第五章,坦克移动、与被击中效果功能)
  7. 拉普拉斯变形的原理解析和python代码
  8. W3C是什么?什么是W3C标准?
  9. FFmpeg —— 由pts控制视频播放速率(Qt计时器)
  10. 图像处理函数im2bw详解