多元函数的泰勒(Taylor)展开式

实际优化问题目标函数往往比较复杂,简化问题通常将目标函数在某点附近展开为Taylor多项式来逼近原函数:
一元函数在点 xk 处的泰勒展开为:

f(x)=f(xk)+(xxk)f(xk)+12!(xxk)2f′′(xk)+on

二元函数在点 (xk,yk) 处的泰勒展开为:
f(x,y)=f(xk,yk)+(xxk)fx(xk,yk)+(yyk)fy(xk,yk)+12!(xxk)f′′xx(xk,yk)+12!(xxk)(yyk)f′′xy(xk,yk)+12!(xxk)(yyk)f′′yx(xk,yk)+12!(yyk)f′′yy(xk,yk)+on

⋅多元函数在点 xk 处的泰勒展开为:
f(x1,x2,,xn)=f(x1k,x2k,,xnk)+i=1n(xixik)fxi(x1,x2,,xn)+12!i,j=1n(xixik)(xjxjk)f′′ij(x1,x2,,xn)

Taylor展开矩阵形式表达为:

f(x)=f(xk)+[f(xk)]T(xxk)+12![xxk]TH(xk)[xxk]+on

其中:
H(xk)=2f(xk)x212f(xk)x2x12f(xk)xnx12f(xk)x1x22f(xk)x222f(xk)xnx22f(xk)x1xn2f(xk)x2xn2f(xk)x2n

### 多元函数泰勒展开的概念 对于多元函数 \( f(x, y) \),如果该函数及其偏导数在某一点附近连续,则可以在这一点处进行泰勒展开泰勒展开提供了一种方法,通过多项式来近似复杂函数的行为。 #### 一阶泰勒展开 在一阶情况下,给定点 \( (a,b) \)函数 \( f(x,y) \) 可以表示为: \[ f(a+h, b+k) ≈ f(a,b)+f_x(a,b)h+f_y(a,b)k \] 这里 \( h=x-a,k=y-b \)[^1]。 #### 二阶泰勒展开 当考虑更高精度时,引入二次项得到更精确的结果: \[ f(a+h, b+k) ≈ f(a,b)+f_x(a,b)h+f_y(a,b)k+\frac{1}{2}[f_{xx}(a,b)h^{2}+2f_{xy}(a,b)hk+f_{yy}(b,k)] \]。 其中下标代表对应变量的一阶或混合二阶偏导数值。 #### 泛化形式 一般而言,\( n \)-维空间中的向量值函数 \( F(\mathbf{x})=F(x_1,x_2,\ldots ,x_n)\) 在点 \( a=(a_1,a_2,...,a_n)^T\) 的邻域内可写成如下形式: \[ F(\mathbf {a} +\Delta \mathbf {x} )=\sum _{|r|=0}^{m}\left({\frac {\partial ^{r}}{\partial x_{1}^{r_{1}}...\partial x_{n}^{r_{n}}}}F(\mathbf {a} )/{r!}\right)(\Delta x_{1})^{r_{1}}...(\Delta x_{n})^{r_{n}} \] 这里的 \( r=(r_1,r_2,…,r_n), |r|=\sum_i^n ri \) 并且 \( Δxi=xi−ai \). 当 \( m→∞ \) 并且余项趋于零的时候上述表达即成为完整的泰勒级数。 ```python import sympy as sp def taylor_expansion(f, variables, point, order): from itertools import product # 计算各阶导数并构建泰勒展开式 expansion = 0 for i in range(order + 1): terms = [] indices = list(product(range(i + 1), repeat=len(variables))) for idx in indices: if sum(idx) == i: term = sp.diff(f, *zip(variables, idx)) coefficient = term.subs(dict(zip(variables, point))) / sp.factorial(sum(idx)) powers = ''.join([f'*(v-{p})**{exp}' for v, exp, p in zip(variables, idx, point)]) terms.append(coefficient*powers) expansion += sum(terms) return expansion.expand() # 定义符号和函数 x, y = sp.symbols('x y') func = sp.sin(x)*sp.exp(y) # 展开至二阶 point = [0, 0] order = 2 result = taylor_expansion(func, [x, y], point, order) print(result) ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值