R的极客理想-中学数学 导数 概率 连续分布-R语言(6)

2019-04-21 18:39

反三角函数画图

# 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(\> 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(a)^2))

expect_that((1-cos(2*a))/2,equals(sin(a)^2))

辅助角公式

?

a*sin(a)+b*cos(a) = sqrt(a^2+b^2)*sin(a+atan(b/a))

expect_that(sqrt(a^2+b^2)*sin(a+atan(b/a)),equals(a*sin(a)+b*cos(a)))

3 复数计算

复数,为实数的延伸,它使任一多项式都有根。复数中的虚数单位i,是-1的一个平方根,即i^2 = -1。任一复数都可表达为x + yi,其中x及y皆为实数,分别称为复数之“实部”和“虚部”。 3.1 创建一个复数

# 直接创建复数 > ai<-5+2i;ai [1] 5+2i > class(ai) [1] \

# 通过complex()函数创建复数

> bi<-complex(real=5,imaginary=2);bi [1] 5+2i

> is.complex(bi) [1] TRUE

# 实数部分 > Re(ai) [1] 5

# 虚数部分 > Im(ai) [1] 2 # 取模 > Mod(ai)

[1] 5.385165 # sqrt(5^2+2^2) = 5.385165

# 取辐角 > Arg(ai) [1] 0.3805064 # 取轭 > Conj(ai) [1] 5-2i

3.2 复数四则运算

? ? ?

加法公式:(a+bi)+(c+di) = (a+c)+(b+d)i 减法公式:(a+bi)-(c+di)= (a-c)+(b-d)i

乘法公式:(a+bi)(c+di) = ac+adi+bci+bidi=ac+bdi^2+(ad+bc)i=(ac-bd)+(ad+bc)i

?

除法公式:(a+bi)/(c+di) = ((ac+bd)+(bc-ad)i)/(c^2+d^2)

# 定义系数

a<-5;b<-2;c<-3;d<-4

# 创建两个复数

ai<-complex(real=a,imaginary=b) bi<-complex(real=c,imaginary=d)

expect_that(complex(real=(a+c),imaginary=(b+d)),equals(ai+bi)) expect_that(complex(real=(a-c),imaginary=(b-d)),equals(ai-bi))

expect_that(complex(real=(a*c-b*d),imaginary=(a*d+b*c)),equals(ai*bi))

expect_that(complex(real=(a*c+b*d),imaginary=(b*c-a*d))/(c^2+d^2),equals(ai/bi))

3.3 复数开平方根

# 在实数域,给-9开平方根 > sqrt(-9) [1] NaN

# 在复数域,给-9开平方根 > sqrt(complex(real=-9)) [1] 0+3i

4 方程计算

方程计算是数学计算的一种基本形式,R语言也可以很方便地帮助我们解方程,下面将介绍一元多次的方程,和二元一次方程的解法。 解一元多次方程,可以用uniroot()函数! 4.1 一元一次方程

一元一次方程:a*x+b=0,设a=5,b=10,求x?

# 定义方程函数

> f1 <- function (x, a, b) a*x+b

# 给a,b常数赋值 > a<-5;b<-10

# 在(-10,10)的区间,精确度为0.0001位,计算方程的根

> result <- uniroot(f1,c(-10,10),a=a,b=b,tol=0.0001)

# 打印方程的根x > result$root [1] -2

一元一次方程非常容易解得,方程的根是-2! 以图形展示方程:y = 5*x + 10


R的极客理想-中学数学 导数 概率 连续分布-R语言(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:煤矿通风机设备安装工程施工组织设计#河南

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: