你没发现你的main主代码里面,tm没有具体的赋值吗?光声明了一个全局变量的属性,没有具体赋值,导致 tm = [] 于是 tspan2 = (0 : 0.01 : tm + 2) 实际也是个空集,ode求解器当然没法用了
ode45解常微分方程报错显示没有默认参数。
7 次查看(过去 30 天)
显示 更早的评论
先给出两个文件的代码
main.m
clc;
clear;
global den g ms mw vL kf D0 A0 C tm;
den = 1.06; %空气密度
g = 9.8;
ms = 2; %降落伞质量
mw = 102; %物体质量
vL = 61.1; %拉直阶段结束速度
hL = 600; %拉直阶段结束高度
kf = 0.41; %附加质量系数kf = 0.752 / Ct^1.5
theta = 82; %倾斜角
C = 0.8; %阻力系数
D0 = 10.4; %伞衣名义直径
A0 = pi * (D0 / 2)^2; %伞衣面积
tspan2 = (0 : 0.01 : tm + 2);
[t2, v] = ode45('inflation', tspan2, [0 0 vL 0 theta 0 hL]);
a1 = (ms + v(1 : length(t2) - 1, 2)) .* diff(v( : , 3)) ./ diff(t2);
a2 = 0.5 * den * (v(1 : length(t2), 3).^2) .* v(1 : length(t2), 1);
a3 = v(1 : length(t2) - 1, 3) .* diff(v( : , 2)) ./ diff(t2);
a1(length(t2)) = -0.1970;
a3(length(t2)) = 0;
Fk = a1 + a2 + a3 - ms * g * sind(v(1 : length(t2), 5));
inflation.m
function dv = inflation(t, v)
global den g ms mw vL kf D0 A0 C tm;
lambda = 1.74; %充气距离比例系数λ
alpha = 6; %Scheubel常数
scale = 0.04; %(CA)1 / (CA)
t1 = lambda * D0 / vL; %初始充气时间
tm = alpha * D0 / (0.9 * vL); %充满时间(kv取0.9)
kt = scale * C * A0 / t1;
n = 2;
betat = (1 - scale) * C * A0 / ((tm - t1)^n); %n取2
dv = zeros(7, 1);
if t <= t1
dv(1) = kt; %dCA / dt
elseif t <= tm
dv(1) = n * betat * (t - t1)^(n - 1);
else
dv(1) = 0;
end
dv(2) = 1.5 * den * kf * (v(1)^0.5) * dv(1); %dmf / dt
dv(3) = (mw + ms) * g * sind(v(5)) / (mw + ms + v(2)) - 0.5 * den * (v(3)^2) * v(1) / (mw + ms + v(2)) - v(3) * dv(2) / (mw + ms + v(2)); %dv / dt, 忽略(CA)w
dv(4) = v(3); %ds / dt
dv(5) = g * cosd(v(5)) / v(3); %d(theta) / dt
dv(6) = v(3) * cosd(v(5)); %dx / dt
dv(7) = - v(3) * sind(v(5)); %dy / dt
end
在main.m脚本文件中使用ode45解inflation.m函数文件中的常微分方程,报错
错误使用 odearguments (第 35 行)
INFLATION 中没有默认参数。请改用 ode45(INFALTION,tspan,y0,...)。
出错 ode45 (第 115 行)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
出错 test1 (第 21 行)
[t2, v] = ode45('inflation', tspan2, [0 0 vL 0 theta 0 hL]);
我改用报错建议里的ode45(INFLATION,tspan,y0,...)还是不能运行,最后我发现每次新打开MATLAB都需要先执行两次inflation.m再执行main.m才能通过,我觉得应该是缺少初始参数的的问题,但是我不知道怎么修改,请求各位帮忙,感谢!
0 个评论
采纳的回答
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!