c++使用高斯顺序消元法,求解方程组

2023-10-27

方程组形式为:AX=b

高斯顺序消元法的目的是将方程组整理为一个上三角矩阵,在获得这个上三角矩阵后,就可以通过回代的方法,逆序的求出方程的根X(n-1)~~X(0),可以将求解方程组分为如下几个步骤:

1,首先消去第一列除第一行外的所有元素,将第2~n行的矩阵元素a(1,0)~a(n-1,0)与第一行第一列的矩阵元素a(0,0)相除,得到ratio,将第一行的所有元素与ratio相乘,与2~n行的元素相减,使得第一列除第一行元素外都为0。然后以同样的方法处理下一列的元素,使得除第二列的第二行元素之外都为0,以此类推。

2,在完全化为上三角矩阵之后,X(n-1)的值就可以得出,再通过回代的方法,依次求出X(n-2)~X(0)。

矩阵的输入输出,以文件的形式完成。

gauss_source.txt:

3为方程的个数,2,1,2     4,5,4     6,-3,5  为A的系数,6    18     7   为b  ,0.001是最小主元素  

代码实现如下:

#include<cstdlib> 
#include <iostream> 
#include <fstream> 
#include <cmath> 
using namespace std;
int main(){
    int i,j,k,n; 
    double eps,ratio,sum; 
    ifstream data_in("gauss_source.txt"); 
    ofstream data_out("gauss_result.txt");
    //输入增广矩阵系数
    data_in>>n; //输入方程个数
    double *x=new double[n]; //动态分配存储空间(指针)
    double **a =new double*[n]; //二级指针指向指针数组首地址,n 个方程,二维动态数组
    for(i=0; i<n; i++){
        a[i]=new double [n+1];// 给指针数组每个元素申请空间,每个元素都是一个指针,每个方程有 n+1 个系数(包括常数项)    
    }
    for(i=0; i<n; i++){
        for(j=0; j<n; j++){
            data_in>>a[i][j]; //输入系数矩阵
        }
    }
    for(i=0; i<n; i++){
        data_in>>a[i][n]; //输入等号右端向量的各元素 a[][]为增广矩阵
    }
    data_in>>eps; //输入最小主元素.为了避免主元素为 0 的情况,设置一个比较小的实数
    data_in.close();
    //执行高斯消去法
    for(k=0; k<(n-1); k++) //消元
    {
        for(i=(k+1); i<n; i++){
            if(abs(a[k][k])<eps){
                cout<<endl<<"主元素太小,求解失败..."<<endl;
                exit(0);
            }
            ratio=a[i][k]/a[k][k];
            for(j=(k+1); j<(n+1); j++){
                a[i][j]-=ratio*a[k][j];
            }
            a[i][k]=0;
        }
    }
    x[n-1]=a[n-1][n]/a[n-1][n-1]; //回代
    for(i=(n-2); i>=0; --i){
        sum=0.0;
        for(j=(i+1); j<n; j++){
            sum+=a[i][j]*x[j]; 
            x[i]=(a[i][n]-sum)/a[i][i];
        }
    }
    //结果输出
    for(i=0; i<n; i++){
        data_out<<"\nx[" <<i<< "]="<<x[i]<<endl;
    }
    data_out.close();
        return 0;
}

最后输出的gauss_result.txt:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++使用高斯顺序消元法,求解方程组 的相关文章

随机推荐

  • 微软更新补丁目录查询

    微软更新补丁目录查询下载 传送门 在右上角的搜索框输入补丁编号即可 比如 KB5003638
  • 适合写API接口文档的管理工具有哪些?

    现在越来越流行前后端分离开发 使用ajax交互 所以api接口文档就变的十分有意义了 目前市场有哪些比较优秀的接口文档管理工具呢 1 MinDoc 网址 https www iminho me MinDoc 是一款针对IT团队开发的简单好用
  • 智头条」十四五数字经济发展规划发布,工信部推动充电标准统一

    行业动态 国务院印发 十四五 数字经济发展规划 国务院近日印发 十四五 数字经济发展规划 规划提出 推动5G商用部署和规模应用 加大6G技术研发支持力度 深化人工智能 虚拟现实 8K高清视频等技术的融合 加强和改进反垄断执法 进一步强化个人
  • 开篇导读

    你好 我是码闻强 拥有 12 年软件开发管理经验 创业前服务于杭州知时信息科技有限公司 任高级系统架构师 带领团队研发出一套适合汽车流通行业的 SaaS 产品 指是金融及周边配套产品 为业内数十家机构提供线上支撑服务 你是不是有这样的困惑
  • android edittext 监听输入完成,Android编程实现实时监听EditText文本输入的方法

    Android开发过程中经常使用EditText 有时您可能需要监视在textview中输入的单词数的状态和变化 下面就让爱站技术频道小编给大家带来的Android编程实现实时监听EditText文本输入的方法 分享给大家供大家参考 具体如
  • 疫情之下要不要转行?

    现在说这个话题可能有的人感觉有些晚了 但是我觉得还是可以聊聊 很有借鉴意义的 比较一起还在 生活还得继续 有很多东西还是需要去思考的 这里就把王豆豆的一篇关于是否要转行的文章 你且看 今年的疫情我一直在关注最新的情况 最近这几天国外感染人数
  • github 上传大文件的方法

    背景 版本库中有两个压缩包 大概在300M左右 上传时提示超过100M 上传失败 1 安装 git lfs git lfs install 2 跟踪指定大文件 可以使用 bin 之类的命令来跟踪一类文件 git lfs track root
  • 【JAVA核心】Java GC机制详解

    垃圾收集 Garbage Collection 通常被称为 GC 本文详细讲述Java垃圾回收机制 导读 1 什么是GC 2 GC常用算法 3 垃圾收集器 4 finalize 方法详解 5 总结 根据GC原理来优化代码 正式阅读之前需要了
  • private的构造函数

    package nuaa public class Xxx public int a private Xxx int a this a a System out println this a this a public static voi
  • avalon的使用与总结

    avalon是前端MVVM框架 将所有前端代码彻底分成两部分 视图的处理通过绑定实现 angular有个更炫酷的名词叫指令 业务逻辑则集中在一个个叫VM的对象中处理 我们只要操作VM的数据 它就自然而然地神奇地同步到视图 作用域绑定ms c
  • Keras实现Unet语义分割医学细胞图像并训练自己的数据集

    文章目录 一 Unet网络模型 二 代码运行 三 制作自己的数据集进行训练并测试标注 前言 本文实现keras下的Unet语义分割模型并且用自己制作的数据集进行训练并预测 本文引用了一些博文里面的内容 侵权请联系删改 引用的一些文章链接地址
  • linux+缺少+libc.so.6,libc.so.6 缺失问题

    今天中午 在Redhat AS5 上解决一个数据库连接问题 在应用的日志中发现如下报错信息 error client 145 24 216 86 lib libc so 6 libc start main 0xdc 0x4138cdec 在
  • 状态模式(State)

    1 概念 状态模式允许一个对象在其内部状态改变时改变它的行为 对象看起来似乎修改了它所属的类 属于行为型模式 2 模式结构 环境角色 Context 定义客户端所感兴趣的接口 并且保留一个具体状态类的实例 这个具体状态类的实例给出此环境对象
  • Linux基础命令

    文章目录 Linux基础命令 Linux命令基础格式 ls命令 ls命令的参数 ls 命令的 a选项 ls命令的 l选项 ls命令选项的组合使用 ls选项和参数的组合使用 ls 命令的 h选项 目录切换相关命令 cd pwd cd 切换工作
  • 如何查看自己电脑的IP地址

    如何查看自己电脑的IP地址 简略概括 打开命令窗口 win R gt 输入cmd进入 gt 敲ipconfig gt 进行查看 图片图示 首先打开命令窗口 在命令窗口中输入ipconfig 进行查看 这就是查看结果 以我的为例 我的IP地址
  • 【StyleGAN代码学习】StyleGAN模型架构

    完整StyleGAN笔记 http www gwylab com pdf Note StyleGAN pdf 基于StyleGAN的一个好玩的网站 www seeprettyface com 第二章 StyleGAN代码解读 上 这一章将对
  • CMOS图像传感器——从传感器冗余说起

    在这先抛出一个概念 什么是成像圈 众所周知 相机的镜头近似于圆柱体 光线透过圆筒子投射出的大都是圆形 我们可以拿一个镜头演示一下 当这个圆圈投在传感器所在焦平面时 我们称之为像场 像场的边界我们称之为成像圈 成像圈是圆的 但是传感器是矩形
  • 【测试】用例篇

    努力经营当下 直至未来明朗 文章目录 一 设计测试用例的万能公式 二 设计测试用例的具体方法 1 等价类 2 边界值 3 因果图 判定表 4 场景设计法 5 正交法 6 错误猜测法 sparkles 小结 普通小孩也要热爱生活 一 设计测试
  • WEB-1-前端三剑客

    前端三剑客 一 HTML 1 什么是HTML 2 元素 3 常见的元素 1 标题元素 2 段落元素 3 列表 4 超链接 5 图片 6 无语义标签 二 CSS 1 什么是 CSS 2 引入的样式 3 常见的 CSS 选择器 1 标签选择器
  • c++使用高斯顺序消元法,求解方程组

    方程组形式为 AX b 高斯顺序消元法的目的是将方程组整理为一个上三角矩阵 在获得这个上三角矩阵后 就可以通过回代的方法 逆序的求出方程的根X n 1 X 0 可以将求解方程组分为如下几个步骤 1 首先消去第一列除第一行外的所有元素 将第2