R语言中的数学计算.docx
- 文档编号:4818115
- 上传时间:2022-12-09
- 格式:DOCX
- 页数:24
- 大小:59.26KB
R语言中的数学计算.docx
《R语言中的数学计算.docx》由会员分享,可在线阅读,更多相关《R语言中的数学计算.docx(24页珍藏版)》请在冰豆网上搜索。
R语言中的数学计算
R语言中的数学计算
R是作为统计语言,生来就对数学有良好的支持,一个函数就能实现一种数学计算,所以用R语言做数学计算题特别方便。
如果计算器中能嵌入R的计算函数,那么绝对是一种高科技产品。
本文总结了R语言用于初等数学中的各种计算。
目录
1.基本计算
2.三角函数计算
3.复数计算
4.方程计算
1基本计算
四则运算:
加减乘除,余数,整除,绝对值,判断正负
>a<-10;b<-5
#加减乘除
>a+b;a-b;a*b;a/b
[1]15
[1]5
[1]50
[1]2
#余数,整除
>a%%b;a%/%b
[1]0
[1]2
#绝对值
>abs(-a)
[1]10
#判断正负
>sign(-2:
3)
[1]-1-10111
数学计算:
幂,自然常用e的幂,平方根,对数
>a<-10;b<-5;c<-4
#幂
>c^b;c^-b;c^(b/10)
[1]1024
[1]0.0009765625
[1]2
#自然常数e
>exp
(1)
[1]2.718282
#自然常数e的幂
>exp(3)
[1]20.08554
#平方根
>sqrt(c)
[1]2
#以2为底的对数
>log2(c)
[1]2
#以10为底的对数
>log10(b)
[1]0.69897
#自定义底的对数
>log(c,base=2)
[1]2
#自然常数e的对数
>log(a,base=exp
(1))
[1]2.302585
#指数对数操作
>log(a^b,base=a)
[1]5
>log(exp(3))
[1]3
比较计算:
==,>,<,!
=,<=,>=,isTRUE,identical
>a<-10;b<-5
#比较计算
>a==a;a!
=b;a>b;a=c
[1]TRUE
[1]TRUE
[1]TRUE
[1]FALSE
[1]FALSE
[1]TRUE
#判断是否为TRUE
>isTRUE(a)
[1]FALSE
>isTRUE(!
a)
[1]FALSE
#精确比较两个对象
>identical(1,as.integer
(1))
[1]FALSE
>identical(NaN,-NaN)
[1]TRUE
>f<-function(x)x
>g<-compiler:
:
cmpfun(f)
>identical(f,g)
[1]TRUE
逻辑计算:
&,|,&&,||,xor
>x<-c(0,1,0,1)
>y<-c(0,0,1,1)
#只比较第一个元素&&,||
>x&&y;x||y
[1]FALSE
[1]FALSE
#S4对象的逻辑运算,比较所有元素&,|
>x&y;x|y
[1]FALSEFALSEFALSETRUE
[1]FALSETRUETRUETRUE
#异或
>xor(x,y)
[1]FALSETRUETRUEFALSE
>xor(x,!
y)
[1]TRUEFALSEFALSETRUE
约数计算:
ceiling,floor,trunc,round,signif
#向上取整
>ceiling(5.4)
[1]6
#向下取整
>floor(5.8)
[1]5
#取整数
>trunc(3.9)
[1]3
#四舍五入
>round(5.8)
#四舍五入,保留2位小数
>round(5.8833,2)
[1]5.88
#四舍五入,保留前2位整数
>signif(5990000,2)
[1]6e+06
数组计算:
最大,最小,范围,求和,均值,加权平均,连乘,差分,秩,,中位数,分位数,任意数,全体数
>d<-seq(1,10,2);d
[1]13579
#求最大值,最小值,范围range
>max(d);min(d);range(d)
[1]9
[1]1
[1]19
#求和,均值
>sum(d),mean(d)
[1]25
[1]5
#加权平均
>weighted.mean(d,rep(1,5))
[1]5
>weighted.mean(d,c(1,1,2,2,2))
[1]5.75
#连乘
>prod(1:
5)
[1]120
#差分
>diff(d)
[1]2222
#秩
>rank(d)
[1]12345
#中位数
>median(d)
[1]5
#分位数
>quantile(d)
0%25%50%75%100%
13579
#任意any,全体all
>e<-seq(-3,3);e
[1]-3-2-10123
>any(e<0);all(e<0)
[1]TRUE
[1]FALSE
排列组合计算:
阶乘,组合,排列
#5!
阶乘
>factorial(5)
[1]120
#组合,从5个中选出2个
>choose(5,2)
[1]10
#列出从5个中选出2个的组合所有项
>combn(5,2)
[,1][,2][,3][,4][,5][,6][,7][,8][,9][,10]
[1,]1111222334
[2,]2345345455
#计算0:
10的组合个数
>for(nin0:
10)print(choose(n,k=0:
n))
[1]1
[1]11
[1]121
[1]1331
[1]14641
[1]15101051
[1]1615201561
[1]172135352171
[1]18285670562881
[1]193684126126843691
[1]1104512021025221012045101
#排列,从5个中选出2个
>choose(5,2)*factorial
(2)
[1]20
累积计算:
累加,累乘,最小累积,最大累积
#累加
>cumsum(1:
5)
[1]1361015
#累乘
>cumprod(1:
5)
[1]12624120
>e<-seq(-3,3);e
[1]-3-2-10123
#最小累积cummin
>cummin(e)
[1]-3-3-3-3-3-3-3
#最大累积cummax
>cummax(e)
[1]-3-2-10123
两个数组计算:
交集,并集,差集,数组是否相等,取唯一,查匹配元素的索引,找重复元素索引
#定义两个数组向量
>x<-c(9:
20,1:
5,3:
7,0:
8);x
[1]9101112131415161718192012345
[18]34567012345678
>y<-1:
10;y
[1]12345678910
#交集
>intersect(x,y)
[1]91012345678
#并集
>union(x,y)
[1]9101112131415161718192012345
[18]6708
#差集,从x中排除y
>setdiff(x,y)
[1]111213141516171819200
#判断是否相等
>setequal(x,y)
[1]FALSE
#取唯一
>unique(c(x,y))
[1]9101112131415161718192012345
[18]6708
#找到x在y中存在的元素的索引
>which(x%in%y)
[1]12131415161718192021222425262728
[18]293031
>which(is.element(x,y))
[1]12131415161718192021222425262728
[18]293031
#找到重复元素的索引
>which(duplicated(x))
[1]18192024252627282930
2三角函数计算
2.1三角函数
在直角三角形中仅有锐角(大小在0到90度之间的角)三角函数的定义。
给定一个锐角θ,可以做出一个直角三角形,使得其中的一个内角是θ。
设这个三角形中,θ的对边、邻边和斜边长度分别是a、b和h。
三角函数的6种关系:
正弦,余弦,正切,余切,正割,余割。
∙θ的正弦是对边与斜边的比值:
sinθ=a/h
∙θ的余弦是邻边与斜边的比值:
cosθ=b/h
∙θ的正切是对边与邻边的比值:
tanθ=a/b
∙θ的余切是邻边与对边的比值:
cotθ=b/a
∙θ的正割是斜边与邻边的比值:
secθ=h/b
∙θ的余割是斜边与对边的比值:
cscθ=h/a
三角函数的特殊值:
函数0pi/12pi/6pi/4pi/35/(12*pi)pi/2
sin0(sqrt(6)-sqrt
(2))/41/2sqrt
(2)/2sqrt(3)/2(sqrt(6)+sqrt
(2))/41
cos1(sqrt(6)+sqrt
(2))/4sqrt(3)/2sqrt
(2)/21/2(sqrt(6)-sqrt
(2))/40
tan02-sqrt(3)sqrt(3)/31sqrt(3)2+sqrt(3)NA
cotNA2+sqrt(3)sqrt(3)1sqrt(3)/32-sqrt(3)0
sec1sqrt(6)-sqrt
(2)sqrt(3)*2/3sqrt
(2)2sqrt(6)-sqrt
(2)NA
cscNA2sqrt
(2)sqrt(3)*2/3sqrt(6)-sqrt
(2)1NA
三角基本函数:
正弦,余弦,正切
#正弦
>sin(0);sin
(1);sin(pi/2)
[1]0
[1]0.841471
[1]1
#余弦
>cos(0);cos
(1);cos(pi)
[1]1
[1]0.5403023
[1]-1
#正切
>tan(0);tan
(1);tan(pi)
[1]0
[1]1.557408
[1]-1.224647e-16
接下来,我们用ggplot2包来画出三角函数的图形。
#加载ggplot2的库
>library(ggplot2)
>library(scales)
三角函数画图
#x坐标
>x<-seq(-2*pi,2*pi,by=0.01)
#y坐标
>s1<-data.frame(x,y=sin(x),type=rep('sin',length(x)))#正弦
>s2<-data.frame(x,y=cos(x),type=rep('cos',length(x)))#余弦
>s3<-data.frame(x,y=tan(x),type=rep('tan',length(x)))#正切
>s4<-data.frame(x,y=1/tan(x),type=rep('cot',length(x)))#余切
>s5<-data.frame(x,y=1/sin(x),type=rep('sec',length(x)))#正割
>s6<-data.frame(x,y=1/cos(x),type=rep('csc',length(x)))#余割
>df<-rbind(s1,s2,s3,s4,s5,s6)
#用ggplot2画图
>g<-ggplot(df,aes(x,y))
>g<-g+geom_line(aes(colour=type,stat='identity'))
>g<-g+scale_y_continuous(limits=c(0,2))
>g<-g+scale_x_continuous(breaks=seq(-2*pi,2*pi,by=pi),labels=c("-2*pi","-pi","0","pi","2*pi"))
>g
2.1反三角函数
基本的反三角函数定义:
反三角函数定义值域
arcsin(x)=ysin(y)=x-pi/2<=y<=pi/2
arccos(x)=ycos(y)=x0<=y<=pi,
arctan(x)=ytan(y)=x-pi/2 arccsc(x)=ycsc(y)=x-pi/2<=y<=pi/2,y! =0 arcsec(x)=ysec(y)=x0<=y<=pi,y! =pi/2 arccot(x)=ycot(y)=x0 反正弦,反余弦,反正切 #反正弦asin >asin(0);asin (1) [1]0 [1]1.570796#pi/2=1.570796 #反余弦acos >acos(0);acos (1) [1]1.570796#pi/2=1.570796 [1]0 #反正切atan >atan(0);atan (1) [1]0 [1]0.7853982#pi/4=0.7853982 反三角函数画图 #x坐标 >x<-seq(-1,1,by=0.005) #y坐标 >s1<-data.frame(x,y=asin(x),type=rep('arcsin',length(x))) >s2<-data.frame(x,y=acos(x),type=rep('arccos',length(x))) >s3<-data.frame(x,y=atan(x),type=rep('arctan',length(x))) >s4<-data.frame(x,y=1/atan(x),type=rep('arccot',length(x))) >s5<-data.frame(x,y=1/asin(x),type=rep('arcsec',length(x))) >s6<-data.frame(x,y=1/acos(x),type=rep('arccsc',length(x))) >df<-rbind(s1,s2,s3,s4,s5,s6) #用ggplot2画图 >g<-ggplot(df,aes(x,y)) >g<-g+geom_line(aes(colour=type,stat='identity')) >g<-g+scale_y_continuous(limits=c(-2*pi,2*pi),breaks=seq(-2*pi,2*pi,by=pi),labels=c("-2*pi","-pi","0","pi","2*pi")) >g 2.3三角函数公式 接下来,用单元测试的方式,来描述三角函数的数学公式。 通过testthat包,进行单元测试,关于testthat包的安装和使用,请参考文章: 在巨人的肩膀前行催化R包开发 #加载testthat包 >library(testthat) #定义变量 >a<-5;b<-10 平方和公式: ∙sin(x)^2+cos(x)^2=1 expect_that(sin(a)^2+cos(a)^2,equals (1)) 和角公式 ∙sin(a+b)=sin(a)*cos(b)+sin(b)*cos(a) ∙sin(a-b)=sin(a)*cos(b)-sin(b)*cos(a) ∙cos(a+b)=cos(a)*cos(b)-sin(b)*sin(a) ∙cos(a-b)=cos(a)*cos(b)+sin(b)*sin(a) ∙tan(a+b)=(tan(a)+tan(b))/(1-tan(a)*tan(b)) ∙tan(a-b)=(tan(a)-tan(b))/(1+tan(a)*tan(b)) expect_that(sin(a)*cos(b)+sin(b)*cos(a),equals(sin(a+b))) expect_that(sin(a)*cos(b)-sin(b)*cos(a),equals(sin(a-b))) expect_that(cos(a)*cos(b)-sin(b)*sin(a),equals(cos(a+b))) expect_that(cos(a)*cos(b)+sin(b)*sin(a),equals(cos(a-b))) expect_that((tan(a)+tan(b))/(1-tan(a)*tan(b)),equals(tan(a+b))) expect_that((tan(a)-tan(b))/(1+tan(a)*tan(b)),equals(tan(a-b))) 2倍角公式 ∙sin(2*a)=2*sin(a)*cos(a) ∙cos(2*a)=cos(a)^2-sin(a)^2=2*cos(a)^2-1=1-2*sin2(a) expect_that(cos(a)^2-sin(a)^2,equals(cos(2*a))) expect_that(2*cos(a)^2-1,equals(cos(2*a))) expect_that(1-2*sin(a)^2,equals(cos(2*a))) 3倍角公式 ∙cos(3*a)=4*cos(a)^3-3*cos(a) ∙sin(3*a)=-4*sin(a)^3+3*sin(a) expect_that(4*cos(a)^3-3*cos(a),equals(cos(3*a))) expect_that(-4*sin(a)^3+3*sin(a),equals(sin(3*a))) 半角公式 ∙sin(a/2)=sqrt((1-cos(a))/2) ∙cos(a/2)=sqrt((1+cos(a))/2) ∙tan(a/2)=sqrt((1-cos(a))/(1+cos(a)))=sin(a)/(1+cos(a))=(1-cos(a))/sin(a) expect_that(sqrt((1-cos(a))/2),equals(abs(sin(a/2)))) expect_that(sqrt((1+cos(a))/2),equals(abs(cos(a/2)))) expect_that(sqrt((1-cos(a))/(1+cos(a))),equals(abs(tan(a/2)))) expect_that(abs(sin(a)/(1+cos(a))),equals(abs(tan(a/2)))) expect_that(abs((1-cos(a))/sin(a)),equals(abs(tan(a/2)))) 和差化积 ∙sin(a)*cos(b)=(sin(a+b)+sin(a-b))/2 ∙cos(a)*sin(b)=(sin(a+b)-sin(a-b))/2 ∙cos(a)*cos(b)=(cos(a+b)+cos(a-b))/2 ∙sin(a)*sin(b)=(cos(a-b)-cos(a+b))/2 expect_that((sin(a+b)+sin(a-b))/2,equals(sin(a)*cos(b))) expect_that((sin(a+b)-sin(a-b))/2,equals(cos(a)*sin(b))) expect_that((cos(a+b)+cos(a-b))/2,equals(cos(a)*cos(b))) expect_that((cos(a-b)-cos(a+b))/2,equals(sin(a)*sin(b))) 积化和差 ∙sin(a)+sin(b)=2*sin((a+b)/2)*cos((a+b)/2) ∙sin(a)-sin(b)=2*cos((a+b)/2)*cos((a-b)/2) ∙cos(a)+cos(b)=2*cos((a+b)/2)*cos((a-b)/2) ∙cos(a)-cos(b)=-2*sin((a+b)/2)*sin((a-b)/2) expect_that(sin(a)+sin(b),equals(2*sin((a+b)/2)*cos((a-b)/2))) expect_that(sin(a)-sin(b),equals(2*cos((a+b)/2)*sin((a-b)/2))) expect_that(2*cos((a+b)/2)*cos((a-b)/2),equals(cos(a)+cos(b))) expect_that(-2*sin((a+b)/2)*sin((a-b)/2),equals(cos(a)-cos(b))) 万能公式 ∙sin(2*a)=2*tan(a)/(1+tan(a)^2) ∙cos(2*a)=(1-tan(a)^2)/(1+tan(a)^2) ∙tan(2*a)=2*tan(a)/(1-tan(a)^2) expect_that(sin(2*a),equals(2*tan(a)/(1+tan(a)^2))) expect_that((1-tan(a)^2)/(1+tan(a)^2),equals(cos(2*a))) expect_that(2*tan(a)/(1-tan(a)^2),equals(tan(2*a))) 平方差公式 ∙sin(a+b)*sin(a-b)=sin(a)^2+sin(b)^2 ∙cos(a+b)*cos(a-b)=cos(a)^2+sin(b)^2 expect_that(sin(a)^2-sin(b)^2,equals(sin(a+b)*sin(a-b))) expect_that(cos(a)^2-sin(b)^2,equals(cos(a+b)*cos(a-b))) 降次升角公式 ∙cos(a)^2=(1+cos(2*a))/2 ∙sin(a)^2=(1-cos(2*a))/2 expect_that((1+cos(2*a))/2,equals(cos
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 中的 数学 计算
![提示](https://static.bdocx.com/images/bang_tan.gif)