首页 > 其他分享 >高斯消元法

高斯消元法

时间:2024-09-10 11:29:03浏览次数:8  
标签:系数 int 矩阵 高斯消 元法 104

模板题

我写不明白我要用其他人的学习笔记

其实也没法写,真要一步步写很复杂。

无非就是依次将每个数减掉系数,最后成为一个单位矩阵。

所以看注释:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+5;
int n;                      // n 表示方程的个数,即有 n 个变量
double a[104][104];          // a 是增广矩阵,a[i][j] 表示第 i 行第 j 列的元素,矩阵大小为 n x (n+1)

int main(){
	ios::sync_with_stdio(false);  // 优化输入输出效率
	cin >> n;                      // 输入变量的个数,即 n 阶矩阵
	// 输入增广矩阵
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n + 1; j++){
			cin >> a[i][j];         // 输入每个系数和常数项(n x n 的系数矩阵加上 n 个常数项)
		}
	}
	// 高斯-约旦消元法
	for(int i = 1; i <= n; i++){
		int now = i;                // 当前正在处理的行(初始为第 i 行)

		// 寻找第 i 列的主元(即第 i 列第一个非 0 的元素)
		while(a[now][i] == 0 && now <= n){
			now++;                  // 如果当前行的 i 列为 0,则查找下面的行
		}

		// 如果该列找不到非 0 的主元,则无解
		if(now == n + 1){
			cout << "No Solution";   // 输出无解提示
			return 0;
		}

		// 交换当前行 i 和找到的主元所在的行 now
		for(int j = 1; j <= n + 1; j++){
			swap(a[i][j], a[now][j]); // 交换两个行,确保 a[i][i] 非 0
		}

		// 将当前行的主元 a[i][i] 归一化,令 a[i][i] = 1
		double pp = a[i][i];
		for(int j = 1; j <= n + 1; j++){
			a[i][j] = a[i][j] / pp;   // 将这一行所有元素除以 a[i][i]
		}

		// 对其他行进行消元,使得第 i 列的其余行元素都为 0
		for(int j = 1; j <= n; j++){
			if(i != j){              // 跳过第 i 行本身
				double k = a[j][i];  // 消元系数
				for(int m = 1; m <= n + 1; m++){
					a[j][m] = a[j][m] - k * a[i][m]; // 消去 a[j][i],使其为 0
				}
			}
		}
	}

	// 输出解
	for(int i = 1; i <= n; i++){
		printf("%.2lf\n", a[i][n+1]);  // 输出解,保留两位小数
	}
	return 0;
}

标签:系数,int,矩阵,高斯消,元法,104
From: https://www.cnblogs.com/sadlin/p/18406059

相关文章

  • 有限单元法与渗流问题:从理论到开源程序的桥梁
    有限单元法在岩土工程问题中应用非常广泛,很多商业软件如Plaxis/Abaqus/Comsol等都采用有限单元解法。尽管各类商业软件使用方便,但其使用对用户来说往往是一个“黑箱子”。相比而言,开源的有限元程序计算方法透明、计算过程可控,用户可根据自己的需求进行必要的修改,这一点对于......
  • 高斯消元解线性方程组
    高斯消元解线性方程组输入一个包含n个方程n个未知数的线性方程组。方程组中的系数为实数。求解这个方程组。下图为一个包含m个方程n个未知数的线性方程组示例输入格式第一行包含整数n。接下来n行,每行包含n+1个实数,表示一个方程的n个系数以及等号右侧的常数......
  • 有关用MATLAB来实现高斯消去法
    题目:利用Gaussian消去法求解线性方程组Ax=b,其中:     实现流程程序代码实验结果......
  • Note - 高斯消元法(证明略)
    线性代数高斯消元法求解线性方程组高斯消元法是求解线性方程组的经典算法,还可以用于行列式计算、求矩阵的逆。部分代码From「SDOI2006」线性方程组doublea[N][N];//a[i][j]表示第i个方程中第j个元的系数,a[i][n+1]为等号右侧的常数项voidGauss(){for(inti=1;i<......
  • 详细揭秘:特殊图高斯消元
    树上高斯消元给你一颗树,某些点为终止结点,求从每个点开始随机游走走到某个终止节点的期望时间。从叶子开始将\(f(u)\)表示为\(k(u)f(\text{fa}(u))+b(u)\),带回\(f(\text{fa}(u))\)的方程中将\(f(u)\)消掉即可。DAG上高斯消元可重集/reset有一个可重集\(S\),每一......
  • 高斯消元 学习笔记
    用于求解方程组。给定\(n\)个关于\(m\)个变量的方程组,需要你判断该方程组是否无解、有无数解、有唯一解,并输出唯一的解。考虑使用消元法。我们枚举一个变量\(i\),从所有没有被操作过的方程式中选出一个,然后用它对其他没有被操作过的方程式进行消元,并将被选中的那个方程式视......
  • 高斯消元
    1.高斯消元的基础信息本质通过初等行变化,将线性方程组的增广矩阵转化为行阶梯矩阵,讲人话就是用加减消元来转化,代入消元来回带。应用用来求解线性方程组(m个一次方程,n个变量),矩阵的秩(校园后的主元数)以及求可逆方阵的逆矩阵。难度思维难度低,代码实现难度低复杂度时间:O(n^3)空间......
  • 可变阶数高斯消元算法-passcal-c shap-c语言
    高斯消元法在各种工程领域都有广泛的应用,尤其是在需要求解线性方程组的情况下。尽管高斯消元法在某些情况下可能不是最高效的算法,但它仍然是一个强大且通用的工具,对于许多工程问题来说是非常实用的。随着计算机性能的提高,高斯消元法在处理大规模问题时也变得更加可行。高斯消......
  • 高斯 - 约当消元法
    摘自here给定\(n\)元一次方程组\[\begin{cases}a_{1,1}x_1+a_{1,2}x_2+\cdots+a_{1,n}x_n=b_1\\a_{2,1}x_1+a_{2,2}x_2+\cdots+a_{2,n}x_n=b_2\\\cdots\\a_{n,1}x_1+a_{n,2}x_2+\cdots+a_{n,n}x_n=b_n\\\end{cases}\]请求出方程组的解的情况:无解;无穷多解;唯一解......
  • 高斯消元
    高斯消元高斯消元法通常用于求解如下的\(n\)元线性方程组\[\begin{cases}a_{1,1}x_1+a_{2,2}x_2+\cdots+a_{1,n}x_n=b_1\\a_{2,1}x_1+a_{2,2}x_2+\cdots+a_{2,n}x_n=b_2\\\cdots\\a_{n,1}x_1+a_{n,2}x_2+\cdots+a_{n,n}......