Effacer les filtres
Effacer les filtres

How to simplify this function?

2 vues (au cours des 30 derniers jours)
Shilp Dixit
Shilp Dixit le 18 Jan 2013
Hi,
I want to create u as a function of two variables x1 and x2 with the conditions as follows: if true
U = G(a.s1+(1-a).s2);
% Here
% G is a constant
% a is a constant
% s1 and s2 are functions of x1 and x2 and are described below
end
if true
% s1 as func. of x1,x2
if x1(x1-x2) >= 0
s1 = x1;
else
s1 = 0;
% s2 as func. of x1, x2
if -x2(x1-x2) >= 0
s2 = x2;
else
s2 =0;
end
end
To achieve this is I wrote a modified Signum function(modsign): http://tny.cz/e67c7d01
and use it to define the parameter U as
if true
U = G(a*x1*modsign(x1(x1-x2),0) + (1-a)*x2*modsign(-x2(x1-x2),0));
end
Please suggest a better and simpler way to do it. Preferably I want U, s1 and s2 as functions of x1 and x2 without using this convoluted way that I have used.
Thanks.
Shilp
  2 commentaires
Walter Roberson
Walter Roberson le 18 Jan 2013
Are you sure that you want to index x1 by the difference between x1 and x2?
x1(x1-x2)
is an indexing operation.
Perhaps you want multiplication in there?
x1 * (x1-x2)
??
Shilp Dixit
Shilp Dixit le 18 Jan 2013
Sorry about the confusion. I want multiplication everywhere.

Connectez-vous pour commenter.

Réponses (2)

Thorsten
Thorsten le 18 Jan 2013
Modifié(e) : Thorsten le 18 Jan 2013
Note that x times y is coded x*y in Matlab.
I would go straigthforward
function U = myfunction(x1, x2)
G = 1.0; % replace with your constants
a = 0.5;
if x1*(x1 - x2) >= 0
s1 = x1;
else
s1 = 0;
end
if -x2*(x1 - x2) >= 0
s2 = x2;
else
s2 =0;
end
U = G*(a*s1 + (1-a)*s2);
  1 commentaire
Shilp Dixit
Shilp Dixit le 18 Jan 2013
Hi Thorsten,
Thanks for your answer. Now here lies my problem.
1. U control input for the system.
2. x1 and x2 are states of the system.[x1, x2, x3, x4]
I wanted to create U as a function of x so that could create a lyapunov function to solve my sliding mode control surface. Entire problem is as follows:
1. Problem statement http://sdrv.ms/WMjL9a
Perhaps these will explain what I am trying to do better.
Thanks.
Shilp

Connectez-vous pour commenter.


Thorsten
Thorsten le 18 Jan 2013
Hi Shilp, please try to ask a more detailed, more Matlab specific question, may be then I could provide some help.
  1 commentaire
Shilp Dixit
Shilp Dixit le 18 Jan 2013
Hi,
I would be glad with some help in sliding mode control and its solution via lyapunov function in matlab.
I have a sliding surface as
if true
% Sliding Surface
S = C.x
% C is 1X4 and x is 4X1.
% Ideally C.x = 0
% lyapunov function
V = 0.5*S^2 % 0.5 times S squared
% differentiating w.r.t x
V' = S.S'
% lyapunov function criteria
S.S' < 0 for all S ~=0
end
How do I find out the coeff of matrix C using this method in MATLAB.
Thanks. Shilp

Connectez-vous pour commenter.

Catégories

En savoir plus sur Matrix Computations dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by