经过两个多输入一个MATLAB事件函数

5视图(30天)
我试图将三个参数传递给MATLAB事件函数——而不仅仅是正常的两个(t, y)——为了解决一个轨道动力学的问题,但我目前已经实现的方法并不工作。我认为下面的代码应该工作,但是运行时,事情永远不会记录迭代步骤,时间,或者状态值(y)的事件发生。我肯定的事件发生在空间模拟,因为我可以找到在事件发生时通过模拟在一个非常大的时间和使用一个for循环找出事件发生的地方。(即参数设置为在事件函数达到)这当然是非常低效的,所以利用事件函数将会更好。下面的代码段是连接和标注从我目前的脚本:
%试图解决ode,发现事件发生的地方。“T_Spec_Energy_ZGP”是一个重要的变量需要通过事件函数,但它是真的在运行这段代码。
IB_Term_Pass = @ (t, y) IB_Term (t y T_Spec_Energy_ZGP);
options_IB = odeset (“MaxStep”10“事件”,IB_Term_Pass);
[t_IB, y_IB t_EC、ye_IB i_IB_f] =数值(@ (t, y)率(t y r_OE、r_OM Craft_Thrust, m_craft), [0, Simulation_Time], y0, options_IB);
- - - - - - - - - - -额外无关代码- - - - - - - - - - - - - - - - -
% %功能部分:
函数(价值、isterminal方向)= IB_Term (t, y, T_Spec_Energy_ZGP)
%的事件函数终止(1)当航天器初始燃烧阶段
%已达到所需的公差比能。
%轨道参数:
u_M = 4903 * 10 ^ 3 ^ 3;% m / s ^ 3 ^ 2 -月球格拉夫参数
毫米= 73.48 * 10 ^ 21;%月球的质量(千克)
我= 384.4 * 10 ^ 3;%的月球轨道半长轴(公里)
我= 5.974 * 10 ^ 24;%地球的质量(千克)
r_OE =(((10 ^ 3 *点)*(毫米/我))/(1 +(毫米/我)));%原点到地球的距离(米)
r_OM =((10 ^ 3 *点)+ r_OE);%原点到月球的距离(米)
u_3 = 398600 * 10 ^ 3 ^ 3;%地球万有引力常数(m ^ 3) / (s ^ 2)
%号参数:
r_EC_IB (1) = (-r_OE + y (1));
r_EC_IB (2) = (y (2));
r_EC_IB_mag =√(r_EC_IB (1)) ^ 2 + (r_EC_IB (2)) ^ 2);
r_MC_IB (1) = (-r_OM + y (1));
r_MC_IB (2) = (y (2));
r_MC_IB_mag =√(r_MC_IB (1)) ^ 2 + (r_MC_IB (2)) ^ 2);
v_mag =√(y (3) ^ 2) + (y (4) ^ 2));
Spec_Energy_Craft_IB = ((v_mag ^ 2) / 2) - ((u_M * 10 ^ 3 ^ 3) / r_MC_IB_mag) - ((u_3 * 10 ^ 3 ^ 3) / r_EC_IB_mag);
值= (T_Spec_Energy_ZGP-Spec_Energy_Craft_IB);
方向= 0;
isterminal = 1;
结束
本质上我主要关心的是检索事件发生时的迭代步骤,所以在上面代码的命名我真的需要输出“i_IB_f”。有很多其他代码,我离开我认为irrelevent这个特定的问题,但我的想法的问题。任何帮助非常感激,谢谢!
3评论
Torsten
Torsten 2023年4月19日
编辑:Torsten 2023年4月19日
你的代码看起来很好。没有什么可说,如果我们不能繁殖的失败事件。
你确定上面蓝色曲线计算的代码和代码来计算“Spec_Energy_Craft_IB”事件函数真的一模一样吗?
你确定的值“T_Spec_Energy_ZGP”交给事件函数等于上面的红色曲线的y值?

登录置评。

答案(0)

类别

找到更多的在地球和行星科学帮助中心文件交换

s manbetx 845


释放

R2022a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!