首页 > 编程语言 > 详细

算法学习笔记1.1.2 高斯消元

时间:2018-08-20 12:49:48      阅读:141      评论:0      收藏:0      [点我收藏+]

任务

给一个n元一次方程组,求它们的解集。

说明

将方程组做成矩阵形式,再利用三种初等矩阵变换,得到上三角矩阵,最后回代得到解集。

接口

int solve(double a[][maxn], bool[], double ans[], const int& n);

  • 复杂度:O(n^3)
  • 输入:
    • a 方程组对应的矩阵
    • n 未知数个数
    • l,ans 存储解,l[]表示是否为自由元

代码

#include <iostream>
#include <cmath>
using namespace std;
const double EPS = 1e-9;
const int maxn = 1010;

inline int solve(double a[][maxn], bool l[], double ans[], const int& n) {
    int res = 0, r = 0;
    for (int i = 0; i < n; i ++)
        l[i] = false;
    for (int i = 0; i < n; i ++) {
        for (int j = r; j < n; j ++)
            if (fabs(a[j][i]) > EPS) {
                for (int k = i; k <= n; k ++)
                    swap(a[j][k], a[r][k]);
                break;
            }
        if (fabs(a[r][i]) < EPS) {
            res ++;
            continue;
        }
        for (int j = 0; j < n; j ++)
            if (j != r && fabs(a[j][i]) > EPS) {
                double tmp = a[j][i] / a[r][i];
                for (int k = i; k <= n; k ++)
                    a[j][k] -= tmp * a[r][k];
            }
        l[i] = true, r++;
    }
    for (int i = 0; i <n ; i ++)
        if (l[i])
            for (int j = 0; j < n; j ++)
                if (fabs(a[j][i]) > 0)
                    ans[i] = a[j][n] / a[j][i];
    return res;
}

使用范例

POJ1830

算法学习笔记1.1.2 高斯消元

原文:https://www.cnblogs.com/zifeiy/p/9504928.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!