高斯消元——牛顿迭代法(浮点数 && 整型)

这篇博客介绍了如何使用高斯消元和牛顿迭代法来解决线性方程组。详细阐述了算法的具体步骤,包括如何处理最大系数、消除其他行的未知数以及确保第i行的第i个未知数为1。还讨论了方程无解和有自由元的情况。最后给出了代码实现,并提及如何调整以找到整数解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高斯消元

给出一个线性方程组,有n个方程组,m个未知数。解这个线性方程组。

输入

第1行:2个整数n和m,(n, m <=400,且n不一定等于m)

接下来n行,每行m+1个整数,表示一个方程的m个未知数的系数和常数(数值不超过1000)

 

输出

如果无解,输出“No solution”。

如果有唯一解,输出m行,每行一个未知数的值,保留到小数点第4位。格式见样例。

如果有无穷解,输出m行,如果未知数有确定解,直接输出。如果是自由变元,输出“xx not determined ”格式见样例。

呵呵哒~~

具体分析

看到网上很多代码分析,但是处理得都不全面,所以这次发一个能处理几乎所有情况的代码。

我们用到牛顿迭代法,就是先用高斯消元把一个未知数的值算出来,再带回去就可以了。

高斯消元:

举个栗子:

2x - y + 3z = 1

4x + 2y + 5z = 4

2x + 2z = 6

把它变成这样的矩形:

2 -1 3 1
4 2 5 4
2 0 2 6

我们进行3步处理:

1.把在i到n的第i个未知数的绝对值的最大系数放到第i行.

2.用乘法消元法把其它行的第i个未知数消成0

3.把现在第i行的第i个未知数消成常数为1

同时,我们还要满足上三角阵

可能听得很麻木,先看一下代码:

//这是浮点数的做法
//k枚举的是第几个方程,now是在求第now个未知数
for( k = 1 ; k <= n && now <= m ;  k ++ , now ++ ){
        int j = k;
        for( int i = k + 1; i <= n ; i ++ ){
            if( fabs(a[j][now]) < fabs( a[i][now] ) )
               j = i;//第一步&#x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值