当前位置:首页 > 娱乐

正切函数的导数 R语言的导数计算

欢迎关注天山智能微信微信官方账号。我们是一个专注于商业智能、大数据和数据分析的垂直社区。对商业智能BI、大数据分析与挖掘、机器学习、python、R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入头条数据爱好者交流群,数据爱好者都在这里。

前言

高等数学是每个大学生的基础课,也可能是考试后最容易遗忘的知识。

我在研究高数的时候绞尽脑汁,却一直不知道自己为什么在研究。生活工作中基本不用。即使在计算机行业和金融行业,能直接使用高数的地方也是少之又少。学术和实际应用真的相差很远。

但是,R语言为我应用高数打开了一扇门。r语言不仅可以方便地实现高等数学的计算,而且可以很容易地将一篇论文中的高数公式应用到产品的实践中。

因为R语言,我重新学习了高数,让我的生活充满了数学,让我的生活更加有趣。

本节不是完整的高数计算手册,只介绍了导数计算和偏导数计算在R语言中的实现。

目录

导数计算初等函数的导数公式二阶导数计算偏导数计算 1. 导数计算

导数是微分学的基本概念,用来计算一个函数的极值。导数定义为:当函数y=f(x)在x0的某个域中定义时,当自变量x在x0处(点x0+δ x仍在邻域中)获得δ x时,对应的函数获得δy = f(x0+δx)-f(x0);如果δ x趋于0时存在δ y与δ x比值的极限,则函数y=f(x)在点x0处可导,这个极限称为函数y=f(x)在点x0处的导数,表示为f`(x0),即

也写成y'|x=x0,dy/dx|x=x0或df(x)/dx|x=x0。

用r语言,可以直接用deriv()函数计算导数。例如,要计算y = x ^ 3的导数,根据导数计算公式,手动计算的变形结果为y' = 3x ^ 2,x=1,y ' = 3,x=2,y'=12。

本节中的系统环境

Win7 64bitR: 3.1.1 x86_64-w64-mingw32/x64 (64-bit)

使用R语言编程,代码如下。

>。dx <。-德里夫(y ~ x^ 3,“x”);Dx #生成导数公式

表达式({

。价值<。- x^ 3

。grad <。- array( 0,c(长度(。值)、1L)、列表(空、c( "x "))

。grad[," x"] <。- 3* x^ 2

attr(。值,“梯度”)& lt- .毕业生

。价值

})

>。模式(dx) #查看dx变量类型

[ 1]“表达式”

>。x<。-1: 2#给自变量x赋值

>。Eval(dx) #运行导数计算

[1]18 #原始函数的计算结果

Attr(,“梯度”)#采用梯度下降法推导函数的计算结果

x

[ 1,] 3# x=1,dx=3*1^2=3

[ 2,] 12# x=2,dx=3*2^2=12

R语言程序计算的结果和我们手算的结果是一致的。但是,计算过程却大不相同。当我们手工计算时,通过给定的导数计算公式,就变成了一个完工后的计算。计算机程序计算时,采用梯度下降法计算一阶导数,这是一种优化的近似算法。手动计算导数时,如果函数比较复杂,难以应用可变形公式,那么手动计算会非常困难,而计算机程序的方法是一种通用的导数计算方法,不会受到公式变形难度的影响。

当我们使用deriv(expr,name)函数时,我们通常会传递两个参数,第一个参数expr是原函数公式,公式两边用~隔开,第二个参数名用来指定函数的自变量。deriv()函数会返回一个表达式类型变量,然后用eval()函数运行这个表达式得到计算结果,如上面的代码所实现的。

如果要以函数的形式调用计算公式,那么需要传递第三个参数func,并且让func参数为TRUE,参考下面的代码实现。

计算正弦函数y=sin(x)的导数。根据导数计算公式,人工计算的变形结果为y'=cos(x)。当x=pi,y ' =-1;当x=4*pi,y'=1时,其中pi=π表示pi。

>。dx <。- deriv(y ~ sin(x)," x ",func = TRUE);Dx #生成导数公式的调用函数

函数(x)

{

。价值<。- sin(x)

。grad <。- array( 0,c(长度(。值)、1L)、列表(空、c( "x "))

。grad[," x"] <。- cos(x)

attr(。值,“梯度”)& lt- .毕业生

。价值

}

>。模式(dx) #检查dx的类型

[ 1]“功能”

>。Dx(c(pi,4*pi)) #以参数为自变量,进行函数调用

[ 1] 1.224606e-16- 4.898425e-16

attr(,“梯度”)

x #导数函数的计算结果

[ 1,] - 1# x=pi,dx=cos(pi)=-1

[2,] 1# x=4*pi,dx=cos(4*pi)=12。初等函数的导数公式

对于计算导数的基本初等函数,可以通过导数计算公式直接手动进行计算。下面是一元初等函数的导数计算公式。

函数原函数的导函数

常数函数y=C y'= 0

幂函数y = x ny' = n * x (n-1)

指数函数y = a x y' = a x * ln (a)

y=exp(1)^x y'=exp(1)^x

对数函数y = log (x,base = a) y' = 1/(x * ln (a)) (a >: 0,a!=1,x>。0)

y=ln(x) y'=1/x

正弦函数y=sin(x) y'=cos(x)

余弦函数y=cos(x) y'=-sin(x)

正切函数y = tan(x)y’= sec(x)2 = 1/cos(x)2

共切线函数y = cot (x) y' =-CSC (x) 2 = 1/sin (x) 2

割线函数y=sec(x) y'=sec(x)*tan(x)

共割函数y=csc(x) y'=-csc(x)*cot(x)

反正弦函数y =反正弦(x)y’= 1/sqrt(1-x ^ 2)

反余弦函数y = arccos (x) y' =-1/sqrt (1-x 2)

反正切函数y =反正切(x)y’= 1/(1+x ^ 2)

反余切函数y = arccot(x)y ' =-1/(1+x ^ 2)

反正切函数y = arcsec(x)y ' = 1/ABS(x)*(x ^ 2-1)

函数y = arc CSC(x)y ' =-1/ABS(x)*(x ^ 2-1)

对公式的评论:

y是原函数,x是y函数的自变量,y’是y函数的导函数。C,n,a为常数。ln表示以自然常数e为底的对数exp(1)表示自然常数elog(x,base=a)表示,以常数a为底的对数sqrt表示开平方abs表示绝对值正割函数sec,计算方法为 sec=1/cos(x)余割函数csc,计算方法为 csc=1/sin(x)余切函数cot,计算方法为 cot=1/tan(x)

注意:以上公式与R语言函数不完全匹配

接下来,我们计算这些一元初等函数的一阶导数。设y为原函数,x为只有一个自变量的y函数的自变量。

常数函数

计算y=3+10*x函数的导数。根据导数计算公式,人工计算的变形结果为y'=0+10*x,常数项3的导数为0,当x=1时,y'=10。

>。dx<。-deriv (y ~ 3+10 * x,“x”,func = true) #生成函数形式的导数公式

>。Dx( 1) #传入自变量并计算

[1] 13#原始函数计算结果y=3+10*1=13

attr(,“梯度”)

x

[1,] 10#导数函数计算结果y'=10*1=10

幂函数

计算函数y = x ^ 4的导数。根据导数计算公式,人工计算的变形结果为y' = 4 * x 3。当x=2时,y'=32。

>。dx<。-deriv(y~x^ 4,“x”,func = TRUE)

>。dx( 2)

[ 1] 16

attr(,“梯度”)

x

[1,]导函数# 32 y '的计算结果= 4 * x 3 = 4 * 2 3 = 32

指数函数

计算y = 4 x函数的导数。根据导数计算公式,人工计算的变形结果为y′= 4×ln(4)。当x=2时,y'=22.18071。

>。dx<。-德里夫(y~ 4^x,“x”,func = TRUE)

>。dx( 2)

[ 1] 16

attr(,“梯度”)

x

[1,] 22.18071#导数函数计算结果y ' = 4 x * log(4)= 4 * 2 ^ 3 = 22.18071

计算y = exp (1) x函数的导数。根据导数计算公式,人工计算的变形结果为y' = exp (1) x,当x=2时,y'=y=7.389056。

>。dx<。-deriv(y~exp( 1)^x,“x”,func = TRUE)

>。dx( 2)

[ 1] 7.389056

attr(,“梯度”)

x

[1,] 7.389056#导函数计算结果y' = exp (1) x = exp (1) 2 = 7.389056

对数函数

计算函数y=ln(x)的导数。根据导数计算公式,人工计算的变形结果为y'=1/x,当x=2时,y'=0.5。

>。dx<。-deriv(y~log(x)," x ",func = TRUE)

>。dx( 2)

[ 1] 0.6931472

attr(,“梯度”)

x

[1,] 0.5#导数函数计算结果y'=1/x=1/2=0.5

计算函数y=log2(x)的导数。根据导数计算公式,人工计算的变形结果为y'=1/(x*log(2))。当x=3时,y'=0.4808983。

但是用R语言编程时,只能根据自然常数计算对数的导数。如果原函数不是基于自然常数的对数,那么首先要将其转化为基于自然常数的对数,然后再计算导数。根据对数代入公式,将基于2的对数转化为基于自然常数y=log2(x)=log(x)/log(2)的对数。

>。dx<。-deriv(y~ log(x)/ log( 2)," x ",func = TRUE)

>。dx( 3)

[ 1] 1.584963

attr(,“梯度”)

x

[1,] 0.4808983#导函数计算结果y ' = 1/(x * log(2)= 1/(3 * log(2)= 0.4808983。

正弦函数

计算函数y=sin(x)的导数。根据导数计算公式,人工计算的变形结果为y'=cos(x)。当x=pi,y'=-1,其中pi=π代表pi。

>。dx<。-deriv(y~sin(x)," x ",func = TRUE)

>。dx(pi)

[ 1] 1.224606e-16

attr(,“梯度”)

x

[1,]-1#导数函数计算结果y'=cos(x)=cos(pi)=-1

余弦函数

计算函数y=cos(x)的导数。根据导数计算公式,人工计算的变形结果为y'=-sin(x),当x=pi/2时,y'=-1。

>。dx<。-deriv(y~cos(x)," x ",func = TRUE)

>。dx(pi/ 2)

[ 1] 6.123032e-17

attr(,“梯度”)

x

[1,]-1#导数函数计算结果y'=-sin(x)=-sin(pi/2)=-1

正切函数

计算y=tan(x)函数的导数。根据导数计算公式,人工计算的变形结果为y' = sec (x) 2 = 1/cos (x) 2,当x=pi/6时,y' = 1.33333。

>。dx<。-deriv(y~tan(x)," x ",func = TRUE)

>。dx(pi/ 6)

[ 1] 0.5773503

attr(,“梯度”)

x

[1,] 1.333333#导数函数计算结果y ' = 1/cos(x)2 = 1/cos(pi/6)2 = 1.333333

余切函数

计算y=cot(x)函数的导数。由于R语言中没有cot()函数,我们根据三角公式手工将原函数变形为y=cot(x)=1/tan(x),然后计算导数。根据导数计算公式,人工计算的变形结果为Y' =-CSC (x) 2 =-1/sin

>。dx<。-deriv(y~ 1/tan(x)," x ",func = TRUE)

>。dx(pi/ 6)

[ 1] 1.732051

attr(,“梯度”)

x

[1,]-4#导数函数计算结果y' =-1/sin (x) 2 =-1/sin (pi/6) 2 =-4

反正弦

计算函数y=asin(x)的导数。根据导数计算公式,人工计算的变形结果为y' = 1/sqrt (1-x 2)。当x=pi/6,y'=1.173757。

>。dx<。-deriv(y~asin(x)," x ",func = TRUE)

>。dx(pi/ 6)

[ 1] 0.5510696

attr(,“梯度”)

x

[1,] 1.173757#导数函数计算结果y ' = 1/sqrt(1-x 2)= 1/sqrt(1-(pi/6)2)= 1.173757

反余弦函数

计算y=acos(x)函数的导数。根据导数计算公式,人工计算的变形结果为y' =-1/sqrt (1-x 2),当x=pi/8时,y'=-1.08735。

>。dx<。-deriv(y~acos(x)," x ",func = TRUE)

>。dx(pi/ 8)

[ 1] 1.167232

attr(,“梯度”)

x

[1,]-1.08735#导数函数计算结果y ' =-1/sqrt(1-x 2)=-1/sqrt(1-(pi/8)2)=-1.08735

反正切

计算y=atan(x)函数的导数。根据导数计算公式,人工计算的变形结果为y ' = 1/(1+x ^ 2),当x=pi/6时,y'=0.7848335。

>。dx<。-deriv(y~atan(x)," x ",func = TRUE)

>。dx(pi/ 6)

[ 1] 0.4823479

attr(,“梯度”)

x

[1,] 0.7848335#导数函数计算结果y ' = 1/(1+x ^ 2)= 1/(1+(pi/6)2)= 0.78483353。二阶导数计算

当我们连续几次计算一个函数的导数时,就会形成高阶导数。

一般函数y=f(x)的导数y'=f'(x)仍然是x的函数,所以我们称导数y'=f'(x)为函数y=f(x)的二阶导数,记为y”,即。

一阶导数的导数叫二阶导数,二阶导数的导数叫三阶导数,N-1阶导数的导数叫N阶导数,习惯上把二阶以上的导数叫高阶导数。

例如,计算函数y=sin(a*x)的二阶导数y”,其中a为常数。根据导数计算公式,人工计算的变形结果是一阶导数为y'=a*cos(a*x),y '的导数公式变形为y " =-a ^ 2 * sin(a * x)

用R语言实现程序

>。a<。-2#设置a的值

>。dx<。-deriv (y ~ sin (a * x)," x ",func = true) #生成一阶导数公式

>。Dx(pi/ 3) #计算一阶导数

[ 1] 0.8660254

attr(,“梯度”)

x

[1,]-1#导数函数计算结果y'= a*cos(a*x)=2*cos(2*pi/3)=-1

>。dx<。-deriv (y ~ a * cos (a * x)," x ",func = true) #导出一阶导数函数

>。dx(pi/ 3)

[ 1] - 1

attr(,“梯度”)

x

[1,]-3.464102#导数函数计算结果y ' =-a 2 * sin(a * x)=-2 2 * sin(2 * pi/3)=-3.464102

上面二阶导数的计算是手工分两次求导,实际上是利用deriv3()函数合并成一步计算。

>。dx<。-deriv3 (y ~ sin (a * x)," x ",func = true) #生成二阶导数公式

>。Dx(pi/ 3) #计算导数

[ 1] 0.8660254

attr(,“梯度”)

x

[1,]-1#的一阶导数结果

attr(," hessian ")

,,x

x

[1,]-3.464102#二阶导数结果

我们计算另一个二阶导数,计算y = a * x 4+b * x 3+x 2+x+c,其中a、b和c是常数a = 2、b = 1和c = 3。

根据导数计算公式,人工计算的变形结果为y ' = 2 * x 4+x 3+x 2+x 3 = 4 * 2 * x 3+3 * x 2+2 * x+1,当x=2时,y'=81。

y '的导数公式变形为:y "= 3 * 4 * 2 * x 2+2 * 3 * x+2,当x=2时,y" = 110。

>。dx<。-deriv3 (y ~ a * x 4+b * x 3+x 2+x+c," x ",func = function (x,a = 2,b = 1,c = 3) {}) #通过func参数指定一个常数值

>。dx( 2)

[ 1] 49

attr(,“梯度”)

x

[1,]81的一阶导数结果

attr(," hessian ")

,,x

x

[1,] 110#的二阶导数结果

这样可以直接计算二阶导数。在R语言中,可以直接计算二阶导数。如果要计算高阶导数,需要其他数学工具包。

4.偏导数计算

在一元函数中,我们已经知道导数是函数的变化率。对于二元函数,也要研究它的“变化率”。但是因为多了一个自变量,情况就复杂多了。在数学中,多元函数的偏导数是它相对于一个变量的导数,同时保持其他变量不变(相对于全导数,其中所有变量都允许变化)。

偏导数的运算符符号是:。写成f/x或f’x,偏导数反映了函数沿坐标轴正方向的变化率,在向量分析和微分几何中非常有用。

在xOy平面上,当运动点从P(x0,y0)向不同方向变化时,函数f(x,y)的变化速度一般是不一样的,所以需要研究f(x,y)在(x0,y0)向不同方向的变化率。这里只学习函数f(x,y)在x0y平面内沿平行于x0y轴和y轴的两个特殊方向变化时f(x,y)的变化率。

x方向的偏导数:

有一个二元函数z=f(x,y),点(x0,y0)是其定义域d中的一个点,y固定在y0,x在x0有一个增量△ x,所以函数z=f(x,y)有一个增量(称为对x的部分增量)△ z = f (x0+△ x,y0)如果△x→0时△ z与△x之比的极限存在,那么这个极限值称为函数z =的偏导数写成f'x(x0,y0)。

y方向的偏导数:

函数z=f(x,y)到x at (x0,y0)的偏导数,实际上是y作为常数固定在y0后,一元函数z=f(x,y0)在x0的导数。同理,x固定在x0,所以y有增量△ y,如果极限存在,这个极限叫做函数z=(x,y)到y在(x0,y0)的偏导数。写成f'y(x0,y0)

同理,我们可以通过R语言中的deriv()函数来计算偏导数。接下来,我们计算二元函数f (x,y) = 2 * x 2+y+3 * x * y 2的偏导数。因为二元函数曲面上的每一点都有无穷多条切线,所以很难描述这个函数的导数。如果其中一个变量y给定值,就可以得到另一个变量x的偏导数,即f/x。

我们先求出两个自变量X和Y的偏导数,让变量Y为常数,计算偏导数f/X = 4 * X+3 * Y ^ 2。当x = 1且y = 1时,偏导数f/x = 4 * x+3 * y 2 = 7。以变量x为常数,计算偏导数f/y = 1+6 * x * y,当x = 1且y = 1时,偏导数f/x = 1+6 * x * y = 7。

用r语言程序实现。

>。Fxy =表达式(2 * x 2+y+3 * x * y 2) #二元函数公式

>。dxy = deriv(fxy,c( "x "," y "),func = TRUE)

>。丁香医生

函数(x,y){

. expr4 & lt- 3* x

. expr5 & lt- y^ 2号

。价值<。- 2* x^ 2+ y + .expr4 * .expr5

。grad <。- array( 0,c(长度(。值)、2L)、列表(NULL、c( "x "、" y "))

。grad[," x"] <。-2 *(2 * x)+3 * expr 5

。grad[," y"] <。- 1+ .expr4 * ( 2* y)

attr(。值,“梯度”)& lt- .毕业生

。价值

}

>。Dxy( 1,1) #设置自变量

[ 1] 6

attr(,“梯度”)

根据x y #的计算结果,X的偏导数为7,Y的偏导数为7

[ 1,] 77

偏导数的计算结果与人工计算结果一致。我们先求复变函数的偏导数,计算二元函数f (x,y)= x y+exp(x * y)+x ^ 2–2 * x * y+y ^ 3+sin(x * y)在点(1,3)和(0,0)处的偏导数。

r语言程序的实现。

>。fxy = expression(x^y+exp(x * y)+x^ 2-2 * x * y+y^ 3+sin(x * y))

>。dxy = deriv(fxy,c( "x "," y "),func = TRUE)

>。Dxy( 1,3) #设置自变量

[ 1] 43.22666

attr(,“梯度”)

x y

[1,] 56.2866344.09554#,x的偏导数是56.28663,y的偏导数是44.0956。

>。dxy( 0,0)

[ 1] 2

attr(,“梯度”)

x y

[1,] NaN -Inf #计算结果表明,x的偏导数无意义,y的偏导数为负无穷

对于计算结果,不同意的同学可以尝试手工计算。

本文中我们掌握了高等数学R语言的导数计算方法,确实非常方便,学习高数更有动力。

作者简介:

张丹,R语言中文社区专栏特约作者,“R的极客理想”系列丛书作者,民生银行大数据中心数据分析师,前嘉宾创始人兼CTO。

10年IT编程背景,精通R、Java、Nodejs编程,获得10项SUN和IBM技术认证。丰富的互联网应用开发架构经验,金融大数据专家。个人博客,Alexa世界排名70k。

《R的极客理想-工具》《R的极客理想-高级开发》的作者,《数据实践之美》的合著者,新书《R的极客理想-量化投资》(即将出版)。

“极客的理想工具”JD.COM买快车道:

“极客的理想——高级开发”JD.COM买快车道:

数据实践之美JD.COM买快车道;

转载请保留以下内容:

本文来源于天山社区张丹老师的博客(微信官方账号)。

原始链接:

1.《正切函数的导数 R语言的导数计算》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《正切函数的导数 R语言的导数计算》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/yule/789972.html

上一篇

封建社会是什么意思 石女是什么意思,古代封建社会视为不详

下一篇

秦时明月演员表 电视剧《秦时明月》定妆照曝光 陆毅陈妍希领衔主演

德育论文 【特别关注】2017年度全省中小学德育论文评选结果公布 快来看看有没有你的老师

  • 德育论文 【特别关注】2017年度全省中小学德育论文评选结果公布 快来看看有没有你的老师
  • 德育论文 【特别关注】2017年度全省中小学德育论文评选结果公布 快来看看有没有你的老师
  • 德育论文 【特别关注】2017年度全省中小学德育论文评选结果公布 快来看看有没有你的老师

男子年会中奖“清空购物车” 结果老板后悔了:购物车里有套房

  • 男子年会中奖“清空购物车” 结果老板后悔了:购物车里有套房
  • 男子年会中奖“清空购物车” 结果老板后悔了:购物车里有套房
  • 男子年会中奖“清空购物车” 结果老板后悔了:购物车里有套房

孩子高烧39.8℃需等核酸结果才能打针?看完卫健委回应 网友怒了

  • 孩子高烧39.8℃需等核酸结果才能打针?看完卫健委回应 网友怒了
  • 孩子高烧39.8℃需等核酸结果才能打针?看完卫健委回应 网友怒了
  • 孩子高烧39.8℃需等核酸结果才能打针?看完卫健委回应 网友怒了

司马懿孙子称帝了吧 司马懿篡权后,曹操仍在世的儿子中仅有1人反抗,最终结果如何?

  • 司马懿孙子称帝了吧 司马懿篡权后,曹操仍在世的儿子中仅有1人反抗,最终结果如何?
  • 司马懿孙子称帝了吧 司马懿篡权后,曹操仍在世的儿子中仅有1人反抗,最终结果如何?
  • 司马懿孙子称帝了吧 司马懿篡权后,曹操仍在世的儿子中仅有1人反抗,最终结果如何?

泰有趣 省里来泰州暗访检查!结果是……

  • 泰有趣 省里来泰州暗访检查!结果是……
  • 泰有趣 省里来泰州暗访检查!结果是……
  • 泰有趣 省里来泰州暗访检查!结果是……
楼盘降价引发纠纷 又是陷阱!价值上千万的房子挂价750万,上海男子将同一套房“卖”给了4人,结果...

楼盘降价引发纠纷 又是陷阱!价值上千万的房子挂价750万,上海男子将同一套房“卖”给了4人,结果...

每个编辑:王新如何将一套房子同时“卖给”四个人?为什么买家愿意出大价钱?表面上看,占大便宜的东西往往有大坑……图片来源:照片网据最高人民检察院4日官方消息,在不到一年的时间里,上海市某打着“卖房”的旗号与四人签订购房合同,骗取购房款1000多万元...近日,该案被上...

广西一摩托车司机朝流浪女喷尾气取乐 警方通报处理结果

  • 广西一摩托车司机朝流浪女喷尾气取乐 警方通报处理结果
  • 广西一摩托车司机朝流浪女喷尾气取乐 警方通报处理结果
  • 广西一摩托车司机朝流浪女喷尾气取乐 警方通报处理结果

大猫会咬死新来小猫吗 以为新来小猫会被大猫欺负,结果它的一个举动,让全家笑翻

  • 大猫会咬死新来小猫吗 以为新来小猫会被大猫欺负,结果它的一个举动,让全家笑翻
  • 大猫会咬死新来小猫吗 以为新来小猫会被大猫欺负,结果它的一个举动,让全家笑翻
  • 大猫会咬死新来小猫吗 以为新来小猫会被大猫欺负,结果它的一个举动,让全家笑翻