zoukankan      html  css  js  c++  java
  • luogu P3389 【模板】高斯消元法

    高斯消元法(这里的好像叫约旦消元?)可以用来求线性方程组的唯一解(如果无解或有多解输出“No Solution”)。

    具体方法就是一个一个变量的扫,每次处理一个变量的时候找出一个系数不为(0)的方程,用这个方程把其他方程的、这个变量的系数给消掉(具体看代码吧感觉不太能解释清楚)。然后每个变量处理完以后最后就剩那个一开始钦定的系数了,最后除一下就行了。

    代码:

    #include<bits/stdc++.h>
    
    using namespace std;
    
    const int N = 109;
    const double eps = 1e-10;
    int n;
    double a[N][N];
    
    void init()
    {
    	scanf("%d", &n);
    	for (int i = 1; i <= n; i++)
    		for (int j = 1; j <= n + 1; j++)
    			scanf("%lf", &a[i][j]);
    }
    
    void work()
    {
    	for (int i = 1; i <= n; i++)
    	{
    		int pos = i;
    		for (int j = i + 1; j <= n; j++)
    			if (a[j][i] - a[pos][i] > eps)
    				pos = j;
    		if (fabs(a[pos][i]) < eps)
    		{
    			puts("No Solution");
    			return;
    		}
    		if (i != pos)
    			swap(a[i], a[pos]);
    		for (int j = 1; j <= n; j++)
    		{
    			if (j == i) continue;
    			double tmp = a[j][i] / a[i][i];
    			for (int k = 1; k <= n + 1; k++)
    				a[j][k] -= a[i][k] * tmp;
    		}
    	}
    	for (int i = 1; i <= n; i++)
    		printf("%.2lf
    ", a[i][n + 1] / a[i][i]);
    }
    
    int main()
    {
    	init();
    	work();
    	return 0;
    }
    
    由于博主比较菜,所以有很多东西待学习,大部分文章会持续更新,另外如果有出错或者不周之处,欢迎大家在评论中指出!
  • 相关阅读:
    platform_device和platform_driver
    理解和认识udev
    platform_device和platform_driver
    bzImage的概要生成过程
    shell 字符表
    分析mtk6516如何加入自己的驱动
    理解和使用Linux的硬件抽象层HAL
    bzImage的概要生成过程
    理解和认识udev
    shell 字符表
  • 原文地址:https://www.cnblogs.com/With-penguin/p/12818392.html
Copyright © 2011-2022 走看看