please someone solve this error ''Undefined function or variable 'x''.

function ross
L = [-1.0828 -1.6242;1.2513 1.8770;-0.0020 -0.0029];
master = [-x(2)-x(3);x(1)+0.5*x(2);2+x(3)*x(1)-4*x(3)];
slave = [-x(5)-x(6);x(4)+x(7)*x(5);2+x(6)*x(4)-4*x(6)]-L*y;
thetahat = 2*x(5)*[-0.2308 0.1538]*y;
y =[12*x(1)+2*x(2)+3*x(3)-12*x(4)-x(5)-3*x(6)-2*x(5)*thetahat;7*x(1)+3.5*x(2)+2*x(3)-7*x(4)-2*x(5)-2*x(6)-3*x(5)*thetahat]
x0 = [1 1 1 -5 -5 -5 0];
tspan= [0:0.001:70];
options = odeset('RelTol',1e-5,'AbsTol',1e-5);
[t,x]=ode45(@ross,tspan,x0,options)
function dxdt = ross(t,x)
dxdt = [master;slave;thetahat]
end
end
error is-
Undefined function or variable 'x'.
Error in ross (line 4)
master = [-x(2)-x(3);x(1)+0.5*x(2);2+x(3)*x(1)-4*x(3)];

3 Kommentare

You don't define x. How do you expect Matlab to know what you mean?
You also have two functions with the same name.
sorry! I am a beginner so could you please tell me how to define x?
If you have trouble with Matlab basics you may consider doing the Onramp tutorial (which is provided for free by Mathworks).

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Yongjian Feng
Yongjian Feng am 22 Jul. 2021
Bearbeitet: Yongjian Feng am 22 Jul. 2021
It seems like lines are all messed up. Do it make more sense to re-arrange them like this:
x0 = [1 1 1 -5 -5 -5 0];
tspan= [0:0.001:70];
options = odeset('RelTol',1e-5,'AbsTol',1e-5);
[t,x]=ode45(@ross,tspan,x0,options);
% This looks more like the function. Now x and t are input parameters, and
% they can be used inside the function
function dxdt = ross(t,x)
%function ross
L = [-1.0828 -1.6242;1.2513 1.8770;-0.0020 -0.0029];
master = [-x(2)-x(3);x(1)+0.5*x(2);2+x(3)*x(1)-4*x(3)];
y =[12*x(1)+2*x(2)+3*x(3)-12*x(4)-x(5)-3*x(6)-2*x(5)*thetahat;7*x(1)+3.5*x(2)+2*x(3)-7*x(4)-2*x(5)-2*x(6)-3*x(5)*thetahat];
slave = [-x(5)-x(6);x(4)+x(7)*x(5);2+x(6)*x(4)-4*x(6)]-L*y;
thetahat = 2*x(5)*[-0.2308 0.1538]*y;
%y =[12*x(1)+2*x(2)+3*x(3)-12*x(4)-x(5)-3*x(6)-2*x(5)*thetahat;7*x(1)+3.5*x(2)+2*x(3)-7*x(4)-2*x(5)-2*x(6)-3*x(5)*thetahat]
% The following lines moved up.
%x0 = [1 1 1 -5 -5 -5 0];
%tspan= [0:0.001:70];
%options = odeset('RelTol',1e-5,'AbsTol',1e-5);
%[t,x]=ode45(@ross,tspan,x0,options)
% function dxdt = ross(t,x)
dxdt = [master;slave;thetahat]
%end
end

2 Kommentare

Actually the relevant defnition of x is in the function signature:
function dxdt = ross(t,x)
% ^ here
Yongjian Feng
Yongjian Feng am 22 Jul. 2021
Bearbeitet: Yongjian Feng am 22 Jul. 2021
You are right! Modified again.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Programming finden Sie in Hilfe-Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by