本文章原创,转载请注明出处~
原理:如下图,若要求曲线在A点的导数,则选取另一点B,求AB的斜率,B越靠近A,则斜率越接近要求的导数值
因此,可以设计原型如下:
Design a Prototype: double derivative(Point*p,double accuracy)
以下我给出一份自写的sample code,已经过个人验证,可以参考试试~~
#include <stdio.h>
#include <math.h>
#define pi 3.1415926
typedef struct
{
double x_coordinate;
double(*func)(double)
}Point;
double derivative(Point*p,double accuracy);
int main()
{
Point p;
double slope;
p.x_coordinate = 0;
p.func = sin;
slope = derivative(&p,0.00001);
printf("%f\n", slope);
p.x_coordinate = pi/2;
p.func = sin;
slope = derivative(&p,0.00001);
printf("%f\n", slope);
p.x_coordinate = pi/4;
p.func = sin;
slope = derivative(&p,0.00001);
printf("%f\n", slope);
return 0;
}
double derivative(Point*p,double accuracy)
{
double y_coordinate;
double delta_x,delta_y;
delta_x=accuracy;
y_coordinate=p->func(p->x_coordinate);
delta_y=p->func(p->x_coordinate+delta_x)-y_coordinate;
return (double)(delta_y/delta_x);
}