i googled and found the event function,but not sure how to use it.....
whenever i run my code...this is the error i m getting
Warning: Failure at t=4.584986e-01. Unable to meet integration tolerances without reducing the step size below the smallest value allowed (8.881784e-16) at time t.
In ode45 (line 308) In func (line 8)
this is my code
function [dxdt]=funsys(t,x)
%given conditions
theta1=1;
theta2T =[0.5,2];
theta2=transpose(theta2T);
m1=norm(theta1);
m2=norm(theta2);
M=max(m1,m2);
%tbar=M-u;
phi1=x(1)^2;
n1=norm(phi1);
phi2T=[x(1),sin(x(2))];
phi2=transpose(phi2T);
n2=norm(phi2);
n1dot=diff(phi1);
n2dot=diff(phi2);
c1=5;
c2=5;
etha1=1;etha2=1;
gamma=4;
sigma=0.05;
n=0.1; kd=1;
s=0.8;
theta_cap=x(3);
z1=x(1); %first error
z1dot=0;
%tuning function
tau1=(gamma/4*etha1)*n^2*z1^2-gamma*sigma*theta_cap;
alpha1=-(c1+1)*z1-(1/4*etha1)*theta_cap*n1*n1*z1;%virtual control input
z2=x(2)-alpha1;%second error
dalpha1dx1=-2*(c1+1)*z1-(1/4*etha2)*(theta_cap*n1*n1); %differentiating alpha wrt 'x1'.
%update function
tau2=tau1+(gamma/2*etha2)*n2^2*z2^2+dalpha1dx1^2*n1^2*z2^2;
tau2dot=0;
dalpha1dt=-2*z1*(c1+1)*z1dot-(1/4*etha1)*((tau2*n1^2*z1)+
(theta_cap*2*n1*n1dot*z1)+(theta_cap*n1*n1*z1dot));%differentiating alpha wrt 't'.
dalpha1dxidot=-2*((c1+1)*z1dot)-(1/4*etha2)*((tau2*n1^2)-
(2*theta_cap*n1*n1dot)); %differentiating dalpha1dx1 wrt 't'.
dalphadcap=-(1/4*etha1)*(n1*n1*z1); %differentiating alpha wrt 'theta_cap'.
dalpha1_capdt=-(1/4*etha2)*((2*n1*n1dot*z1)+(n1^2*z1dot));
z2dot=-dalpha1dt;
v=(c2+0.5+kd)*z2+((1/2*etha2)*theta_cap*n2*n2*z2)-(dalpha1dx1*(z2+alpha1))+
(((1/2)*etha2)*theta_cap*(dalpha1dx1^2)*(n1^2)*z2)-(dalphadcap*tau2);
%control law
u=-(z2*v^2)/((1-s)*sqrt(z2^2*v^2+n^2));
vdot =(c2+0.5+kd)*z2dot+(1/2*etha2)*(tau2*n2*n2*z2+2*theta_cap*n2*n2dot*z2+theta_cap*n2^2*z2dot)-(dalpha1dxidot*(z2+alpha1))+(1/2*etha2)*((tau2*dalpha1dx1^2*n1*n1*z2)+
(theta_cap*2*dalpha1dx1*dalpha1dxidot*n1^2*z2)+(theta_cap*dalpha1dx1*dalpha1dx1*2*n1*n1dot*z2)+(theta_cap*dalpha1dx1*dalpha1dx1*n1^2*z2dot))-(dalphadcap*tau2dot+tau2*dalpha1_capdt);
udot=-((z2dot*v^2/((1-s)*(sqrt(z2^2*v^2+n^2))))+((z2dot*2*v*vdot)/((1-s)*(sqrt(z2^2*v^2+n^2))))+(-0.5)*((z2^2*v^2+n^2)^(-1/2)*(2*z2*z2dot*v^2+2*z2*v*vdot)/((1-s)*(z2^2*v^2+n^2))));
%dsolve(udot);
a=abs(u);
%to find q[u]
q=0;
if((0.05< a) &&(a<= 0.08) && (udot<0) || (0.08< a) &&(a<= 0.2) && (udot>0))
q=0.08*sign(u);
end
% function[]=funsys(t,y)
if((0.08< a) &&(a<= 0.2) && (udot<0) || (0.2< a) &&(a<= 0.32) && (udot>0))
q=1.28*sign(u);
end
if((0< a) &&(a<= 0.05) && (udot<0) || (0.05< a) &&(a<= 0.02) && (udot>0))
q=0;
end
%if(
dxdt=zeros(4:1);
dxdt(1) = x(2) + phi1*theta1;
dxdt(2) = q + phi2T*theta2;
dxdt(3) = tau2;
dxdt = dxdt';
end`
Aucun commentaire:
Enregistrer un commentaire