R语言中的数学计算Word文件下载.docx
《R语言中的数学计算Word文件下载.docx》由会员分享,可在线阅读,更多相关《R语言中的数学计算Word文件下载.docx(24页珍藏版)》请在冰豆网上搜索。
![R语言中的数学计算Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-12/8/0e669cc3-fed4-458f-bf27-ac620a27d9d6/0e669cc3-fed4-458f-bf27-ac620a27d9d61.gif)
#自然常数e
exp
(1)
[1]2.718282
#自然常数e的幂
exp(3)
[1]20.08554
#平方根
sqrt(c)
#以2为底的对数
log2(c)
#以10为底的对数
log10(b)
[1]0.69897
#自定义底的对数
log(c,base=2)
#自然常数e的对数
log(a,base=exp
(1))
[1]2.302585
#指数对数操作
log(a^b,base=a)
log(exp(3))
[1]3
比较计算:
==,>
<
!
=,<
=,>
=,isTRUE,identical
#比较计算
a==a;
a!
=b;
a>
b;
a<
=c
[1]TRUE
[1]FALSE
#判断是否为TRUE
isTRUE(a)
isTRUE(!
a)
#精确比较两个对象
identical(1,as.integer
(1))
identical(NaN,-NaN)
f<
-function(x)x
g<
-compiler:
:
cmpfun(f)
identical(f,g)
<
/b;
逻辑计算:
&
|,&
||,xor
x<
-c(0,1,0,1)
y<
-c(0,0,1,1)
#只比较第一个元素&
||
x&
y;
x||y
#S4对象的逻辑运算,比较所有元素&
|
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)
#取整数
trunc(3.9)
#四舍五入
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
#加权平均
weighted.mean(d,rep(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)
#分位数
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)
排列组合计算:
阶乘,组合,排列
#5!
阶乘
factorial(5)
#组合,从5个中选出2个
choose(5,2)
#列出从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]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:
[1]1361015
#累乘
cumprod(1:
[1]12624120
#最小累积cummin
cummin(e)
[1]-3-3-3-3-3-3-3
#最大累积cummax
cummax(e)
两个数组计算:
交集,并集,差集,数组是否相等,取唯一,查匹配元素的索引,找重复元素索引
#定义两个数组向量
x<
-c(9:
20,1:
5,3:
7,0:
8);
x
[1]9101112131415161718192012345
[18]34567012345678
-1:
10;
y
[1]12345678910
#交集
intersect(x,y)
[1]91012345678
#并集
union(x,y)
[18]6708
#差集,从x中排除y
setdiff(x,y)
[1]111213141516171819200
#判断是否相等
setequal(x,y)
#取唯一
unique(c(x,y))
#找到x在y中存在的元素的索引
which(x%in%y)
[1]12131415161718192021222425262728
[18]293031
which(is.element(x,y))
#找到重复元素的索引
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.841471
#余弦
cos(0);
cos
(1);
cos(pi)
[1]0.5403023
[1]-1
#正切
tan(0);
tan
(1);
tan(pi)
[1]1.557408
[1]-1.224647e-16
接下来,我们用ggplot2包来画出三角函数的图形。
#加载ggplot2的库
library(ggplot2)
library(scales)
三角函数画图
#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+geom_line(aes(colour=type,stat='
identity'
))
-g+scale_y_continuous(limits=c(0,2))
-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<
=pi,
arctan(x)=ytan(y)=x-pi/2<
y<
pi/2
arccsc(x)=ycsc(y)=x-pi/2<
=pi/2,y!
=0
arcsec(x)=ysec(y)=x0<
=pi,y!
=pi/2
arccot(x)=ycot(y)=x0<
pi
反正弦,反余弦,反正切
#反正弦asin
asin(0);
asin
(1)
[1]1.570796#pi/2=1.570796
#反余弦acos
acos(0);
acos
(1)
#反正切atan
atan(0);
atan
(1)
[1]0.7853982#pi/4=0.7853982
反三角函数画图
-seq(-1,1,by=0.005)
-data.frame(x,y=asin(x),type=rep('
arcsin'
length(x)))
-data.frame(x,y=acos(x),type=rep('
arccos'
-data.frame(x,y=atan(x),type=rep('
arctan'
-data.frame(x,y=1/atan(x),type=rep('
arccot'
-data.frame(x,y=1/asin(x),type=rep('
arcsec'
-data.frame(x,y=1/acos(x),type=rep('
arccsc'
-g+scale_y_continuous(limits=c(-2*pi,2*pi),breaks=seq(-2*pi,2*pi,by=pi),labels=c("
2.3三角函数公式
接下来,用单元测试的方式,来描述三角函数的数学公式。
通过testthat包,进行单元测试,关于testthat包的安装和使用,请参考文章:
在巨人的肩膀前行催化R包开发
#加载testthat包
library(testthat)
#定义变量
-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