首页 > 其他分享 >线性方程组

线性方程组

时间:2023-02-16 12:11:22浏览次数:38  
标签:int 线性方程组 column k1 maxn line include

最后化简成
k1 * x1 = a
k2 * x2 = b
如果 k1 = 0 a != 0则无解
如果 k1 = 0 a = 0则无穷解

注意要先判断无解再判断无穷解QWQ

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>

using namespace std;

int n,nowline;
double a[11451][11451];

inline int find_pivot( int line , int column ) {
	//line:行 column:列 
	int maxn = line;
	for (int i = line + 1; i <= n; ++i) {
		if ( a[i][column] > a[maxn][column] ) {
			maxn = i;
		}
	}
	return maxn;
}

inline void swap_line( int now , int need ) {
	//now表示现在这一行 need表示需要的行
	for (int i = 1; i <= n + 1; ++i) {
		swap( a[now][i] , a[need][i] );
	} 
	return; 
}

int main()
{
	scanf("%d",&n);
	for (int i = 1; i <= n; ++i) {
		for (int j = 1; j <= n + 1; ++j) {
			scanf("%lf",&a[i][j]);
		}
	}
	for (int q = 1,i = 1; q <= n; ++q) {
		//i表示第几行 q表示第几列 
		int pivot = find_pivot( i , q );
		//这里一定要注意find时的行与列 QWQ 
		if ( a[pivot][q] == 0 ) continue;
		//如果此列全为0则先跳过,可以先不用管 
		swap_line( i , pivot ); 
		for (int j = 1; j <= n; ++j) {
			if ( j != i ) {
				double temp = a[j][q] / a[i][q];
				for (int k = q;k <= n + 1; ++k) {
					a[j][k] -= ( a[i][k] * temp );
				}
			}
		}//正常高斯约旦消元 
		i ++;
		nowline = i;
	}
	if ( nowline <= n ) {
		for (int i = nowline; i <= n; ++i) {
			if ( a[i][n + 1] != 0 ) {
				//其中有k * x = a;
				//若 k = 0 a != 0 则无解 输出-1 
				//若 k = 0 a = 0 则无穷解 输出0 
				//注意在同时是无解和无穷解的情况下方程组属于无解 
				printf ("-1\n");
				return 0;
			}
		}
		printf ("0\n");
		return 0;
	}
	for (int i = 1; i <= n; ++i) {		
		a[i][n + 1] /= a[i][i];//除上系数
		printf ( "x%d=" , i );
		if ( fabs( a[i][n + 1] ) == 0 ) a[i][n + 1] = 0;
		printf ( "%.2lf\n" , a[i][n + 1] );
	}
	return 0;
}

标签:int,线性方程组,column,k1,maxn,line,include
From: https://www.cnblogs.com/jueqingfeng/p/17126206.html

相关文章

  • 线性方程组的直接解法——Gauss消去法
    考虑线性方程组\[\mathrm{A}x=\mathrm{b}\]其中,\(\mathrm{A}=(a_{ij})_{n\timesn}\),\(\mathrm{b}=[b_1,b_2,\cdots,b_n]^{\mathrm{T}}\)。在线性代数的课程中,我们已经学......
  • C++ 数学与算法系列之高斯消元法求解线性方程组
    1.前言什么是消元法?消元法是指将多个方程式组成的方程组中的若干个变量通过有限次地变换,消去方程式中的变量,通过简化方程式,从而获取结果的一种解题方法。消元法主要有代......
  • 数值分析·学习 | 解线性方程组的直接方法(高斯消去法以及LU求解)matlab实现
    ​ 目录一、前言:二、算法描述:三、实现代码:1、高斯消去法:2、高斯消去法-列主元消去法:3、LU分解:4、求逆矩阵:四、总结:一、前言:个人学习内容分享二、算法描述:1......
  • 第四章 线性方程组的直接法
    4.2LU分解4.2.1高斯消去法例1.用高斯消去法求解:\(\begin{bmatrix}2&-4&6\\4&-9&2\\1&-1&3\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}=\begin{bmatrix......
  • 数值分析 5.X 解线性方程组的直接方法
    矩阵谱分解设\(\boldsymbol{A}=a_{ij}\in\mathbb{R}^{n\timesn}\),若存在数\(\lambda\)(实数或复数)和非零向量\(\boldsymbol{x}=\left(x_{1},x_{2},......
  • Python解答多元线性方程组
    前几天一个在乌克兰读什么生态环境工程的小朋友在朋友圈发了一张求解多元线性方程组的图片,这老师真变态,这么大的数非得让他们动手拿笔来求解,我就给他一下标准答案,以至他......
  • 数值分析实验4:线性方程组的迭代法解法
    线性方程组的迭代法解法(一)实验目的与要求1.通过编程计算实践,理解体会古典迭代法的思想。2.通过编程计算实践,熟练各种算法的计算流程。3.通过各种方法对同一题目的求解,......
  • Luogu P2455 [SDOI2006]线性方程组
    题目链接:​​传送门​​高斯消元可以去下面看一下​​​https://www.bilibili.com/video/av4688674​​​听视频比瞅博客有用得多这题算比较标准的板子了各种情况都有......
  • 矩阵与线性方程组
    高斯消元当我们用线性方程组来理解矩阵时,我们有矩阵的高斯消元。高斯消元本质上是一系列的对矩阵的“变换”或者说“操作”,这种操作总共有三种:1)给某一整行乘上非零常数\(......
  • [数值分析]解线性方程组的迭代法
    解线性方程组的迭代法前言本文主要用两个简单的例子来介绍了解线性方程组的三种迭代法的原理和实现方法:第一个例子供我们去学习,而第二个例子供我们去验证。还另外介绍......