帕德近似,原理与Matlab实现,指数函数的Pade近似
帕德近似,原理与Matlab实现,指数函数的Pade近似
帕德近似(Padé approximation)是一种有理函数逼近方法,用于近似给定的函数。与泰勒级数展开不同,帕德近似使用有理分式来逼近函数,通常能够提供更好的近似效果,特别是在函数的某些特殊点附近。
基本原理
帕德近似的基本形式如下所示(以零点为邻域):
$$
R_{m,n}(x) = \frac{p(x)}{q(x)} = \frac{p_0 + p_1 x + p_2 x^2 + \cdots + p_m x^m}{1 + q_1 x + q_2 x^2 + \cdots + q_n x^n}
$$
其中,$p(x)$和$q(x)$分别为$m$阶和$n$阶多项式,$R_{m,n}(x)$也被称作$f(x)$的$[m,n]$阶帕德近似。注意,$q(x)$的常数项为1。
求解方法1
利用$R_{m,n}(x)$和$f(x)$在$x=0$处,前$m+n$阶导数与$f(x)$对应项相等,求解帕德近似的系数:
$$
\begin{cases}
R_{m,n}(x_0) = f(x_0) \
R'{m,n}(x_0) = f'(x_0) \
R''{m,n}(x_0) = f''(x_0) \
\vdots \
R^{(m+n)}_{m,n}(x_0) = f^{(m+n)}(x_0)
\end{cases}
\to
\begin{cases}
p_0, p_1, p_2, \ldots, p_m \
q_1, q_2, \ldots, q_n
\end{cases}
$$
示例:求解$f(x) = e^x$的$[1,1]$阶帕德近似:
$$
\begin{cases}
R_{1,1}(0) = \frac{p_0 + p_1 x}{1 + q_1 x} = \frac{p_0}{1} = 1 \
R'{1,1}(0) = \frac{p_1 - p_0 q_1}{(1 + q_1 x)^2} = \frac{p_1 - p_0 q_1}{(1)^2} = 1 \
R''{1,1}(0) = \frac{-2(p_1 - p_0 q_1)(1 + q_1 x)q_1}{(1 + q_1 x)^2} = \frac{-2(p_1 - p_0 q_1)q_1}{(1)^2} = 1
\end{cases}
\to
\begin{cases}
p_0 = 1 \
p_1 = 0.5 \
q_1 = -0.5
\end{cases}
$$
于是,$f(x) = e^x$的$[1,1]$阶帕德近似表达式为:
$$
R_{1,1}(x) = \frac{1 + 0.5x}{1 - 0.5x}
$$
求解方法2
利用$f(x)$在$x=0$处,$m+n$阶泰勒展开表达式,求解帕德近似$R_{m,n}(x)$的系数:
$$
\begin{cases}
f(x) = p(x) + O(x^{m+n}) = f(0) + \frac{f'(0)}{1!}x + \frac{f''(0)}{2!}x^2 + \cdots + \frac{f^{(m+n)}(0)}{n!}x^{m+n} + O(x^{m+n}) \
f(x) = R_{m,n}(x) + O(x^{m+n}) = \frac{p_0 + p_1 x + p_2 x^2 + \cdots + p_m x^m}{1 + q_1 x + q_2 x^2 + \cdots + q_n x^n} + O(x^{m+n})
\end{cases}
$$
示例:求解$f(x) = e^x$的$[1,1]$阶帕德近似:
$$
\begin{cases}
e^x = 1 + x + \frac{1}{2}x^2 + O(x^2) \
e^x = \frac{p_0 + p_1 x}{1 + q_1 x} + O(x^2)
\end{cases}
\to
\begin{cases}
1 + x + 0.5x^2 = \frac{p_0 + p_1 x}{1 + q_1 x} + O(x^2) \
\to 1 + (1 + q_1)x + (0.5 + q_1)x^2 = p_0 + p_1 x + O(x^2) \
\to
\begin{cases}
1 = p_0 \
1 + q_1 = p_1 \
0.5 + q_1 = 0
\end{cases}
\to
\begin{cases}
p_0 = 1 \
p_1 = 0.5 \
q_1 = -0.5
\end{cases}
$$
于是,$f(x) = e^x$的$[1,1]$阶帕德近似表达式为:
$$
R_{1,1}(x) = \frac{1 + 0.5x}{1 - 0.5x}
$$
Matlab实现
实际应用过程中,可以借助Matlab求解Pade近似表达式。Matlab求解指数函数的$[1,1]$、$[2,2]$、$[3,3]$阶Pade近似,代码如下:
clc; clear; syms x;
pade(exp(x),x,0,'Order',[1 1])
pade(exp(x),x,0,'Order',[2 2])
pade(exp(x),x,0,'Order',[3 3])
计算结果如下所示:
对比一下不同阶次的近似效果,如下所示:
对应的Matlab代码如下所示:
clc;clear;close all;
syms x;hold on;fplot(exp(x),'r-*','linewidth', 3)
fplot(pade(exp(x),x,0,'Order',[1 1]),'g','linewidth', 1)
fplot(pade(exp(x),x,0,'Order',[2 2]),'b','linewidth', 1)
fplot(pade(exp(x),x,0,'Order',[3 3]),'k','linewidth', 1)
grid on;axis([-2 2 0 8]); legend('epx(x)','[1,1]','[2,2]','[3,3]');
参考文献
[1] Matlab文档:Pade approximant.