why does ode45 happen this index error?

1 view (last 30 days)
I've been struggling with this program for a long time.
Is this ode45 being used incorrectly?
global d;
d=1;
tspan=[0;0.05];
xi=[1;2;pi];
vk=[3;5];
func=@(xi,vk) TwoWheel2(xi,vk);
[t,y]=ode45(func,tspan,0);
function dxi = TwoWheel2(xi,vk)
v1=speed(vk);
wk=toRadian(vk);
dxi = zeros(3,1);
dxi(1) = cos(xi(3)) * v1;
dxi(2) = sin(xi(3)) * v1;
dxi(3) = wk;
end
function u0=toRadian(vk)
global d;
vr=vk(1);
vl=vk(2);
u0=(vr-vl)/(2*d);
end
function v1=speed(vk)
vr=vk(1);
vl=vk(2);
v1=(vr+vl)/2;
end
>> testode
The index exceeds the number of array elements (1).
error: testode>speed (line 22)
vl=vk(2);
error: testode>TwoWheel2 (line 7)
v1=speed(vk);
error: testode>@(xi,vk)TwoWheel2(xi,vk) (line 4)
func=@(xi,vk) TwoWheel2(xi,vk);
error: odearguments (line 90)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
error: ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
error: testode (line 5)
[t,y]=ode45(func,tspan,0);

Accepted Answer

Alan Stevens
Alan Stevens on 19 Sep 2020
See the following:
global d;
d=1;
tspan=[0;0.05];
xi=[1;2;pi];
vk=[3;5];
[t,y]=ode45(@TwoWheel2,tspan,xi,[],vk);
function dxi = TwoWheel2(~,xi,vk)
v1=speed(vk);
wk=toRadian(vk);
dxi = zeros(3,1);
dxi(1) = cos(xi(3)) * v1;
dxi(2) = sin(xi(3)) * v1;
dxi(3) = wk;
end
function u0=toRadian(vk)
global d;
vr=vk(1);
vl=vk(2);
u0=(vr-vl)/(2*d);
end
function v1=speed(vk)
vr=vk(1);
vl=vk(2);
v1=(vr+vl)/2;
end
  5 Comments

Sign in to comment.

More Answers (0)

Tags

Products


Release

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!