TH方程学习(3)

一、编程实现

根据论文给出的案例,使用TH方程进行数值仿真

1.初始化条件

%% 参考文献<New State Transition Matrix for Relative Motion on an Aribitrary Elliptical Orbit>
%% 作者 Yamanaka Koji
clc;clear
global miu Re
miu = 3.986e5;
Re  = 6378.137;
% step1:初始化条件
ecc =     0.1;
Perigee = 500;
inc =     30;
TA =      45 ;
% 计算半长轴
sma =    (Re+Perigee)/(1-ecc);
% 计算半通径
p  =     sma*(1-ecc^2);
% 计算角动量
h  =     sqrt(p*miu);
% 计算该近地点时刻的位置大小
r  =     p/(1+ecc*cosd(TA));
% 计算该时刻的速度
v  =     sqrt(miu*(2/r-1/sma));
% 计算该时刻的角速度
omega =  h/r^2;
rho     = 1+ecc*cosd(TA);
k       = sqrt(h/p^2);

2.求真近地点角

假设迭代时间为13200秒,时间步长取为60s,一共221个数据,首先计算每个时刻的真近地点角,根据给定的初始真近地点角,求出平近地点角,偏近地点角。

t=[0:1:220]*60;
tanf=tand(TA/2);
ee=sqrt((1+ecc)/(1-ecc));
tanE=tanf/ee;
% 求偏近地点角
E = atand(tanE)*2;
% 求平近地点角
M = rad2deg(deg2rad(E)-ecc*sind(E));

求出平均角速度

% 求平均角速度
n = sqrt(miu/sma^3);

根据初始平近地点角和平均角速度求出,每个时刻对应的平近地点角

% 求出每个时刻的平均角速度
M_all=M+rad2deg(n*t);
for i=1:length(M_all)if M_all(i)>360int=floor(M_all(i)/360);M_all(i)=M_all(i)-int*360;elsecontinueend
end

根据开普勒方程,求出偏近地点角,这里采用函数Kepler_function,求出每个时刻对应的偏近地点角和真近地点角

for i=1:length(M_all)MM=deg2rad(M_all(i));E_rad=Kepler_function(ecc,MM);tanf2=sqrt((1+ecc)/(1-ecc))*tan(E_rad/2);if E_rad<pi && E_rad>=0f=rad2deg(atan(tanf2)*2);f_all(i)=f;elseif E_rad>=pif=rad2deg(atan(tanf2)*2)+360;f_all(i)=f;endE_all(i)=rad2deg(E_rad);
end
function E=Kepler_function(e,M)
% ~~~~~~~~~~~~~~~~~~~~~~~~~~
% 这个函数使用牛顿迭代的方法求解开普勒方程
% 给定偏心率和平近点角
% E-篇近点角(弧度)
% e-偏心率
% M-平近点角(弧度)
% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
error=1.0e-8;
if M<piE=M+e/2;
elseE=M-e/2;
end
% 迭代要求在所要求的范围内:
ratio=1;
while abs(ratio)>errorratio=(E-e*sin(E)-M)/(1-e*cos(E));E=E-ratio;
end
end

求出的每个时刻的三种角与STK计算出来的对比结果

3.代入TH方程

首先求出K值,在目标星的VVLH坐标系,追踪星的位置速度为[0.1km,0.01km,0.01km,0.0001km/s,0.0001km/s,0.0001/s],首先求出XZ轴平面的初始值

r_target = [0;0;-r];
omega_vec= [0;-omega;0];
v_x      = miu/h*(1+ecc*cosd(TA)); % 沿着周向的速度
v_z      = miu/h*ecc*sind(TA);     % 沿着径向的速度
v_target = [v_x;0;v_z];            % 目标星的速度矢量
% 旋转系追踪星相对目标星的位置
delta_r=[0.1;0.01;0.01];
delta_v=[0.0001;0.0001;0.0001];
% 惯性系追踪星的位置
r_chaser=r_target+delta_r;
% 惯性系追踪星的速度
v_chaser=v_target+delta_v+cross(omega_vec,delta_r);% 计算归一化的相对位置速度
rho     = 1+ecc*cosd(TA);
delta_r = [0.1;0.01;0.01];
r_norm  = rho*delta_r;                                   %式子87
k       = sqrt(h/p^2);
v_norm  = -ecc*sind(TA)*delta_r+(1/(k^2*rho))*delta_v;   %式子87 

求出\boldsymbol{\Phi}_{\theta_{0}}^{-1}

% 计算X-Z矩阵
s0   = rho*sind(TA); c0= rho*cosd(TA);
Phi0_inv     =zeros(4,4);
Phi0_inv(1,1)=1-ecc^2;
Phi0_inv(1,2)=3*ecc*(s0/rho)*(1+1/rho);
Phi0_inv(1,3)=-ecc*s0*(1+1/rho);
Phi0_inv(1,4)=-ecc*c0+2;
Phi0_inv(2,2)=-3*(s0/rho)*(1+ecc^2/rho);
Phi0_inv(2,3)=s0*(1+1/rho);
Phi0_inv(2,4)=c0-2*ecc;
Phi0_inv(3,2)=-3*(c0/rho+ecc);
Phi0_inv(3,3)=c0*(1+1/rho)+ecc;
Phi0_inv(3,4)=-s0;
Phi0_inv(4,2)=3*rho+ecc^2-1;
Phi0_inv(4,3)=-rho^2;
Phi0_inv(4,4)=ecc*s0;
Phi0_inv1=Phi0_inv.*(1/(1-ecc^2));

求出初始K值

% 根据f_all 计算每个时刻对应的转移矩阵 X-Z
xz0=[r_norm(1);r_norm(3);v_norm(1);v_norm(3)];
% 计算转移初始值
hatxz0=Phi0_inv1*xz0;

4.求出每个时刻的状态转移矩阵,以及在相对位置坐标系的位置

hatxz=zeros(length(t),4);
xz   =zeros(length(t),4);
% 转移矩阵
for j=1:length(f_all)% 已知真近地点角theta=f_all(j);% 计算矩阵的参数rho1=1+ecc*cosd(theta);s1=rho1*sind(theta);c1=rho1*cosd(theta);ds1=cosd(theta)+ecc*cosd(2*theta);dc1=-(sind(theta)+ecc*sind(2*theta));J1=k^2*t(j);%  转移矩阵的参数Phi_theta=zeros(4);Phi_theta(1,1)=1;Phi_theta(1,2)=-c1*(1+1/rho1);Phi_theta(1,3)=s1*(1+1/rho1);Phi_theta(1,4)=3*rho1^2*J1;Phi_theta(2,2)=s1;Phi_theta(2,3)=c1;Phi_theta(2,4)=2-3*ecc*s1*J1;Phi_theta(3,2)=2*s1;Phi_theta(3,3)=2*c1-ecc;Phi_theta(3,4)=3*(1-2*ecc*s1*J1);Phi_theta(4,2)=ds1;Phi_theta(4,3)=dc1;Phi_theta(4,4)=-3*ecc*(ds1*J1+s1/rho1^2);%  利用转移矩阵求出该时刻的位置和速度hatxz(j,:)=Phi_theta*hatxz0;xt=hatxz(j,1)/rho1;zt=hatxz(j,2)/rho1;vxt=k^2*(hatxz(j,1)*ecc*sind(theta)+hatxz(j,3)*rho1);vzt=k^2*(hatxz(j,2)*ecc*sind(theta)+hatxz(j,4)*rho1);xz(j,:)=[xt,zt,vxt,vzt];
end

接下来求Y轴的变化

y0=[r_norm(2);v_norm(2)];
haty =zeros(length(t),2);
yy   =zeros(length(t),2);
for j=1:length(f_all)% 已知真近地点角theta=f_all(j);% 计算矩阵的参数rho1=1+ecc*cosd(theta);s1=rho1*sind(theta);c1=rho1*cosd(theta);ds1=cosd(theta)+ecc*cosd(2*theta);dc1=-(sind(theta)+ecc*sind(2*theta));J1=k^2*t(j);%  Y转移矩阵的参数 Phi_thetay=zeros(2);Phi_thetay(1,1)=cosd(theta-TA);Phi_thetay(1,2)=sind(theta-TA);Phi_thetay(2,1)=-sind(theta-TA);Phi_thetay(2,2)=cosd(theta-TA);haty(j,:)=Phi_thetay*y0;yt=haty(j,1)/rho1;vyt=k^2*(haty(j,1)*ecc*sind(theta)+haty(j,2)*rho1);yy(j,:)=[yt,vyt];
end

5.结果呈现

通过对比,发现TH方程求出的相对运动方程与数值计算出来的相对运动方程曲线高度重合,因此TH方程能够解析的描述两个椭圆目标的相对运动方程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/338242.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云语音合成TTS直播助手软件开发

阿里云的TTS比较便宜&#xff0c;效果比不了开源克隆的那种&#xff0c;比纯机器人效果好一点点 阿里云sambert https://help.aliyun.com/zh/dashscope/developer-reference/quick-start-13 Sambert系列模型 1万字1元 &#xff0c;每主账号每模型每月3万字免费 创建API-KEY htt…

域内用户枚举和密码喷洒

一. 域内用户枚举原理和流量 1. 原理 在AS-REQ阶段客户端向AS发送用户名&#xff0c;cname字典存放用户名&#xff0c;AS对用户名进行验证&#xff0c;用户存在和不存在返回的数据包不一样。 不同之处主要是在返回数据包中的状态码不同&#xff0c;根据不同的状态码来区分账…

271 基于matlab的可调Q因子小波变换故障诊断

基于matlab的可调Q因子小波变换故障诊断&#xff0c;可用在轴承、齿轮、活塞等故障诊断中&#xff0c;程序中包含了原始TQWT工具箱和轴承振动信号信号的谱包络的求取。通过仿真数据、实际轴承数据说明了方法的效果。程序已调通&#xff0c;可直接运行。 271 可调Q因子小波变换 …

基于java的CRM客户关系管理系统(二)

目录 第二章 相关技术介绍 2.1 后台介绍 2.1.1 B/S平台模式 2.1.2 MVC 2.1.3 Spring 2.1.4 Hibernate 2.1.5 Struts 2.2 前端介绍 2.2.1 JSP网页技术 2.3 开发工具 2.4 本章小结 前面内容请移步 基于java的CRM客户关系管理系统&#xff08;二&#xff09; 资源…

查看docker中各个容器所占的资源

要查看Docker中的每个容器占用的资源&#xff0c;可以使用docker stats命令。这个命令提供了容器的实时资源使用统计&#xff0c;包括内存使用情况。以下是如何使用docker stats命令的示例&#xff1a; docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsa…

Appium安装及配置(Windows环境)

在做app相关自动化测试&#xff0c;需要使用appium来做中转操作&#xff0c;下面来介绍一下appium的环境安装配置 appium官方文档&#xff1a;欢迎 - Appium Documentation 一、下载appium 下载地址&#xff1a;https://github.com/appium/appium-desktop/releases?page3 通…

进程——linux

目录 冯诺依曼体系结构&#xff08;计算机组成原理与体系结构&#xff09; 关于冯诺依曼&#xff0c;必须强调几点&#xff1a; 操作系统(Operator System) 概念 设计OS的目的 定位 如何理解 "管理" 总结 系统调用和库函数概念 承上启下 一、进程 基本概念…

C++:细谈Sleep和_sleep

ZINCFFO的提醒 还记得上上上上上上上上上上上上上上上上上上&#xff08;上的个数是真实的&#xff09;篇文章吗&#xff1f; 随机应变——Sleep()和_sleep() 但在ZINCFFO的C怪谈-02中&#xff1a; 我不喜欢Sleep...... 奤&#xff1f;媜煞鷥&#xff01; 整活&#xff01;…

STL中stack的使用

目录 一、stack类介绍和使用 stack类介绍 stack类定义 stack类常见构造函数 stack数据操作 empty()函数 top() pop() 和 push() 函数 size()函数 swap()函数 一、stack类介绍和使用 stack类介绍 1.stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下…

C语言 指针——函数指针

目录 什么是函数指针&#xff1f; 函数指针的定义 定义函数指针时的常见错误 函数指针有什么用&#xff1f; 函数指针的主要应用 什么是函数指针&#xff1f; 函数指针 (Function Pointer) 就是指向函数的指针变量 数据类型 ( * 指针变量名 ) ( 形参列表 ); 例如&#x…

Python 机器学习 基础 之 处理文本数据 【停用词/用tf-idf缩放数据/模型系数/多个单词的词袋/高级分词/主题建模/文档聚类】的简单说明

Python 机器学习 基础 之 处理文本数据 【停用词/用tf-idf缩放数据/模型系数/多个单词的词袋/高级分词/主题建模/文档聚类】的简单说明 目录 Python 机器学习 基础 之 处理文本数据 【停用词/用tf-idf缩放数据/模型系数/多个单词的词袋/高级分词/主题建模/文档聚类】的简单说明…

什么是PLAB?

接上文PLAB---》 可以看到和TLAB很像&#xff0c;PLAB即 Promotion Local Allocation Buffers。用在年轻代对象晋升到老年代时。 在多线程并行执行YGC时&#xff0c;可能有很多对象需要晋升到老年代&#xff0c;此时老年代的指针就"热"起来了&#xff0c;于是搞了个…

秒杀基本功能开发(显示商品列表和商品详情)

文章目录 1.数据库表设计1.商品表2.秒杀商品表3.修改一下秒杀时间为今天到明天 2.pojo和vo编写1.com/sxs/seckill/pojo/Goods.java2.com/sxs/seckill/pojo/SeckillGoods.java3.com/sxs/seckill/vo/GoodsVo.java 3.Mapper编写1.GoodsMapper.java2.GoodsMapper.xml3.分别编写Seck…

数据库(10)——图形化界面工具DataGrip

以后关于数据库的图片演示就使用DataGrip了 : ) 创建数据库和表 在连接上数据库之后&#xff0c;可以选择Schema创建一个新的数据库。 点击OK后&#xff0c;就已经创建了一个空的表。 要在数据库中建立一张新的表&#xff0c;右键数据库&#xff0c;点击new table 要给新表添…

Java对sqlserver表的image字段图片读取和输出本地

Java代码实现对sqlserver数据库表的image字段图片的读取&#xff0c;和输出存储到本地 由于表image字段图片存的内容是二进制值&#xff0c;如何输出保存到本地&#xff1a; 代码示例&#xff1a;&#xff08;注&#xff1a;连接sqlserver数据库需配置其驱动文件&#xff09; …

让EXCEL VBA支持鼠标滚轮,vb6 IDE鼠标滚轮插件原理

vb6 IDE鼠标滚轮插件怎么运行的(适用于VBA) 使用 Spy&#xff0c;我发现代码窗口正在获取 WM_MOUSEWHEEL 事件&#xff0c;但没有触发 WM_VSCROLL 消息。因此&#xff0c;我编写了一个简单的消息钩子&#xff0c;当它捕获鼠标滚轮事件时触发滚动事件。 我从 Spy 得知代码窗口的…

Android 项目Gradle文件讲解(Groovy和Kotlin)

Android 项目Gradle文件讲解&#xff08;Groovy和Kotlin&#xff09; 前言正文一、Gradle的作用二、Gradle的种类① 工程build.gradle② 项目build.gradle③ settings.gradle④ gradle.properties⑤ gradle-wrapper.properties⑥ local.properties 三、Groovy和Kotlin的语言对比…

系统安全及其应用

系统安全及其应用 部署服务器的初始化步骤&#xff1a; 1、配置IP地址&#xff0c;网关&#xff0c;DNS解析 2、安装源&#xff0c;外网&#xff08;在线即可yum&#xff09; 内网&#xff08;只能用源码包编译安装&#xff09; 3、磁盘分区 lvm raid 4、系统权限配置和基础安…

【ArcGISPro】3.1.5下载和安装教程

下载教程 arcgis下载地址&#xff1a;Трекер (rutracker.net) 点击磁力链下载弹出对应的软件进行下载 ArcGISPro3.1新特性 ArcGIS Pro 3.1是ArcGIS Pro的最新版本&#xff0c;它引入了一些新的特性和功能&#xff0c;以提高用户的工作效率和数据分析能力。以下是ArcGIS…

神经网络的工程基础(二)——随机梯度下降法|文末送书

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型&#xff1a;从线性回归到通用人工智能》&#xff0c;欢迎有兴趣的读者多多支持。 本文涉及到的代码链接如下&#xff1a;regression2chatgpt/ch06_optimizer/stochastic_gradient_descent.ipynb 本文将讨论利用…