C++作业-不用库函数实现 导数

537 阅读1分钟

利用函数指针实现求导数,使用了导数定义,只要修改指针指向的函数,就能对不同函数求导

一元连续函数求导。

1)编写一个函数用于计算f(x)=sinxf(x)=sinx

2)编写一个函数用于计算f(x)=2x+1f(x)=2x+1

3)编写一个函数用于计算f(x)=11+exf(x)=\frac {1} {1+e^{-x}}(提示:使用exp函数)

4)定义一个函数指针类型,可以表示以上三个函数。

5)编写一个函数,计算任意一个一元连续函数f(x)f(x)在给定点处的导数f(x)f'(x)要求使用函数指针作为参数

(提示:f(x)f(x+δ)f(xδ)2δf'(x)\approx\frac {f(x+\delta)-f(x-\delta)} {2\delta}δ\delta是一个很小的数,比如10610^{-6}

关于typedef double (*pf)(const double);的解释: 定义一个函数指针pf,它指向的函数有一个double类型参数,返回值也是double类型。

#include <iostream>
#include <stdlib.h> 
#include <math.h>
using namespace std;
// 函数声明
typedef double (*pf)(const double);
double calcDerivative(pf,const double);
// 待处理函数
double f1(const double x){
	return sin(x);
}
double f2(const double x){
	return 2*x+1;
}
double f3(const double x){
	return 1 / (1 + exp(-x));
}
// 导数计算
double calcDerivative(pf f, const double x){
	double delta = 1.0 / 10000000;
	double num = (f(x + delta) - f(x - delta)) / (2 * delta);
	return num;
}

void main(){
	double num1 = calcDerivative(f1, 3.1415926);
	double num2 = calcDerivative(f2, 0);
	double num3 = calcDerivative(f3, 0);
	cout << "f1'(3.1415926) = " << num1 << endl;
	cout << "f2'(0) = " << num2 << endl;
	cout << "f3'(0) = " << num3 << endl;
	system("pause");
}

实验结果