基本原理
给定函数
f
(
x
)
f(x)
f(x),用
n
n
n 阶多项式
p
(
x
)
p\left( x \right)
p(x) 在
x
=
x
0
x=x_0
x=x0 邻域内,拟合该函数
f
(
x
)
f(x)
f(x)。将
p
(
x
)
p\left( x \right)
p(x) 表示为一般形式:
p
(
x
)
=
a
0
+
a
1
(
x
−
x
0
)
+
a
2
(
x
−
x
0
)
2
+
.
.
.
+
a
n
(
x
−
x
0
)
n
p\left( x \right) = {a_0} + {a_1}\left( {x - {x_0}} \right) + {a_2}{\left( {x - {x_0}} \right)^2} + ... + {a_n}{\left( {x - {x_0}} \right)^n}
p(x)=a0+a1(x−x0)+a2(x−x0)2+...+an(x−x0)n
设置
p
(
x
)
p\left( x \right)
p(x)与
f
(
x
)
f\left( x \right)
f(x)的前
n
n
n 阶导数在
x
=
x
0
x=x_0
x=x0 处相等,从而求解系数
a
0
,
a
1
,
a
2
,
.
.
.
,
a
n
a_0,a_1,a_2,...,a_n
a0,a1,a2,...,an,如下所示:
{
p
(
x
0
)
=
f
(
x
0
)
p
′
(
x
0
)
=
f
′
(
x
0
)
p
′
′
(
x
0
)
=
f
′
′
(
x
0
)
⋮
p
(
n
)
(
x
0
)
=
f
(
n
)
(
x
0
)
→
{
a
0
=
f
(
x
0
)
a
1
=
f
′
(
x
0
)
1
!
a
2
=
f
′
′
(
x
0
)
2
!
⋮
a
n
=
f
(
n
)
(
x
0
)
n
!
\left\{ {\begin{array}{c} {p\left( {{x_0}} \right) = f\left( {{x_0}} \right)}\\ {p'\left( {{x_0}} \right) = f'\left( {{x_0}} \right)}\\ {p''\left( {{x_0}} \right) = f''\left( {{x_0}} \right)}\\ \vdots \\ {{p^{\left( n \right)}}\left( {{x_0}} \right) = {f^{\left( n \right)}}\left( {{x_0}} \right)} \end{array}} \right. \to \left\{ {\begin{array}{c} {{a_0} = f\left( {{x_0}} \right)}\\ {{a_1} = \frac{{f'\left( {{x_0}} \right)}}{{1!}}}\\ {{a_2} = \frac{{f''\left( {{x_0}} \right)}}{{2!}}}\\ \vdots \\ {{a_n} = \frac{{{f^{\left( n \right)}}\left( {{x_0}} \right)}}{{n!}}} \end{array}} \right.
⎩
⎨
⎧p(x0)=f(x0)p′(x0)=f′(x0)p′′(x0)=f′′(x0)⋮p(n)(x0)=f(n)(x0)→⎩
⎨
⎧a0=f(x0)a1=1!f′(x0)a2=2!f′′(x0)⋮an=n!f(n)(x0)
从而得到
f
(
x
)
f\left( x \right)
f(x)在
x
=
x
0
x=x_0
x=x0处的
n
n
n阶泰勒展开表达式:
p
(
x
)
=
f
(
x
0
)
+
f
′
(
x
0
)
1
!
(
x
−
x
0
)
+
f
′
′
(
x
0
)
2
!
(
x
−
x
0
)
2
+
.
.
.
+
f
(
n
)
(
x
0
)
n
!
(
x
−
x
0
)
n
p\left( x \right) = f\left( {{x_0}} \right) + \frac{{f'\left( {{x_0}} \right)}}{{1!}}\left( {x - {x_0}} \right) + \frac{{f''\left( {{x_0}} \right)}}{{2!}}{\left( {x - {x_0}} \right)^2} + ... + \frac{{{f^{\left( n \right)}}\left( {{x_0}} \right)}}{{n!}}{\left( {x - {x_0}} \right)^n}
p(x)=f(x0)+1!f′(x0)(x−x0)+2!f′′(x0)(x−x0)2+...+n!f(n)(x0)(x−x0)n
三角函数的泰勒展开表达式
正弦函数
sin
(
x
)
\sin(x)
sin(x) 在
x
=
0
x = 0
x=0处的泰勒展开:
sin
(
x
)
=
x
−
x
3
3
!
+
x
5
5
!
−
x
7
7
!
+
⋯
\sin(x) = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!} + \cdots
sin(x)=x−3!x3+5!x5−7!x7+⋯
余弦函数
cos
(
x
)
\cos(x)
cos(x)在
x
=
0
x = 0
x=0处的泰勒展开:
cos
(
x
)
=
1
−
x
2
2
!
+
x
4
4
!
−
x
6
6
!
+
⋯
\cos(x) = 1 - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \cdots
cos(x)=1−2!x2+4!x4−6!x6+⋯
正切函数
tan
(
x
)
\tan(x)
tan(x)在
x
=
0
x = 0
x=0处的泰勒展开:
tan
(
x
)
=
x
+
x
3
3
+
2
x
5
15
+
17
x
7
315
+
⋯
\tan(x) = x + \frac{x^3}{3} + \frac{2x^5}{15} + \frac{17x^7}{315} + \cdots
tan(x)=x+3x3+152x5+31517x7+⋯
以正弦为例,对比不同阶次泰勒展开的拟合效果,如下所示:
三角函数泰勒展开效果对比,Matlab代码如下:
% MATLAB代码:比较不同阶数的泰勒多项式拟合效果
clc; clear; close all;
% 定义 x 范围
x = linspace(-pi, pi, 400);
% 原函数
f = @(x) sin(x);
% 泰勒展开的各阶数
n_values = [1, 3, 5, 7];
% 颜色设置
colors = {'r', 'g', 'b', 'm'};
figure;
hold on;
% 绘制原函数
plot(x, f(x), 'k', 'LineWidth', 2, 'DisplayName', 'sin(x)');
% 绘制不同阶数的泰勒多项式
for i = 1:length(n_values)
n = n_values(i);
p = taylor_series(f, n, 0);
plot(x, p(x), colors{i}, 'LineWidth', 1, 'DisplayName', ['n = ' num2str(n)]);
end
% 图示设置
legend show;
title('Comparison of Taylor Series Approximation for sin(x)');
xlabel('x');
ylabel('y');
grid on;
hold off;
% 泰勒展开多项式生成函数
function p = taylor_series(f, n, x0)
syms x;
p_sym = taylor(f(x), x, 'Order', n+1);
p = matlabFunction(p_sym);
end
指数函数的泰勒展开表达式
指数函数
e
x
e^x
ex 在
x
=
x
0
x = x_0
x=x0 处的泰勒展开:
e
x
=
e
x
0
+
e
x
0
(
x
−
x
0
)
+
e
x
0
(
x
−
x
0
)
2
2
!
+
e
x
0
(
x
−
x
0
)
3
3
!
+
⋯
e^x = e^{x_0} + e^{x_0}(x - x_0) + \frac{e^{x_0}(x - x_0)^2}{2!} + \frac{e^{x_0}(x - x_0)^3}{3!} + \cdots
ex=ex0+ex0(x−x0)+2!ex0(x−x0)2+3!ex0(x−x0)3+⋯
特别地,
e
x
e^x
ex 在
x
=
0
x = 0
x=0处的泰勒展开:
e
x
=
1
+
x
+
x
2
2
!
+
x
3
3
!
+
⋯
e^x = 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \cdots
ex=1+x+2!x2+3!x3+⋯
对比不同阶次泰勒展开的拟合效果,如下所示:
指数函数泰勒展开效果对比,Matlab代码如下:
% MATLAB代码:比较不同阶数的泰勒多项式拟合效果
clc; clear; close all;
% 定义 x 范围
x = linspace(-pi, pi, 400);
% 原函数
f = @(x) exp(x);
% 泰勒展开的各阶数
n_values = [1, 2, 3, 4];
% 颜色设置
colors = {'r', 'g', 'b', 'm'};
figure;
hold on;
% 绘制原函数
plot(x, f(x), 'k', 'LineWidth', 2, 'DisplayName', 'exp(x)');
% 绘制不同阶数的泰勒多项式
for i = 1:length(n_values)
n = n_values(i);
p = taylor_series(f, n, 0);
plot(x, p(x), colors{i}, 'LineWidth', 1, 'DisplayName', ['n = ' num2str(n)]);
end
% 图示设置
legend show;
title('Comparison of Taylor Series Approximation for exp(x)');
xlabel('x');
ylabel('y');
grid on;
hold off;
% 泰勒展开多项式生成函数
function p = taylor_series(f, n, x0)
syms x;
p_sym = taylor(f(x), x, 'Order', n+1);
p = matlabFunction(p_sym);
end