数值作业:顺序消去法解线性方程组之C语言代码

2023-10-29

实际上后面的Guass列主选主元,全选主元,都是由顺序高斯消元法稍加改动变化而来的,但是顺序消元会出现一个问题,如果我们要保留的那个元的系数很小,那么在消元过程中,势必会用很大的数字乘以次方程后再加到别的方程上消去别的方程中的改元,这样就会造成其他元的系数超大,而且计算过程容易累积误差。为了避免此,就提出了列主元高斯消元法,即在每次选择保留的元时,选择那个元所对应的系数较大的所对应的方程,然后基于次方程来对其他方程消元,这样这个元所对应最大的系数不就是这元所对应的列中最大的系数,因而取名为列主元高斯消元法。
1,Guass列选主元消去法(题目就用实验上的,如果结果与列选主元相同则表面代码正确)

|2.5 2.3 -5.1| | x1 | |3.7|
|5.3 9.6 1.5 | | x2 | = |3.8|
|8.1 1.7 -4.3| | x3 | |5.5|
有了前面的基础,这个可以依葫芦画瓢了,一步一步解决就OK了:
1.输入方程组的维数n,矩阵A,右端项b,控制精度这里我们定义了一个宏常量eps(1e-6,代表10的负6次方)...talk is cheap,let’s show my code. 下面上自己的代码:

/*************************************************************************
    > File Name: sequence.c
    > Author:chendiyang
    > School:WUST_CST_1501班
    > Myblog:www.chendsir.com
    > Mail:1441353519@qq.com 
    > Created Time: 2017年04月19日 星期三 19时09分31秒
 ************************************************************************/

#include <stdio.h>
#include <math.h>
#define MAX 20   //最大维数 
#define eps 1e-10
int main()
{
    int n;
    int i,j,k;
    int mi;
    double mx,tmp,sum;
    static double a[MAX][MAX],b[MAX],x[MAX];
    printf("\n 输入方程组的维数:");//输入AX=b的维数
    scanf("%d",&n);
    if(n>MAX)
    {
        printf("输入的维数过大!");
        return 1;
     } 
     if(n<=0)
     {
        printf("输入的维数过小!");
        return 1;
     }
     //输入矩阵的值
     printf("\n请输入A矩阵的值:"); 
     for(i=0;i<n;i++)
       for(j=0;j<n;j++) 
         scanf("%lf",&a[i][j]);
           //输入b矩阵 
      printf("\n请输入B矩阵的值:");      
      for(i=0;i<n;i++)
      scanf("%lf",&b[i]);

      //Guass消元
         for(k=0;k<(n-1);k++)  
     {  
         for(i=(k+1);i<n;i++)  
         {  
            if(fabs(a[k][k])<eps)  //与我们定义的精度进行比较
            {  
               printf("\n主元素过小..\n");  
               return 1;   
            }  
            tmp=a[i][k]/a[k][k];  
            for(j=(k+1);j<(n);j++)  
            {a[i][j]-=tmp*a[k][j];}//不同的是这里没有进行与列的交换,就造成了保留
            b[i]-=tmp*b[k];     //系数比较小,从而造成误差大,列选主元解决了这个问题
            a[i][k]=0;  
         }  
     }   
     x[n-1]=b[n-1]/a[n-1][n-1];       //回代   
     for(i=(n-2);i>=0;i--)            //解方程
     {  

         x[i]=b[i];
         for(j=(i+1);j<n;j++)  
         {
             x[i]-=a[i][j]*x[j];//这些都和Guass列选主元消去法都一样
         }  
         x[i]/=a[i][i];  

     }   


                 //输出运行结果 
          printf("solution is :\n");
          for(i=0;i<n;i++)
          printf("%lf\n",x[i]);
          return 0;    

}

   运算结果如图:
   这里写图片描述 
   可以看到图中运行的guass.c源文件(./guass代表运行这个程序,这是Linux上的gcc编译和运行命令),同时又运行了sequence.c源文件(./sequence代表运行这个程序)两个结果都是相同的,这表明,列选主元和顺序消去法的结果是一模一样,看了顺序消去法对于本题目并没有产生很大的误差..

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

数值作业:顺序消去法解线性方程组之C语言代码 的相关文章

随机推荐

  • Error in created hook (Promise/async): “AxiosError: Request failed with status code 404“

    背景 Error in created hook Promise async AxiosError Request failed with status code 404 原因 路径不对导致报错 解决方法 检查获取接口的代码 是否有空格
  • Github上1.1KFork的C++笔记

    编程语言 C C 原文链接 如果觉得本文对你有所帮助 欢迎去原地址点个Star 侵删 https github com linw7 Skill Tre 目录 Chapter 1 Chapter 2 Chapter 3 Chapter 4 编
  • 《C++ Primer Plus》学习随记1---模拟EOF

    EOF 文件结束符 End Of File 通常 EOF被定义为值 1 几种检测模拟EOF结束输入的代码实现 1 eof fail 从输入流读取数据 eof 如果检测到EOF cin eof 返回true 否则返回false fail 用来
  • 中台建设:中台有效落地的6脉神剑

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • 关于利用Unity制作游戏登陆界面这件事

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 关于利用Unity制作游戏登陆界面这件事 前言 一 Unity是什么 二 制作历程 1 开始界面 2 音效背景 3 跳转页 总结 前言 由于是自学 故实现功能和代码不太完善
  • 模板方法模式(Template Method)

    模板方法模式 Template Method 概述 定义一个操作中的算法的骨架 而将一些步骤延迟到子类中 Template Method 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 例如生产饮料的流程 加原料 加水 烧水
  • 关于win10+2080ti 配置cuda cudnn 和tensorflow版本问题

    经过两天的设置 终于找到了配置的正确方法 现以文字的形式保留下来 防止忘记 本次配置的版本如下 python 3 5 2 cuda 10 0 一定要用10 0 10 1不行 cudnn 7 4 1 建议用这个 我用7 3 1提示我报错了 t
  • 【PTA】两个有序链表序列的交集 (20 分)

    记录这道题是因为被一个bug磨了很久很久 大概4个小时 自闭了 一直以为是自己的单链表知识不够才错的 妹想到是因为出现死循环 问了同学才知道错在这里 while p1 NULL p2 s2 这里 while p1 gt data p2 gt
  • 使用RT-Thread Studio 建立 L476 Nucleo 项目工程并完成相关功能

    使用RT Thread Studio 建立 L476 Nucleo 项目工程并完成相关功能 1 新建RTT工程 2 添加cube对应的驱动 Nucleo 板上 X2 低速时钟有 X3调整时钟无 UART2串口配置 PA2 PA3 用户按键
  • Python爬虫:浅谈【破解某易云音乐加密-JS逆向】

    网页及JS代码分析 我们这里直接进入某易云音乐官网 然后进入到任意一首歌曲的详情页 并进行分析 如下图 由于我们之前分析过网页的数据构成 所以这里不再赘述 直接点进R SO 4 1446235247 csrf token 往下翻 可以看到p
  • anconda下载

    a n c o n d a 下载以及基本指令 an
  • 300英雄服务器维护多久,300英雄7月19日停机更新公告

    300英雄 300英雄维护公告 尊敬的 300英雄 玩家 300英雄 将定于2019年07月19日06 00 09 00 星期五 对所有大区进行停机更新 届时请重新开启客户端便能正常进入游戏 如果在预定时间内无法完成维护内容 开服时间也将继
  • 玩转Windows服务系列——创建Windows服务

    玩转Windows服务系列 创建Windows服务 ATL 服务
  • Mysql在大型网站的应用架构演变

    原创文章 转载请注明 转载自http www cnblogs com Creator 本文链接地址 Mysql在大型网站的应用架构演变 本文已经被多处转载 包括CSDN推荐以及码农周刊等等 阅读数超过50w 回流到我博客流量的还是比较少 不
  • 使用 Nginx + Gunicorn 部署 Flask 项目

    使用 Nginx Gunicorn 部署 Flask 项目 Flask Web 项目开发完成后 开发人员只是在开发环境运行 只有本地可以访问到项目 如果要让用户访问到项目 需要将项目部署到生产环境上 在服务器运行项目 本文就使用阿里云服务器
  • C++ primer 【笔记】C++中this指针的用法详解

    1 this指针的用处 一个对象的this指针并不是对象本身的一部分 不会影响sizeof 对象 的结果 this作用域是在类内部 当在类的非静态成员函数中访问类的非静态成员的时候 编译器会自动将对象本身的地址作为一个隐含参数传递给函数 也
  • 【Linux命令详解

    文章标题 简介 一 参数列表 二 使用介绍 1 分页显示文件内容 2 搜索关键词 3 显示行号 4 显示特定内容 5 只显示匹配行 6 忽略大小写搜索 7 输出到文件 8 动态查看文件增长 9 开启对二进制文件的支持 10 显示控制字符 1
  • 博客搬家系列(六)-爬取今日头条文章

    博客搬家系列 六 爬取今日头条文章 一 前情回顾 博客搬家系列 一 简介 https blog csdn net rico zhou article details 83619152 博客搬家系列 二 爬取CSDN博客 https blog
  • 前端和后端就业前景如何?

    我个人的信息来源有两个渠道 一个是观察公司内网发布的招聘信息 另一个是观察朋友圈内猎头经常发布的招聘信息 基本算是从横向与纵向两个视角 较为全面的了解当前市场 先说结论 就国内市场而言 前端开发要求较容易 而发展前景相应的受限 发布的职位也
  • 数值作业:顺序消去法解线性方程组之C语言代码

    实际上后面的Guass列主选主元 全选主元 都是由顺序高斯消元法稍加改动变化而来的 但是顺序消元会出现一个问题 如果我们要保留的那个元的系数很小 那么在消元过程中 势必会用很大的数字乘以次方程后再加到别的方程上消去别的方程中的改元 这样就会