Слишком много входных аргументов Matlab ode45

Я пытаюсь написать простой код Matlab для моделирования снаряда. Всякий раз, когда я пытаюсь запустить код, я получаю сообщение об ошибке, говорящее о том, что входных аргументов слишком много. Я запускаю код с

модель1(44.7, 45)

function[] = model1(vel, angle)
close all; 
tspan = [0 3];
x0 = [0; 0.915; vel*cos(angle); vel*sin(angle)];
[x] = ode45(@ball, tspan, x0);

function xdot = ball(x)
g = 9.81; 
xdot = [x(3); x(4); 0; -g];

end 
end

Error using model1/ball
Too many input arguments.

Error in odearguments (line 87)
f0 = feval(ode,t0,y0,args{:});   % ODE15I sets args{1} to yp0.

Error in ode45 (line 115)
    odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options,
    varargin);

Error in model1 (line 9)
[x] = ode45(@ball, tspan, x0);

Буду признателен за любой совет!


person Olivia    schedule 04.04.2016    source источник
comment
Посмотрите на ode45, odefunтребуются два входа, t и x, вы есть только x.   -  person Jørgen    schedule 04.04.2016


Ответы (1)


Ошибка заключалась в том (что я также совершал много раз в прошлом), что вы также должны передавать независимую переменную (в данном случае время).

function [t, x] = model1(vel, angle)
tspan = [0 3];
x0 = [0; 0.915; vel*cos(angle); vel*sin(angle)];
[t, x] = ode45(@ball, tspan, x0);

end

function xdot = ball(t,x)
g = 9.81; 
xdot = [x(3); x(4); 0; -g];
end

Я изменил ваш код, чтобы вернуть решение и соответствующие временные шаги. Более того, я удалил ball как вложенную функцию.

person Zoltán Csáti    schedule 04.04.2016