求导数有两种,一种是表达式求导,一种是数值求导。
创新互联主营西秀网站建设的网络公司,主营网站建设方案,app软件定制开发,西秀h5成都小程序开发搭建,西秀网站营销推广欢迎西秀等地区企业咨询
表达式求导:需要对表达式进行词法分析,然后用常见的求导公式进行演算,求得导函数。在这方面,数学软件matrix,maple做得非常好。如果自己用C进行编程,不建议。
数值求导:利用导数的定义,用差分计算,当自变量趋于0时,前后两次差分收敛到需要精度,计算结束。这种方法可以求得某一点的导数。
例如:
求一阶导数,原函数 y = f(x), 程序中是float f(float x){ ...}
dx=0.01; //设 dx 初值
do{
dd1=(f(x0) - f(x0+dx))/dx; //计算导数dd1
dx = 0.5 * dx; // 减小步长
dd2=(f(x0) - f(x0+dx))/dx; //计算导数dd2
}while (fabs(dd1-dd2) = 1e-06) //判断新旧导数值之差是否满足精度,满足则得结果,不满足则返回
例如:
y=2+t^3
x=sint
则有:
y'=(dy/dt)/(dx/dt)
=3t^2/cost.
y''=(dy'/dt)/(dx/dt)
=(3t^2/cost)'/cost.
后面的步骤就不写了。
1、要有函数,设置成double类型的参数和返回值。
2、根据导数的定义求出导数,参数差值要达到精度极限,这是最关键的一步。根据导数的定义求出导数,参数差值要达到精度极限,这是最关键的一步。
用差分计算,当自变量趋于0时,前后两次差分收敛到需要精度,计算结束。
例如,一阶导数,写一个函数y=f(x):
floatf(floatx){...}
设dx初值
计算dy
dy=f(x0)-f(x0+dx);
导数初值
dd1=dy/dx;
Lab:;
dx=0.5*dx;//减小步长
dy=f(x0)-f(x0+dx);
dd2=dy/dx;//导数新值
判断新旧导数值之差是否满足精度,满足则得结果,不满足则返回
if(fabs(dd1-dd2)1e-06){得结果dd2...}
else{dd1=dd2;gotoLab;};
这是一个非常难而且非常复杂的问题,难点在于要把所有的导数类型都要考虑到,还要考虑到对哪些变量求导,还要解析复杂函数的表达式。 不是像手动求导那么简单的,建议你打消这个念头吧。
x'=1/y'
x"=(-y"*x')/(y')^2=-y"/(y')^3
将原函数进行二次求导。一般的,函数y=f(x)的导数y‘=f’(x)仍然是x的函数,则y’=f’(x)的导数叫做函数y=f(x)的二阶导数。在图形上,它主要表现函数的凹凸性。
如果一个函数f(x)在某个区间I上有f''(x)(即二阶导数)0恒成立,那么对于区间I上的任意x,y,总有:f(x)+f(y)≥2f[(x+y)/2],如果总有f''(x)0成立,那么上式的不等号反向。
几何的直观解释:如果一个函数f(x)在某个区间I上有f''(x)(即二阶导数)0恒成立,那么在区间I上f(x)的图象上的任意两点连出的一条线段,这两点之间的函数图象都在该线段的下方,反之在该线段的上方。
扩展资料:
结合一阶、二阶导数可以求函数的极值。当一阶导数等于0,而二阶导数大于0时,为极小值点。当一阶导数等于0,而二阶导数小于0时,为极大值点;当一阶导数和二阶导数都等于0时,为驻点。
设f(x)在[a,b]上连续,在(a,b)内具有一阶和二阶导数,那么,
(1)若在(a,b)内f''(x)0,则f(x)在[a,b]上的图形是凹的;
(2)若在(a,b)内f’‘(x)0,则f(x)在[a,b]上的图形是凸的。