matlab - 带有差分方程系统的 ODE45 时间因变量
问题描述
我有一个需要插值的时间相关变量,并发送到我的 ODE。我的 EOM 存储在一个函数 .m 文件中,我需要将插值发送给它,因此每个值都可以在集成中使用。我该怎么做呢?
我需要插值的变量是 k。其中 k 遵循这个公式
k = (h^2*(a+b)-b*h*(a+2*b)*cos(a.*time./b)+b^3)./...
((a+b)*(-2*b*h*cos(a.*time./b)+b^2+h^2).^2);
function [ sv ] = precessing_orbit_sim( t,R )
%%% skipped sv 1 and 2
mu = earth.mukm;
rmag = norm([R(1),R(2)]);
vmag = norm([R(3),R(4)]);
sv(3)=-R(4)/vmag^2*(vmag^3*k-mu/rmag^3*(-R(4)*R(1)+R(3)*R(2)));
sv(4) = R(3)/vmag^2*(vmag^3*k-mu/rmag^3*(-R(4)*R(1)+R(3)*R(2)));
end
%%% 在积分器文件中
[t,out] = ode45(@precessing_orbit_sim,tspan,IC,options);
解决方案
包含k
在您的 ODE 函数中?就像是:
function [ sv ] = precessing_orbit_sim( t,R )
%%% skipped sv 1 and 2
mu = earth.mukm;
rmag = norm([R(1),R(2)]);
vmag = norm([R(3),R(4)]);
% Add definition of a, b and h variables
k = (h^2*(a+b)-b*h*(a+2*b)*cos(a.*t./b)+b^3)./...
((a+b)*(-2*b*h*cos(a.*t./b)+b^2+h^2).^2);
sv(3)=-R(4)/vmag^2*(vmag^3*k-mu/rmag^3*(-R(4)*R(1)+R(3)*R(2)));
sv(4) = R(3)/vmag^2*(vmag^3*k-mu/rmag^3*(-R(4)*R(1)+R(3)*R(2)));
end
然后像往常一样调用 ODE 求解器:
[t,out] = ode45(@precessing_orbit_sim,tspan,IC,options);
推荐阅读
- excel - 将简单的 Excel 宏转换为 LibreOffice Calc BASIC 宏
- css - 如何在 Bootstrap 模式框中将内容居中
- python - 用于导入数据的自定义 odoo 向导
- linux - 是否可以选择在 Jira 中生成报告以显示所有备份?
- cmake - CMake 以编程方式获取所有标志、包含和定义
- amazon-web-services - Terraform 查找函数忽略变量
- node.js - 使用 express.js 下载文件的缓冲区
- java - 如何确保在 Apache Tomcat 中运行的 Spring Boot 应用程序中替换了环境变量占位符?
- windows - 我在 Rust/WinRT 中的 toast 通知程序需要 thread::sleep
- vba - UPDATE 语句中的运行时错误 3144 语法错误