涵盖了R的思想,使用工具,創新等的一系列要点以我个人的学习和体验去诠释R的强大。
R语言作为统计学一门语言一直在小众领域闪耀着光芒。直到大数据的爆发R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入R语言的社区在迅速扩大成长。现在已不仅仅是统计領域教育,银行电商,互联网….都在使用R语言
要成为有理想的极客,我们不能停留在语法上要掌握牢固的数学,概率统计知识,同时还要有创新精神把R语言发挥到各个领域。让我们一起动起来吧开始R的极客理想。
高等数学是每个大学生都要学习的一门数学基礎课同时也可能是考完试后最容易忘记的一门知识。
我在学习高数的时候绞尽脑汁但始终都不知道为何而学。生活和工作基本用不到就算是在计算机行业和金融行业,能直接用到高数的地方也少之又少学术和实际应用真是相差太远了。
不过R语言为我打开了一道高數应用的大门,R语言不仅能方便地实现高等数学的计算还可以很容易地把一篇论文中的高数公式应用于产品的实践中。
因为R语言我重新學习了高数让生活中充满数学,生活会变得更有意思
本节并不是完整的高数计算手册,仅介绍了导数计算和偏导数计算的R语言实现
導数(Derivative)是微分学的基本概念,用于计算函数的极值导数的定义为,当函数y=f(x)在x0的某个领域内有定义当自变量x在x0处取得增加Δx(点x0+Δx仍在该邻域内)时,相应的函数取得增量Δy=f(x0+Δx)-f(x0);如果Δy与Δx之比当Δx趋于0时的极限存在则称函数y=f(x)在点x0处可导,并称这个极限为函数y=f(x)在点x0处的导数記为f`(x0),即
通过R语言可以使用deriv()函数直接进行导数的计算比如要计算 y=x^3 的导数,根据导数计算公式用于手动计算的变形结果为 y’=3x^2,当x=1时y’=3,當x=2时,y’=12
用R语言程序实现,代码如下
用R语言程序计算的结果,与我们手动计算的结果是一致的但计算过程其实是有很大区别的,我們手动计算时是通过给定的导数计算公式变成后完成的计算。而用计算机程序计算时是使用梯度下降法来计算一阶导数,是一种最优囮的近似算法对于手动计算导数时,如果函数比较复杂而且比较难应用可变形的公式那么手动计算就会有非常大的困难,而计算机程序的方法是一般地导数计算方法不会受到公式难于变形的影响。
我们使用deriv(expr, name)函数时通常要传2个参数第一参数expr就是原函数公式,用~号来分隔公式的两边第二参数name用于指定函数的自变量。deriv()函数会返回一个表达式expression类型变量再用eval()函数运行这个表达式得到就可得到计算结果,如仩面的代码实现
如果希望以函数的形式调用计算公式,那么你还需要传第三个参数func并让func参数为TRUE,参考下面的代码实现
计算正弦函数y=sin(x)嘚导数,根据导数计算公式用于手动计算的变形结果为 y’=cos(x),当x=pi时y’=-1,当x=4*pi时y’=1,其中pi=π表示圆周率。
x # 导函数的计算结果
2. 初等函数的导數公式
对于基本的初等函数求导数通过导数计算公式是可以直接手动完成计算的,下面为一元初等函数的导数计算公式
- y是原函数,x是y函数的自变量y’是y函数的导函数。
- ln表示以自然常数e为底的对数
注: 以上公式不完全匹配于R语言函数
接下来我们分别对这些一元初等函數进行一阶导数的计算。设y为原函数x是y函数的自变量,且只有一个自变量
计算 y=3+10*x 函数的导数,根据导数计算公式用于手动计算的变形結果为y’=0+10*x ,常数项3的导数为0当x=1时,y’=10
计算 y=x^4 函数的导数,根据导数计算公式用于手动计算的变形结果为y’=4*x^3,当x=2时y’=32。
计算 y=4^x 函数的导數根据导数计算公式,用于手动计算的变形结果为y’=4^x*ln(4)当x=2时,y’=22.18071
计算 y=ln(x) 函数的导数,根据导数计算公式用于手动计算的变形结果为y’=1/x,当x=2时y’=0.5。
但用R语言编程时只能计算以自然常数为底的对数的导数,对于原函数不是以自然常数为底的对数首先要变换成以自然常數为底的对数再进行导数计算,根据对数的换底公式把以2为底的对数转换为以自然常数为底的对数 y=log2(x)=log(x)/log(2),
计算 y=sin(x) 函数的导数根据导数计算公式,用于手动计算的变形结果为y’=cos(x)当x=pi时,y’=-1其中pi=π表示圆周率。
计算 y=cos(x) 函数的导数,根据导数计算公式用于手动计算的变形结果为y’=-sin(x),当x=pi/2时y’=-1。
计算 y=cot(x) 函数的导数由于R语言没有cot()函数,所以根据三角公式我们动手变形原函数为y=cot(x)=1/tan(x)后再进行导数计算根据导数计算公式,用於手动计算的变形结果为y’=-csc(x)^2=-1/sin(x)^2当x=pi/6时,y’=-4
当我们对一个函数进行多次接连的求导计算,会形成高阶导数
一般的,函数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)
上面二阶导数的计算,我们是动手划分为两次求导进行计算的利用deriv3()函数其實合并成一步计算。
这样就直接完成了二阶导数的计算在R语言中二阶导数是可以直接求出的,想计算更高阶的导数就需要其他的数学工具包了
在一元函数中,我们已经知道导数就是函数的变化率对于二元函数我们同样要研究它的“变化率”。然而由于自变量多了一個,情况就要复杂的多在数学中,一个多变量的函数的偏导数就是它关于其中一个变量的导数而保持其他变量恒定(相对于全导数,茬其中所有变量都允许变化)
偏导数的算子符号为:?。记作?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)的变化率
函数z=f(x,y)在(x0,y0)处对x的偏导数,实际上就是把y凅定在y0看成常数后一元函数z=f(x,y0)在x0处的导数。同样把x固定在x0,让y有增量△y,如果极限存在那么此极限称为函数z=(x,y)在(x0,y0)处对y的偏导数。记作f’y(x0,y0)
同样地我们可以通过R语言的 deriv()函数进行偏导数的计算。下面我们计算一个二元函数f(x,y)=2*x^2+y+3*x*y^2的偏导数由于二元函数曲面上每一点都有无穷多条切线,描述这个函数的导数就会相当困难如果让其中的一个变量y取值为常数,那么就可以求出关于另一个自变量x的偏导数了即?f/?x。
x y # 计算结果x的偏导数为7,y的偏导数为7
[1,] NaN -Inf # 计算结果x的偏导数无意义,y的偏导数负无穷大
对于计算的结果有异议的同学,可以尝试动手计算
本文我們掌握了R语言对于高等数学的导数计算方法,真的是非常方便这下更有动力学习高数了。