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

本文共 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

你可能感兴趣的文章
微信小程序开发-框架
查看>>
redo、undo、binlog的区别
查看>>
RecycleView设置顶部分割线(记录一个坑)
查看>>
汉字转拼音 (转)
查看>>
会计基础_001
查看>>
小程序: 查看正在写的页面
查看>>
Jenkins持续集成环境部署
查看>>
MWeb 1.4 新功能介绍二:静态博客功能增强
查看>>
预处理、const与sizeof相关面试题
查看>>
爬虫豆瓣top250项目-开发文档
查看>>
有趣的数学书籍
查看>>
teamviewer 卸载干净
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
USACO 土地购买
查看>>
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>
10、程序员和编译器之间的关系
查看>>
配置 RAILS FOR JRUBY1.7.4
查看>>
AndroidStudio中导入SlidingMenu报错解决方案
查看>>