TH方程学习 (6)

一、内容介绍

本节旨在使用优化算法的方法,旨在利用最小的燃耗实现目标的交会,变量为目标的转移时间。整个问题描述为:

J=\min \left | \Delta \boldsymbol{v_1} \right |+\left | \Delta \boldsymbol{v_2} \right |

[\Delta \boldsymbol{v}_1,\Delta \boldsymbol{v}_2]=\boldsymbol{\lambda}(t)

本节拟采取粒子群优化的算法,matlab中自带的粒子群函数为particleswarm,其用法不详细介绍,首先写出粒子群算法优化的函数。

函数一为双脉冲求解函数

%% 本代码旨在使用TH方程求解双脉冲转移问题
function [dv1,dv2]=TH_twoimpulsive(ecc,Perigee,TA,delta_r,delta_v,r_f,v_f,t)
% 输入:
% ecc    :  偏心率                    0<=ecc<1
% Perigee:  近地点高度                (km)
% TA     :  真近地点角                (deg)
% delta_r:  追踪星相对于目标的距离     (km)
% delta_v:  追踪星相对于目标的速度     (km/s)
% t      :  转移时间
% 输出
% dv1    :  第一次施加脉冲的速度分量   (km/s)
% dv2    :  第二次施加脉冲的速度分量   (km/s)
% TH求出状态转移矩阵
[v,Phi,vv]=TH_solver(ecc,Perigee,TA,delta_r,delta_v,t);
% 求出状态转移矩阵的每个部分
Phi_rr    =  Phi(1:3,1:3);
Phi_rv    =  Phi(1:3,4:6);
Phi_vr    =  Phi(4:6,1:3);
Phi_vv    =  Phi(4:6,4:6);
% 求出第一次脉冲施加的大小
vv_0      =  inv(Phi_rv)*(r_f-Phi_rr*delta_r);
dv1       =  vv_0-delta_v;
% 求出第二次施加脉冲的大小
vv_f      =  Phi_vr*delta_r+Phi_vv*vv_0;
dv2       =  v_f-vv_f;
end

函数二为粒子群优化函数

function J = ParticleFun(x)
% 粒子群优化的函数
% x : 即为时间的变量
global ecc Perigee TA delta_r delta_v r_f v_f
[dv1,dv2]  =   TH_twoimpulsive(ecc,Perigee,TA,delta_r,delta_v,r_f,v_f,x)
J          =   norm(dv1)+norm(dv2);
end

调用主函数求出最小值

%
clc;clear
global ecc Perigee TA delta_r delta_v r_f v_f
ecc     = 0.1;
Perigee = 500;
TA      = 45;
delta_r = [0.1;0.01;0.01];
delta_v = [0.0001;0.0001;0.0001];
r_f     = [0;0;0];
v_f     = [0;0;0];
lb=[0];
ub=[3600];
options=optimoptions('particleswarm','SwarmSize',500,'HybridFcn','fmincon','MaxIterations',500,'PlotFcn','pswplotbestf');
[x,fval,exitflag,output] = particleswarm(@ParticleFun,1,lb,ub,options);
% 检验一下正确性
[dv1,dv2]=TH_twoimpulsive(ecc,Perigee,TA,delta_r,delta_v,r_f,v_f,x);

for j=1:3600
    [dv1,dv2]=TH_twoimpulsive(ecc,Perigee,TA,delta_r,delta_v,r_f,v_f,j);
    J(j)=norm(dv1)+norm(dv2);
end
find(J==min(J))
% 对比索引与x值是否相等

使用粒子群函数求出的最优时间是3270s,转移消耗的速度变量位0.21815m/s。

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值