ode45解常微分方程报错显示没有默认参数。

7 views (last 30 days)
先给出两个文件的代码
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

新锦江娱乐注册登录【微8785092】
你没发现你的main主代码里面,tm没有具体的赋值吗?光声明了一个全局变量的属性,没有具体赋值,导致 tm = [] 于是 tspan2 = (0 : 0.01 : tm + 2) 实际也是个空集,ode求解器当然没法用了

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!