什么是泰勒公式
百度百科是这样说的:如果函数f(x)在包含x0的某个闭区间[a,b]上具有n阶导数,且在开区间(a,b)上具有(n+1)阶导数,则对闭区间[a,b]上任意一点x,有下式成立:
泰勒公式的定义看起来气势磅礴,高端大气。但实际上我们用的最多的,是泰勒公式在0点的展开,即代入x0=0,写成:
代入具体函数,可以得到我们最熟悉的形式:
非0处的展开
首先对于最简单的e^x:
#include<stdio.h>
int main()
{
double sum = 0.0;
double next = 1.0;
double x;//选择令x为多少
scanf("%lf", &x);
for (int i = 1; i < 100000; i++) {
sum += next;
next = next * x / i;
}
printf("%.15lf", sum);
}
我们分别取三个值:0.1次方,1次方和10次方。
e^0.1次方
采用麦克劳林公式展开计算的程序结果:
还真就是一模一样。
同样的,计算e^x在x=1处的展开
原来,自然对数e除了下面这样的形式:
我们还可以得到另外一种形式:
然后是三角函数sinx
它的麦克劳林公式:
程序如下:
#include<stdio.h>
int main()
{
double sum = 0.0;
double x;//选择令x为多少
scanf("%lf", &x);
double next = x;
for (int i = 1; i < 100000; i++) {
if (i % 2)
sum += next;
else
sum -= next;
next = next * x *x/ (4.0*i*i+2.0*i);
}
printf("%.15lf", sum);
}
我输入pi/2 即3.14159…/2=1.5707963268…
程序结果返回1.0000…
与sin pi/2结果一致!
那么我们再测试一下2*pi即6.28318…
最后是对数函数
程序:
#include<stdio.h>
int main()
{
double sum = 0.0;
double x;//选择令x为多少
scanf("%lf", &x);
double next = x;
for (int i = 1; i < 100000; i++) {
sum += next;
next = next * (-1) * x * i / (i + 1.0);
}
printf("%.15lf", sum);
}
这里先试e^(1/2)-1,结果如下图所示,与实际符合
那么再试一下e-1
对于ln(1+x),只有在(-1,1]范围内麦克劳林公式成立。
具体可以参见无穷级数章节。
至于
可以回想一下高中所学的等比数列,自行归纳。