高斯伪谱法小记

简介

高斯伪谱法可以做为一种简化求解连续目标函数优化问题的方法,通过将连续优化问题变成离散优化问题,不仅有较高的求解精度,而且计算量较少。

预备知识

优化问题的目标函数
优化问题的目标函数通常都包含评价函数、约束方程、起始和终端条件等,如式(1)所示。

J = ∫ t 0 t f g [ x ( t ) , u ( t ) , t ] d t x ( t 0 ) = x 0 x ( t f ) = x f x ˙ ( t ) = f [ x ( t ) , u ( t ) , t ] (1) \begin{array}{l} J= \int _{t_0}^{t_f} g[x(t),u(t),t]dt \\ x(t_0) = x_0 \\ x(t_f) = x_{f} \\ \dot x(t) = f[x(t),u(t),t] \end{array} \tag1 J=t0tfg[x(t),u(t),t]dtx(t0)=x0x(tf)=xfx˙(t)=f[x(t),u(t),t](1)

高斯勒让德求积公式
通常连续型目标函数含有积分项,通过使用高斯求积公式可以将积分项变成离散的形式,降低求解难度。高斯求积公式如式(2)所示。
∫ − 1 1 f ( x ) d x ≈ ∑ n = 0 n w n f ( x n ) (2) \int _{-1} ^1 f(x)dx \approx \sum _{n=0} ^n w_nf(x_n) \tag{2} 11f(x)dxn=0nwnf(xn)(2)
式(2)的推导过程这里不介绍,其中,参数 w n w_n wn x n x_n xn的值可以通过查表的方式获得,如下表。
高斯勒让德求积公式表
由于基本的高斯勒让德公式的积分上下限为[-1,1],需要通过换元法将任意区间的积分转换为[-1,1],如式(3)所示。
∫ a b f ( x ) d x = b − a 2 ∫ − 1 1 F ( t ) d t x = b − a 2 t + b + a 2 (3) \int _{a} ^b f(x)dx = \frac{b-a}{2} \int _{-1} ^1 F(t)dt \\ x=\frac{b-a}{2}t+\frac{b+a}{2} \tag{3} abf(x)dx=2ba11F(t)dtx=2bat+2b+a(3)

拉格朗日插值多项式
使用拉格朗日插值多项式的最终目的是处理目标函数当中的状态约束,包括起始、中间、终端状态约束等。拉格朗日插值多项式如式(4)所示。
f ( x ) = ∑ k = 0 N f ( x k ) L k ( x ) L k ( x ) = ∏ j = 0 , j ≠ k N x − x j x k − x j (4) f(x)=\sum _{k=0} ^Nf(x_k)L_k(x) \\ L_k(x) = \prod _{j=0,j \neq k} ^N \frac{x-x_j}{x_k-x_j} \tag{4} f(x)=k=0Nf(xk)Lk(x)Lk(x)=j=0,j=kNxkxjxxj(4)

操作过程

处理评价函数
通过高斯勒让德求积公式(3)将目标函数中的评价函数转变为如式(5)所示。
J = t f − t 0 2 ∫ − 1 1 G [ X ( τ ) , U ( τ ) , τ ] d τ ≈ t f − t 0 2 ∑ i = 0 n w i G [ X ( τ i ) , U ( τ i ) , τ i ] (5) J=\frac{t_f-t_0}{2} \int _{-1} ^1 G[X(\tau), U(\tau), \tau] d \tau \approx \frac{t_f-t_0}{2} \sum _{i=0} ^n w_i G[X(\tau _i), U(\tau _i), \tau _i] \tag5 J=2tft011G[X(τ),U(τ),τ]dτ2tft0i=0nwiG[X(τi),U(τi),τi](5)
处理约束条件
硬约束条件包括终端约束和状态方程约束。结合拉格朗日插值多项式状态方程约束如式(6)所示。
d X ( τ ) d τ ≈ ∑ i = 0 N X ( τ ) d L i ( τ ) d τ = ∑ i = 0 N D k i Q ( τ i ) = t f − t 0 2 F [ X ( τ ) , U ( τ ) , τ ] (6) \frac{dX(\tau)}{d\tau} \approx \sum _{i=0} ^N X(\tau) \frac{dL _i(\tau)}{d \tau} = \sum _{i=0} ^ N D_{ki}Q(\tau _ i) =\frac{t_f - t_0}{2} F[X(\tau),U(\tau), \tau] \tag6 dτdX(τ)i=0NX(τ)dτdLi(τ)=i=0NDkiQ(τi)=2tft0F[X(τ),U(τ),τ](6)
式(6)中,矩阵 D D D是可以通过离线方式获得的, D = [ D k i ] = ∑ i = 0 N ∑ j = 0 , j ≠ i N ( τ k − τ j ) ∑ j = 0 , j ≠ i N ( τ i − τ j ) D=[D_{ki}] = \sum _{i=0} ^N \frac{\sum _{j=0, j \neq i} ^N (\tau _k - \tau _j)}{\sum _{j=0, j \neq i} ^N (\tau _i - \tau _j)} D=[Dki]=i=0Nj=0,j=iN(τiτj)j=0,j=iN(τkτj)
结合高斯勒让德求积公式,终端约束可以写成如式(7)所示。
X ( τ f ) = X ( τ 0 ) + ∫ − 1 1 F [ X ( τ ) , U ( τ ) , τ ] d τ ≈ X ( τ 0 ) + t f − t 0 2 ∑ i = 0 N w i F [ X ( τ i ) , U ( τ i ) , τ i ] (7) X(\tau _f) = X(\tau _0) + \int _{-1} ^1 F[X(\tau),U(\tau), \tau] d\tau \approx X(\tau _0) + \frac{t_f - t_0}{2} \sum _{i=0} ^N w_i F[X(\tau _i),U(\tau _i), \tau _i] \tag7 X(τf)=X(τ0)+11F[X(τ),U(τ),τ]dτX(τ0)+2tft0i=0NwiF[X(τi),U(τi),τi](7)
求解
由上述可知,高斯伪谱法将连续型优化问题转变为多变量离散优化问题(通常为非线性问题),只需要将 [ U ( τ 1 ) , U ( τ 2 ) , . . . , U ( τ n ) ] [U(\tau _1), U(\tau _2), ..., U(\tau _n)] [U(τ1),U(τ2),...,U(τn)] 做为求解变量,使用现有的求解器(如casadi、ipopt、nlopt等)求解即可。

注意事项

  1. 采用更高阶数的高斯勒让德公式,可以使求解精度更高,但计算量越大;
  2. 高斯伪谱法只是转化问题,并没有求解问题,同时也不能保证转化问题的凸凹性;
  • 11
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
高斯伪谱法是一种基于高斯求积法的谱方法,用于求解偏微分方程的数值解。Matlab是一种常用的科学计算和数值分析软件,可以进行算法实现和数据可视化等操作。 在Matlab中,使用高斯伪谱法求解偏微分方程的一般步骤如下: 1. 确定计算区域和边界条件:首先确定求解区域和边界条件,根据具体问题设置边界条件的数值或函数表达式。 2. 离散化:将求解区域离散化为一系列均匀或非均匀的网格点,可采用Chebyshev–Gauss–Lobatto(CGL)点或Chebyshev–Gauss点。 3. 制定差分方程:根据偏微分方程建立差分方程,将微分算子替换为离散的差分算子。可以使用高斯求积法进行数值积分操作。 4. 构建代数方程组:将离散后的差分方程转化为代数方程组,可以通过矩阵表示或其它形式,然后利用Matlab的线性代数求解方法求解方程组。 5. 求解结果可视化:利用Matlab的绘图函数,将数值解可视化,比如绘制曲线图、等值线图、三维图等,以便对结果进行分析和理解。 需要注意的是,高斯伪谱法适用于求解一些特定的偏微分方程,如椭圆型、双曲型或抛物型方程。在实际应用中,需要根据具体问题进行参数的调整和算法优化,以获得更好的数值解和计算效率。通过Matlab强大的计算和可视化功能,可以方便地实现高斯伪谱法,并对其结果进行分析和验证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值