When I try to run the script, an error appears saying "not enough input arguments" and an error in my function, specifically on the T = T0... line and I just can't understand why. Here's my code
function dxdt = funcionVel(t,x)
M = 1200;
r = 0.25;
c = 20;
T0 = 1000;
t0 = 10;
T = T0*(1 - exp(-t/t0));
dxdt(1) = x(2);
dxdt(2) = T/(M*r) - c*x(2);
dxdt = dxdt';
end
%main code
clear variables
clc
t = (0:0.1:10);
condInicio = [0;0;0];
[T,Y] = ode45(@funcionVel,t,condInicio);
x1 = Y(:,1);
plot(t,x1)

 Accepted Answer

If you are using a single file then the script has to be before the function. Also, you had too many initial conditions.
t = (0:0.1:10);
condInicio = [0;0];
[T,Y] = ode45(@funcionVel,t,condInicio);
x1 = Y(:,1);
plot(t,x1)
function dxdt = funcionVel(t,x)
M = 1200;
r = 0.25;
c = 20;
T0 = 1000;
t0 = 10;
T = T0*(1 - exp(-t/t0));
dxdt(1) = x(2);
dxdt(2) = T/(M*r) - c*x(2);
dxdt = dxdt';
end

3 Comments

Thanks! It worked. Also, if it is not too much to ask, how can I plot x1 for multiple values of M on the same plot?
t = (0:0.1:10);
condInicio = [0;0];
MVals = [1200 1800 2400];
for M = Mvals
[T,Y] = ode45(@(t,x) funcionVel(t,x,M), t, condInicio);
x1 = Y(:,1);
plot(t, x1, 'DisplayName', sprintf('M = %g', M));
hold on
end
legend show
function dxdt = funcionVel(t, x, M)
r = 0.25;
c = 20;
T0 = 1000;
t0 = 10;
T = T0*(1 - exp(-t/t0));
dxdt(1) = x(2);
dxdt(2) = T/(M*r) - c*x(2);
dxdt = dxdt';
end
You really are the mvp!

Sign in to comment.

More Answers (0)

Categories

Find more on Programming 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!