Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Invité de passage
    Inscrit en
    septembre 2012
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : septembre 2012
    Messages : 1
    Points : 0
    Points
    0

    Par défaut Systeme chaotique Lorenz controle Backstepping

    Bonjour,
    Je voudrais stabiliser le système de Lorenz avec la méthode de controle Backstepping sur Matlab, j'ai déja fait un code mais ça me donne rien.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    clear all          % just a clear start
    
    p1=10;
    p2=28;
    p3=8/3;
    
    Tf=10;
    Ts=1;
    smplTime=0:Ts:Tf;
    J=Tf/Ts;
    input=zeros(1,J);
    output=zeros(3,J);
    
    xinit=[10;10;10];
    
    z=zeros(3,J);
    
    gamma=1;
    c0=-0.1;
    c3=50;
    
    output(:,1)=xinit;
    global U;
    u=0;
    U=u;
    
    for k=1:J
        z(:,k)=output(:,k);
        input(1,k)=u;
        x=Lorenz_function(xinit,input(1,k),smplTime(k),Ts);
        output(:,k)=x;
        xprime=x;
        alpha1=-c0*z(1,k);
    
        z(2,k)=output(2,k)-alpha1;
        
        p1dachprim=-gamma*(c0*output(1,k)-c0*alpha1-z(1,k))*z(2,k);
        p2dachprim=gamma*output(1,k)*z(2,k);
        p3dachprim=-gamma*output(3,k)*z(3,k);
        
        p1dach=-gamma*(c0*output(1,k)-c0*alpha1-z(1,k))*z(2,k)+p1;
        p2dach=gamma*output(1,k)*z(2,k)+p2;
        p3dach=-gamma*output(3,k)*z(3,k)+p3;
        
        alpha2=p1dach+p2dach-c0*p1dach+(1-c0*p1dach)*c0;
        
        
        z(3,k)=output(3,k)-alpha2;
        
        u =-c3*z(3,k)+output(1,k)*z(2,k)-output(1,k)*output(2,k)+p3dach*output(3,k)+(1-c0-c0^2)*p1dachprim+p2dachprim;
    end
    
    % subplot(3,1,1);
    plot(smplTime,output(1,:))
    % subplot(3,1,2);
    % plot(smplTime,output(2,:))
    % subplot(3,1,3);
    % plot(smplTime,output(3,:))
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    function x1 = Lorenz_function( x0,u,t0, Ts)
    %LORENZ_FUNCTION Summary of this function goes here
    %   Detailed explanation goes here
    global U
    
    u=U;
    ini_c = x0;
    t0c = t0; tfc = t0+Ts;
    optnc = odeset('RelTol',1e-4,'AbsTol',1e-6);
    [tc, xc] = ode45(@lorenz_sub, [t0c tfc], ini_c, optnc);
    x1 = xc(end, :);
    end
    
    function dxdt = lorenz_sub(t, x)
    %the Lorenz-system description
    % continuous time
    %
    global U
    
    u = U;
    p1=10;
    p2=28;
    p3=8/3;
    
    dxdt=[ p1*(x(2)-x(1));
        p2*x(1)-x(2)-x(1)*x(3);
        x(1)*x(2)-p3*x(3)+u];
    end
    Quelqu'un peut m'aider ? Merci à vous.

  2. #2
    Dut
    Dut est déconnecté
    Rédacteur/Modérateur

    Avatar de Dut
    Homme Profil pro Jérôme Briot
    Ingénieur hospitalier
    Inscrit en
    novembre 2006
    Messages
    17 547
    Détails du profil
    Informations personnelles :
    Nom : Homme Jérôme Briot
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : novembre 2006
    Messages : 17 547
    Points : 45 574
    Points
    45 574

    Par défaut

    Première remarque, gamma et input sont des noms de fonctions MATLAB. Il est donc fortement déconseillé de les utiliser comme nom de variable.

    Ensuite, ton code génère l'erreur suivante :
    ??? Error using ==> plot
    Vectors must be the same lengths.
    
    Error in ==> Untitled2 at 54
    plot(smplTime,output(1,:))
    ce qui est normal car la taille des deux variables ne correspond pas :
    Code :
    1
    2
    3
    4
    5
    >> whos smplTime output
      Name          Size            Bytes  Class     Attributes
    
      output        3x10              240  double              
      smplTime      1x11               88  double
    Sur mon blog : Toujours pas de certification MATLAB dans les pays francophones

    Ma page personnelle avec mes contributions MATLAB (R2011b/R2014a - Windows, Linux et Mac) et Hardware

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •