三元一次方程大家应该是不陌生的,形如 aX + bY + cZ = d
的就是,其中X,Y,Z是未知的变量,a,b,c,d 都是已知的常量,通常呢,需要至少3个没有线性关系的已知等式才能求唯一解。例如,已知:
2X + 3Y - 4Z = 345
5X - 6Y + 7Z = 361
8X + 9Y - 10Z = 235
就可以求出唯一解:X= -984.7667 Y= -61.2 Z= 327.5667
看起来确实有点难度哦!
不知道多少人还记得数学解法,主要是利用消元思想使三元变二元,再变一元。我搜索了一下,是如下3个步骤:
- ①利用代入法或加减法,消去一个未知数,得出一个二元一次方程组;
- ②解这个二元一次方程组,求得两个未知数的值;
- ③将这两个未知数的值代入原方程中较简单的一个方程,求出第三个未知数的值,把这三个数写在一起的就是所求的三元一次方程组的解。
那么,如果是要在R里面操作呢,这个时候矩阵的思想就可以帮上忙了。我先公布代码: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这个变量: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里面,问号可以查看帮助文档:?`%*%`
可以看到,就是 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
呢?文末友情推荐
要想真正入门生物信息学建议务必购买全套书籍,一点一滴攻克计算机基础知识,书单在:什么,生信入门全套书籍仅需160 。
如果大家没有时间自行慢慢摸索着学习,可以考虑我们生信技能树官方举办的学习班: - 数据挖掘学习班第4期(线上直播3周,马拉松式陪伴,带你入门)
- 生信爆款入门-第6期(线上直播4周,马拉松式陪伴,带你入门)
如果你没有服务器的话,做NGS数据分析实战可能会有点勉强,建议考虑:每天不足一块钱,定制生信云送给你