matlab - ode45 Matlab 中的 NaN 响应
问题描述
我使用 ode45 来解决位置变量与时间的关系,但在初始条件之后,我只得到所有 4 个变量的 NaN 响应。这是我的功能代码:
function dxdt = ode(t,x)
global m b a x_teta k_lin k_tor Ip U Pinf gama
m = 5; % Mass
b = 1.5; % Semi-chord
a = 0; % Reference point to displacement -1 <= a <= 1
x_teta = 0; % Static unbalanced parameter -> e - a
k_lin = 10; % Linear stiffness
k_tor = 10; % Torsional stiffness
Ip = 5; % Inertia
U = 10; % Velocity
Pinf = 1.184; % Air density
gama = 2*pi*Pinf*b*U^2; % Constant numbers from L
% x(1) = h % x(2) = dh/dt % x(3) = teta % x(4) = dteta/dt
dxdt = [x(2);(-gama*x(3)-k_lin*x(1)-m*b*x_teta*(1/Ip)*(b*(.5+a)*gama*x(3)-k_tor*x(3)))/(m+(m^2*b^2*x_teta^2)/Ip);x(4);(-gama*x(3)-k_lin*x(1)-(b*(.5+a)*gama*x(3)-k_tor*x(3))/(b*x_teta))/(m*b*x_teta-(Ip)/(b*x_teta))]
以及实现代码:
tspan = 0:.01:20; x0 = [60; 0; 5; 0];
[t,x] = ode45(@ode,tspan,x0)
解决方案
我怀疑设置这个 ODE 的物理学有问题。
在 的第 4 个元素的表达式中dxdt
,除以x_teta
,将其设置为零。
dxdt(4) = (-gama*x(3)-k_lin*x(1)-(b*(.5+a)*gama*x(3)-k_tor*x(3))/(b*x_teta))/(m*b*x_teta-(Ip)/(b*x_teta))
这种除以零导致 1 NaN
,并在迭代求解 ODE 时传播到其他元素。
推荐阅读
- azure-devops - Azure DevOps 容器作业:多个作业的缓存容器?
- excel - 根据单元格中的响应运行宏
- java - 字符串文字和 J2EE 不良做法:存储在会话中的不可序列化对象
- automated-tests - Katalon studio - 调用并将变量传递给另一个测试用例
- python - Python:是否有一个单行来获取当月的最后一天?
- html - 从 R 通过 Outlook 发送使用 rmarkdown 创建的格式化 HTML 表
- java - 如何从数据库android中删除第一个插入的项目
- c# - 如何将值设置为下拉列表
- python - 什么是固定效应模型中可合并性的 F 检验?
- c# - 如何使 Xamarin Forms 滑块从右到左