线性方程组(高斯消元)
ACM模版
列主元
/** 列主元gauss消去求解a[][] * x[] = b[]* 返回是否有唯一解,若有解在b[]中*/
#define fabs(x) ((x) > 0 ? (x) : (-x))
#define eps 1e-10const int MAXN = 100;int gaussCpivot(int n, double a[][MAXN], double b[])
{int i, j, k, row = 0;double MAXP, temp;for (k = 0; k < n; k++){for (MAXP = 0, i = k; i < n; i++){if (fabs(a[i][k]) > fabs(MAXP)){MAXP = a[row = i][k];}}if (fabs(MAXP) < eps){return 0;}if (row != k){for (j = k; j < n; j++){temp = a[k][j];a[k][j] = a[row][j];a[row][j] = temp;temp = b[k];b[k] = b[row];b[row] = temp;}}for (j = k + 1; j < n; j++){a[k][j] /= MAXP;for (i = k + 1; i < n; i++){a[i][j] -= a[i][k] * a[k][j];}}b[k] /= MAXP;for (i = n - 1; i >= 0; i--){for (j = i + 1; j < n; j++){b[i] -= a[i][j] * b[j];}}}return 1;
}
全主元
/** 全主元gauss消去解a[][] * x[] = b[]* 返回是否有唯一解,若有解在b[]中*/
#define fabs(x) ((x) > 0 ? (x) : (-x))
#define eps 1e-10const int MAXN = 100;int gaussTpivot(int n, double a[][MAXN], double b[])
{int i, j, k, row = 0, col = 0, index[MAXN];double MAXP, temp;for (i = 0; i < n; i++){index[i] = i;}for (k = 0; k < n; k++){for (MAXP = 0, i = k; i < n; i++){for (j = k; j < n; j++){if (fabs(a[i][j] > fabs(MAXP))){MAXP = a[row = i][col = j];}}}if (fabs(MAXP) < eps){return 0;}if (col != k){for (i = 0; i < n; i++){temp = a[i][col];a[i][col] = a[i][k];a[i][k] = temp;}j = index[col];index[col] = index[k];index[k] = j;}if (row != k){for (j = k; j < n; j++){temp = a[k][j];a[k][j] = a[row][j];a[row][j] = temp;}temp = b[k];b[k] = b[row];b[row] = temp;}for (j = k + 1; j < n; j++){a[k][j] /= MAXP;for (i = k + 1; i < n; i++){a[i][j] -= a[i][k] * a[k][j];}}b[k] /= MAXP;for (i = k + 1; i < n; i++){b[i] -= b[k] * a[i][k];}}for (i = n - 1; i >= 0; i--){for (j = i + 1; j < n; j++){b[i] -= a[i][j] * b[j];}}for (k = 0; k < n; k++){a[0][index[k]] = b[k];}for (k = 0; k < n; k++){b[k] = a[0][k];}return 1;
}
高斯消元(自由变元,一类开关问题,位运算操作)
// 高斯消元法求方程组的解const int MAXN = 300;
// 有equ个方程,var个变元。增广矩阵行数为equ,列数为var+1,分别为0到var
int equ, var;
int a[MAXN][MAXN]; // 增广矩阵
int x[MAXN]; // 解集
int free_x[MAXN]; // 用来存储自由变元(多解枚举自由变元可以使用)
int free_num; // 自由变元的个数// 返回值为-1表示无解,为0是唯一解,否则返回自由变元个数
int Gauss()
{int max_r, col, k;free_num = 0;for (k = 0, col = 0; k < equ && col < var; k++, col++){max_r = k;for (int i = k + 1; i < equ; i++){if (abs(a[i][col]) > abs(a[max_r][col])){max_r = i;}}if (a[max_r][col] == 0){k--;free_x[free_num++] = col; // 这是自由变元continue;}if (max_r != k){for (int j = col; j < var + 1; j++){swap(a[k][j], a[max_r][j]);}}for (int i = k + 1; i < equ; i++){if (a[i][col] != 0){for (int j = col; j < var + 1; j++){a[i][j] ^= a[k][j];}}}}for (int i = k; i < equ; i++){if (a[i][col] != 0){return -1; // 无解}}if (k < var){return var - k; // 自由变元个数}// 唯一解,回代for (int i = var - 1; i >= 0; i--){x[i] = a[i][var];for (int j = i + 1; j < var; j++){x[i] ^= (a[i][j] && x[j]);}}return 0;
}
应用例题
POJ 1681 Painter's
Problem
线性方程组(高斯消元)相关推荐
- 解线性方程组——高斯消元の板子
ATP记得它在很久以前看过一点点高斯消元的东西然后做过一点点题目..但是当时实在是太zz了所以本来就没有很懂这个东西现在更是忘得差不多了.. 所以现在就当重新学一遍了QwQ 一点口胡的解释 高斯消元. ...
- AcWing 883. 高斯消元解线性方程组 (高斯消元)
题目链接 : 点击查看 题目描述 : 输入一个包含 n 个方程 n 个未知数的线性方程组. 方程组中的系数为实数. 求解这个方程组. 下图为一个包含 m 个方程 n 个未知数的线性方程组示例: 输入输 ...
- [SDOI2006]线性方程组 高斯消元
板子题,注意消元的时候无解判断和常数项的操作 码: #include<iostream> #include<cstdio> #include<cmath> usin ...
- AcWing - 高斯消元解线性方程组(高斯消元)
题目链接:https://www.acwing.com/problem/content/885/ 时/空限制:1s / 64MB 题目描述 输入一个包含n个方程n个未知数的线性方程组. 方程组中的系数 ...
- c++用类实现高斯消元法求解线性方程组的解_高斯消元
高斯消元 众所周知,高斯消元是线性代数中重要的一课.通过矩阵来解线性方程组.高斯消元最大的用途就是用来解多元一次方程组. 前置技能 1.线性方程组 线性方程组是各个方程关于未知量均为一次的方程组(例如 ...
- 【Luogu 3389】【模板】高斯消元法(用高斯消元求解线性方程组)
1.线性方程组 2.高斯消元法 步骤1:通过一系列的加减消元,得到类似 kx=b 的式子,求得最后一个未知量的结果 步骤2:然后逐一回代求解整个 x 向量 以下列方程为例: 第一次加减消元,用第1式子 ...
- 高斯消元——解线性方程组+球形空间产生器+开关问题
传送门:https://www.acwing.com/activity/content/11/ 思路: 把原矩阵变成阶梯型矩阵解题步骤: 1.找到绝对值最大的一行. 2.将该行和最上面未处理好的一行交 ...
- 第三十四章 数论——高斯消元解线性方程组
第三十四章 数论--高斯消元解线性方程组 一.高斯消元 1.线性方程组 2.高斯消元步骤 (1)数学知识铺垫 增广矩阵和阶梯矩阵 初等变换 (2)高斯消元步骤 二.代码模板 1.问题: 2.代码 一. ...
- AcWing 883. 高斯消元解线性方程组(高斯消元模板)
先出裸的模板: #include<bits/stdc++.h>using namespace std; const int N = 110; typedef double db; db a ...
- [AcWing]883. 高斯消元解线性方程组(C++实现)高斯消元解线性方程组模板题
[AcWing]883. 高斯消元解线性方程组(C++实现)高斯消元解线性方程组模板题 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算 ...
最新文章
- 让汽车软件进入 iPhone 时代!
- 问题 1676: 算法2-8~2-11:链表的基本操作
- SQL Server 游标的使用示例
- 【笔记】spring的注解回顾,springboot-restful项目结构介绍 springboot-freemarker ⼯程配置详解
- 主成分分析和因子分析十大不同点
- Java Random nextInt()方法与示例
- 问题解决:java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date
- Chem 3D模型的参数值更改方法
- zip安装mysql没有软件,windows10系统安装mysql-8.0.13(zip安装) 的教程详解
- mysql havequerycache_如何开启MySQL的中的Query Cache缓存
- 关于HTML+CSS3的一些笔记
- 盒模型知识点汇总(附实例、图解)
- 光洋协议转换网关WTGNet-KOYO
- SQL Server 数据库维护计划
- html svg图片不显示,html/css svg怎么显示不出来?
- 安装Java并配置环境,安装eclipse,在GitHub中上传代码
- React 高阶组件HOC详解
- 关于720全景视频在移动端播放的兼容问题汇总,截止2017年11月29日
- 无盘服务器的优缺点,网众无盘服务器建议
- 原创 | 独立开发者:到底做什么样的产品才最赚钱?