ode45解常微分方程报错显示没有默认参数。
Show older comments
先给出两个文件的代码
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才能通过,我觉得应该是缺少初始参数的的问题,但是我不知道怎么修改,请求各位帮忙,感谢!
Accepted Answer
More Answers (0)
Categories
Find more on 编程 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!