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

2020-07-02 14:51:35 浏览数 (1)

三元一次方程大家应该是不陌生的,形如 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 呢?

0 人点赞