请选择 进入手机版 | 继续访问电脑版

高斯消元法解线性方程组

[复制链接]
林雨宣 发表于 2021-1-2 19:46:52 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
高斯消元法

这种方法,可以在靠近O(n3)的复杂度下求解线性方程组,忧郁克拉默法则的O(n*n!)
对于一组线性方程组,摆列每一列举行如下步调:
1、找到绝对值最大的一行
2、将这一行交换到第一行
3、将这一行的第一个数变成1,对当前这一行举行操纵,不涉及矩阵的初等变动
4、将下面所有行的当前列全部消成0,使用矩阵的初等变动
对于原线性方程组举行变动后
如果得到的矩阵是一个完美的上三角矩阵,则说明方程组有唯一解
否则会出现两种情况:
1、推出抵牾,即:零==非零,这种情况下体现无解
2、否则,即原线性方程组中有多余的方程,此时有无穷多解
高斯消元解线性方程组

[code]#include using namespace std;typedef long long ll;const int N = 110;const double eps = 1e-6; //办理c++中存储浮点数存在的精度问题int n;double a[N][N];int gauss(){    int c, r; //c体现摆列的哪一列,r体现摆列的哪一行    for (c = 0, r = 0; c < n; c++)    {        int t = r; //纪录当前列        for (int i = r; i < n; i++)        { //abs返回整数,fabs返回浮点数            if (fabs(a[c]) > fabs(a[t][c]))                t = i;        }        if (fabs(a[t][c]) < eps) continue;        for (int i = c; i = c; i--) a[r] /= a[r][c];        for (int i = r + 1; i < n; i++)        {            if (fabs(a[c]) > eps)            {                for (int j = n; j >= c; j--)                    a[j] -= a[r][j] * a[c];            }        }        r++;    }    if (r < n) //体现不存在唯一解    {        for (int i = r; i < n; i++)            if (fabs(a[n]) > eps)                return 2;        return 1;    }    for (int i = n - 1; i >= 0; i--)    {        for (int j = i + 1; j < n; j++)            a[n] -= a[j] * a[j][n];    }    return 0;}int main(){    cin >> n;    for (int i = 0; i < n; i++)        for (int j = 0; j > a[j];    int t = gauss();    if (t == 0) //体现只有一组解    {        for (int i = 0; i < n; i++)            printf("%.2lf\n", a[n]);    }    else if (t == 1)        cout
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )