前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在R里面对三元一次方程求解

在R里面对三元一次方程求解

作者头像
生信技能树
发布2020-07-02 14:51:35
2.3K0
发布2020-07-02 14:51:35
举报
文章被收录于专栏:生信技能树生信技能树

三元一次方程大家应该是不陌生的,形如 aX + bY + cZ = d 的就是,其中X,Y,Z是未知的变量,a,b,c,d 都是已知的常量,通常呢,需要至少3个没有线性关系的已知等式才能求唯一解。例如,已知:

代码语言:javascript
复制
2X + 3Y - 4Z = 345
5X - 6Y + 7Z = 361
8X + 9Y - 10Z = 235

就可以求出唯一解:X= -984.7667 Y= -61.2 Z= 327.5667 看起来确实有点难度哦!

不知道多少人还记得数学解法,主要是利用消元思想使三元变二元,再变一元。我搜索了一下,是如下3个步骤:

  • ①利用代入法或加减法,消去一个未知数,得出一个二元一次方程组;
  • ②解这个二元一次方程组,求得两个未知数的值;
  • ③将这两个未知数的值代入原方程中较简单的一个方程,求出第三个未知数的值,把这三个数写在一起的就是所求的三元一次方程组的解。

那么,如果是要在R里面操作呢,这个时候矩阵的思想就可以帮上忙了。我先公布代码:

代码语言:javascript
复制
b=c(345,361,235)
b
a=matrix(c(2,3,-4,5,-6,7,8,9,-10),ncol=3)
a
x=solve(a,b)
x
# > x
# [1] -984.7667  -61.2000  327.5667
a %*% x 

其实就是 ax=b ,然后已知a是一个矩阵,3行3列,b是一个向量有3个元素,就可以求解x啦。

重要的就是 solve 函数,把前面的已知的等式,拆分出来a和b两个常量,就可以求解x这个变量:

代码语言:javascript
复制
2X + 3Y - 4Z = 345
5X - 6Y + 7Z = 361
8X + 9Y - 10Z = 235

其中x这个变量,由X,Y,Z这3个变量组成。

我看到了网站:https://www.cliffsnotes.com/study-guides/algebra/algebra-ii/linear-equations-in-three-variables/linear-equations-solutions-using-matrices-with-three-variables 讲解的很不错!

矩阵提取的示例如下:

在R里面可以很容易进行矩阵求解,也就是线性代数,就是上面提到的 ax=b ,然后已知a是一个矩阵,3行3列,b是一个向量有3个元素,就可以求解x啦。

如果是数学计算里面的消元法,示例如下:

也挺简单的。

关于 %*% 运算符

以前接触的比较多的是match函数和 %in%,都是用来做两个向量的元素匹配的,这个 %*% 运算符第一次见,因为以前并没有把R语言用到线性代数,很少去对两个矩阵进行运算。

在R里面,问号可以查看帮助文档:

代码语言:javascript
复制
?`%*%`

可以看到,就是 Matrix Multiplication的运算符:矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义 。

学会看帮助文档,是你R语言入门的开始!有空的话跟着《生信分析人员如何系统入门R(2019更新版)》购买R基础书籍,逼自己一次,把R的知识点路线图搞定,如下:

  • 了解常量和变量概念
  • 加减乘除等运算(计算器)
  • 多种数据类型(数值,字符,逻辑,因子)
  • 多种数据结构(向量,矩阵,数组,数据框,列表)
  • 文件读取和写出
  • 简单统计可视化
  • 无限量函数学习

再听完我B站的R语言公开课:https://www.bilibili.com/video/BV1cs411j75B

拓展

在R里面解方程真的是非常方便啊,我不禁在想,如果我大学本科就知道了R这个神器,高等数学,线性代数,概率论应该就理解的更牢固吧?不过好像意义也不大,因为离开校园后它们的用处几乎没有,而学习它们的时候无法也就是考试分数更高,可是已经都是满分了,除非去逼迫授课老师把考题出难一点。

如果大家还是本科在读,或者准备考研,不妨把R用起来,在你们的数学学习过程中,比如对标准型的一元三次方程 aX^*3*+bX^2+cX+d=0 呢?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于 %*% 运算符
  • 拓展
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档