mardi 13 mars 2018

Hi guys,this is my MATLAB code.....the error is regarding integration tolerance

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