高斯消元Gauss

模板题

题目转载———caioj.cn

题目描述

n n n个未知数 x 1 , x 2 , x 3 … … x n x_1,x_2,x_3……x_n x1,x2,x3xn,满足:
a 1 1 × x 1 + a 2 1 × x 2 + a 3 1 × x 3 … … + a n 1 × x n = b 1 a^1_1\times x_1+a^1_2\times x_2+a^1_3\times x_3……+a^1_n\times x_n=b_1 a11×x1+a21×x2+a31×x3+an1×xn=b1
a 1 2 × x 1 + a 2 2 × x 2 + a 3 2 × x 3 … … + a n 2 × x n = b 2 a^2_1\times x_1+a^2_2\times x_2+a^2_3\times x_3……+a^2_n\times x_n=b_2 a12×x1+a22×x2+a32×x3+an2×xn=b2
… … … … … … … … … … … … … … ……………………………………
a 1 n × x 1 + a 2 n × x 2 + a 3 n × x 3 … … + a n n × x n = b n a^n_1\times x_1+a^n_2\times x_2+a^n_3\times x_3……+a^n_n\times x_n=b_n a1n×x1+a2n×x2+a3n×x3+ann×xn=bn
x 1 , x 2 , x 3 … … x n x_1,x_2,x_3……x_n x1,x2,x3xn的值。(保证有解)

输入格式

第一行给出 n ( 1 ≤ n ≤ 100 ) n(1\leq n\leq100) n(1n100)
下来 n n n行,每行给出 n + 1 n+1 n+1个实数,分别是 a 1 i   a n i 和 b i a^i_1~a^i_ n 和b_i a1i anibi

输出格式

输出 x 1 , x 2 , x 3 … … x n x_1,x_2,x_3……x_n x1,x2,x3xn的值(相邻两个用一个空格隔开,每个数保留 3 3 3位小数)

样例输入

3
2.5 5.0 3.0 32.5
1.0 4.5 2.0 22
4.0 3.5 1.5 26.5

样例输出

3.000 2.000 5.000

讲解

————来源百度经验





代码

#include<cstdio>
#include<cstring>
using namespace std;
double a[110][110],f[110];int n;
void gauss()
{
	for(int i=1;i<n;++i)
		for(int i2=i+1;i<=n;++i)
		{
			double bili/*(哲♂学)比例*/=a[i2][i]/a[i][i];
			for(int j=1;i<=n+1;++i)a[i2][j]-=bili*a[i][j];
		}
	for(int i=n;i>=1;--i)
	{
		double t=a[i][n+1];
		for(int j=i+1;j<=n;++j)t-=f[j]*a[i][j];
		f[i]=t/a[i][i];
	}
}
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]);
	gauss();
	for(int i=1;i<n;++i)printf("%.3lf ",f[i]);
	printf("%.3lf\n",f[n]);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值