R与数学专题 |第一节:基本运算
R是作为统计语言,只要一个简单的函数就能实现复杂的数学计算,所以R语言进行数学计算具有很好的优势。
本文主要介绍R在数学方面的计算。
1. 基本运算
1.1 四则运算
四则是指加法、减法、乘法、除法的计算法则。 example:
x<-10
y<-20
x-y; x+y; x/y; x*y;
## [1] -10
## [1] 30
## [1] 0.5
## [1] 200
1.2 有理数的计算
##install.apckages('gmp') # 第一次需要安装此包 library(gmp)
##
## Attaching package: 'gmp'
##
## The following objects are masked from 'package:base':
##
## %*%, apply, crossprod, matrix, tcrossprod
##x=3/5,y=4/9 x=as.bigq(3,5) y=as.bigq(4,9)x;y
## Big Rational ('bigq') :
## [1] 3/5
## Big Rational ('bigq') :
## [1] 4/9
x+y
## Big Rational ('bigq') :
## [1] 47/45
x-y
## Big Rational ('bigq') :
## [1] 7/45
x*y
## Big Rational ('bigq') :
## [1] 4/15
x/y
## Big Rational ('bigq') :
## [1] 27/20
1.3 复数计算
## 直接创建复数y<-3+4iy
## [1] 3+4i
## 通过complex创建函数 y<-complex(3,4)##第一个数是实部,第二个是虚部y
## [1] 4+0i 4+0i 4+0i
## 获取复数的实部和虚部 Re(y)
## [1] 4 4 4
Im(y)
## [1] 0 0 0
## 复数的四则运算 x<-2+5ix+y
## [1] 6+5i 6+5i 6+5i
x-y
## [1] -2+5i -2+5i -2+5i
x*y
## [1] 8+20i 8+20i 8+20i
x/y
## [1] 0.5+1.25i 0.5+1.25i 0.5+1.25i
1.4 其他计算
最小公倍数
##install.apckages('gmp') ##第一次需要安装此包 library(gmp)
x<-5; y=9 lcm.bigz(x,y)
## Big Integer ('bigz') :
## [1] 45
阶乘的计算
##低阶阶乘的计算,一般小于100!
## x=10,那么10:
factorial(10)
## [1] 3628800
##高阶乘的计算,一般超过200的阶乘,factorial函数就计算不出来了:
##例如
factorial(200)
## Warning in factorial(200): value out of range in 'gammafn'
## [1] Inf
##那么gmp包中的只有用factorialZ函数计算 factorialZ(200)
## Big Integer ('bigz') :
## [1] 788657867364790503552363213932185062295135977687173263294742533244359449963403342920304284011984623904177212138919638830257642790242637105061926624952829931113462857270763317237396988943922445621451664240254033291864131227428294853277524242407573903240321257405579568660226031904170324062351700858796178922222789623703897374720000000000000000000000000000000000000000000000000
组合数的计算
##choose(n,k) choose(20,5)
## [1] 15504
要了解gmp其他函数的功能,请学习gmp的相关文档:http://cran.r-project.org/web/packages/gmp/gmp.pdf
2.方程的计算
2.1 运用uniroot函数求解一元多次方程的根
## 建立多项式函数
library(stats)f<-function(a,x){
##a 表示多项式前对应的系数向量,按多项次数递增
##example:
## f=2+3x+4x^3;
##a=[2,3,0,4]
sum(a*x^seq(0,length(a)-1)) }
假设方程为:f(x)=5+x-x2+x3
###先画出方程的图像
x=seq(-5,5,length.out=1000)
y=sapply(x,f,a=c(5,1,-1,1))
png(file="picture/f1.png")
plot(x=x,y=y,type='l',ylab="f(x)",main="5+x-x^2+x^3")
lines(x=x,y=rep(0,length=length(x)),ylab="f")
dev.off()
## pdf
## 2
plot(x=x,y=y,type='l',ylab="f(x)",main="5+x-x^2+x^3")
lines(x=x,y=rep(0,length=length(x)),ylab="f")
从上图可以方程的根的区间在[-2,0]之间。
root=uniroot(f,interval=c(-2,0),a=c(5,1,-1,1))
##方程的根为: root$root
## [1] -1.278165
2.2求解非线性方程的根
f<-function(a0,a1,a2,x){
a0*x*exp(a1*x)+a2 }
假设方程f(x)=3xe^(-2x) 先画出方程的图像
x=seq(-2,2,length.out=100)
y=f(3,-2,5,x)
png(file="picture/f2.png")
plot(x,y,type='l',ylab="f(x)",main='3xe^(-2x)')
lines(x,y=rep(0,length(x)))
dev.off()
## pdf
## 2
plot(x,y,type='l',ylab="f(x)",main='3xe^(-2x)')
lines(x,y=rep(0,length(x)))
从上图可以看出,方程的根在[-1,0]之间
root=uniroot(f,interval=c(-1,0),a0=3,a1=-2,a2=5) ##方程的根为: root$root
## [1] -0.5522887
结束语:
本节是数学专题的第一节,接下来数周我们将由浅入深的介绍更多有关R语言在数学方面的实际例子。欢迎各位同学继续关注。
----------------------------------------------------------------------------------
数据和特征决定了效果上限,模型和算法决定了逼近这个上限的程度
----------------------------------------------------------------------------------

浙公网安备 33010602011771号