博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数论--高斯消元法
阅读量:6585 次
发布时间:2019-06-24

本文共 1010 字,大约阅读时间需要 3 分钟。

高斯消元是一个常用的解n元一次方程组的方法。

1.处理数据:
我们设方程Ai>ai1x1+ai2x2+ainxn=bi
那么对于A1An这n个方程,我们可以将它们放在一个矩阵里,方便操作。
例如这样:
2x1+4x2=10
3x1+2x2=1
存储为矩阵:
2 4 10
-3 2 1
2.矩阵变换:
我们可以对于矩阵的某一部分作出一些变换使得在方程组本身没有本质变化的前提下可以求解。
变换1:交换两行。
变换2:给一行乘(除)一个数。
变换3:将某一行加(减)给另一行。
变换2+3:将某一行乘(除)一个数之后再加(减)给另一行。
以上的变换一定要好好理解。
3.矩阵求解:
首先,我们先来看看上面那个方程是怎么解的:
1
2x1+4x2=10—-A
3x1+2x2=1—-B

2

1x1+2x2=5—-A/2—-变换2

3

8x2=16—-A*3+B—-变换2+3

4

x2=2
x1=1

以上过程转换成矩阵就是:

1

2 4 10
-3 2 1

2

R1/2
1 2 5
-3 2 1

3

R2+R1*3
1 2 5
0 8 16

4

R2/8
1 2 5
0 1 2

5

R1-R2*2
1 0 1
0 1 2

6

此时的矩阵转换为方程就是:
1x1+0x2=1
0x1+1x2=2
化简后即为:
x1=1
x2=2
至此,解题完毕。

看了以上过程之后是不是有点儿明白了呢?

可以先看看代码,一边看,一边自己用代码来处理一下上面的题,有助于理解。
代码:

#include
#define ll long longusing namespace std;const double eps=1e-8;int n;double a[101][102];bool gauss(){ for(int i=1;i<=n;i++){
//依次从x1到xn消去每一个未知数 int mx=i;//有一个优化我还没说,就是每次找绝对值最大的一行,可以减小精度误差 for(int j=i+1;j<=n;j++)if(fabs(a[j][i])>fabs(a[mx][i]))mx=j; if(fabs(a[mx][i])

转载于:https://www.cnblogs.com/stone41123/p/7581259.html

你可能感兴趣的文章
AI行业强者愈强?Tesra超算网络助力中小AI开发企业!
查看>>
Nginx 目录配置详解
查看>>
关于 PHP 5.4 你所需要知道的
查看>>
codeforces 810A
查看>>
ajax无刷新翻页后,jquery失效问题的解决
查看>>
C++ Primer学习笔记一
查看>>
程序员必须知道的10大基础实用算法及其讲解
查看>>
正则表达式
查看>>
阿里云的yum更新源
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
20160309作业
查看>>
python之路----文件操作
查看>>
探索MySQL高可用架构之MHA(1)
查看>>
tableView 的协议方法
查看>>
海量路由表的快速检索问题-Hash/Trie/快速交换
查看>>
BizTalk Orchestration execute Flat file disassembler ReceivePipeline
查看>>
我的友情链接
查看>>
只需三步轻松搞定 Foxmail 发送邮件“错误信息 ssl连接错误 error code 5”
查看>>