数与图(15)——求导数
在上篇《数与图(14)——微积分初步》中,我们介绍了微分、导数及积分的定义,有了定义,就可以根据定义推演出计算方法,本篇文章讨论导数的算法:首先用程序求解,然后给出数学上的标准解法。
在《数与图(9)——幂函数曲线》一文中,我们讨论了幂函数
并绘制了函数的曲线,本文及后续的几篇文章将继续以该函数为例,讨论相关的微积分计算方法,首先讨论导数的计算方法。
导数的定义是dy/dx,那么如何确定dy和dx的值呢?具体方法分四个步骤:
确定要计算的点D的x0坐标;
在x轴上x0的右边临近处找到一点x1,则有dx=x1-x0(注意x0与x1的顺序);
求x0和x1所对应的函数值y0和y1;
用(y1-y0)/dx得到D点的导数值(注意y0与y1的顺序)。
以上是根据导数的定义推演出的计算方法,为了计算方便,我们选定x0=1,设dx分别为1、0.1、0.01……1x10-9,并求出不同的dx下导数的值。显然,对人类来说,这样的计算任务即繁琐又乏味,而这恰好是计算机最擅长的工作。
一、导数的程序算法
本文要实现两个目标:
针对不同的dx,求出x=1处函数的导数值;
绘制幂函数曲线,并绘制函数曲线过D点的切线,设切线的方程为y=kx+b。
1、改造用户界面
将“画双曲线”项目另存为“微积分”,并将Screen1的标题设为“微积分初步”,在水平布局5中添加两个标签组件,设标签2的字号为12;隐藏原来的图片组件;在水平布局4中添加一个“幂函数按钮”,如图1所示。我们将用标签1来显示dx,用标签2来显示导数的计算结果。
图1 改造用户界面
另外,由于幂函数的函数值随|x|的增加而激增,因此,我们将x限定在[-2,2]区间内,这样y值就可以限定在-40与60之间。修改文本输入框中的绘图数据,如图1所示。
2、编写程序
(1)全局变量
声明一个全局变量“D点x”,设其初始值为1,如图2所示。
图2 声明全局变量
(2)有返回值过程
a、幂函数及一次函数
这两个过程只是简单地求函数值,给定一个x值,返回一个y值,其中一次函数还需指定参数k和b的值,代码如图3所示。
图3 有返回值过程:幂函数及一次函数
b、幂函数微分
这个过程体现了微分的定义。给定x0及dx,分别计算x0及x1(=x0+dx)所对应的y值,然后求两个y值的差,就得到了函数的微分值,代码如图4所示。
图4 有返回值过程——幂函数微分
(3)无返回值过程
a、求幂函数坐标列表
将绘图所需的数据预先保存在两个列表中,这样可以将计算和渲染隔离开来,提高处理速度。代码如图5所示。
图5 无返回值过程——求幂函数坐标列表
b、求直线坐标列表
理论上讲,画直线有两个点的坐标就足够了,因此下面的过程显然给出了几个多余的数据,可以将循环变量的增量改为“最大X-最小X”,来减少数据的冗余。代码如图6所示。
图6 无返回值过程——求直线坐标列表
(4)事件处理程序
为幂函数按钮编写点击事件处理程序,代码如图7所示。在这段程序中,首先绘制幂函数的曲线,然后针对x0=1的D点,利用循环语句逐渐减小dx的值(除以10),计算D点的导数值k,并将计算结果拼接成字串,最后求直线的坐标列表,并绘制曲线在D点的切线。
图7 幂函数按钮的点击事件处理程序
在图7中,在调用求直线坐标列表的过程时,利用了求直线方程的知识,即,已知直线斜率k及直线上一点(x0,y0),则可以根据y0=k*x0+b求出b值。
另外,在标签2的第一行中,显示了斜率k的反正切值,这是一个角度,它是曲线的切线与x轴之间的夹角。
3、测试
对上述程序进行测试,其结果如图8所示。
图8 程序的测试结果
仔细观察测试结果,可以得出如下结论:随着dx的减小,dy也随之减小,导数值逐渐收敛到64.525。值得怀疑的是α角的值,标签2中显示α=89.11211,这是一个接近于90度的角度,图中的切线应该近乎平行于y轴,但实际的切线显然不是,这是由于两个坐标轴的缩放比例有所不同。如果我们有足够大的坐标纸,让两个坐标轴的缩放比例保持相等,那么得到的就是一条方向正确的切线。
二、数学中的求导方法
在数学中,幂函数的求导有特定的方法:对于n次幂函数y=axn,其一阶导数为y’=naxn-1。
对于上述方法,有两点需要解释:
y’:通常用y’表示函数y的一阶导数。
一阶:对于n次幂函数而言,可以进行n+1次求导,每求导一次,“阶”数就增加1,例如,y’称作函数y的一阶导数,如果再对y’进行求导,就得到y的二阶导数y’’。
在《数与图(6)——多项式乘法》中,我们求得了式⑴的计算结果(图8)
1xxxxxx+1.1xxxxx-17.75xxxx-15.875xxx+68.375xx+34.9x-31.5
将其改写为我们熟悉的函数表达式
y=x6+1.1x5-17.75x4-15.875x3+68.375x2+34.9x-31.5
对上述函数求导,得到如下结果
y’=6x5+5.5x4-71x3-47.625x2+136.75x+34.9 ⑵
将x=1带入到⑵式中,得到y’=64.525。这个结果与程序求解的结果吻合。
以上我们分别用程序方法和数学的方法求解了幂函数在D点的导数,并绘制了函数的曲线,以及曲线在D点的切线。数学方法是冷冰冰的,结果是一丝不苟的;程序方法是生动有趣的,它更有助于我们对数学方法的理解和体会,虽然存在一定的误差。