IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

optimisation avec plusieurs courbes


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 24
    Points : 9
    Points
    9
    Par défaut optimisation avec plusieurs courbes
    Bonjour à tous,

    J´ai un petit soucis sur un programme Matlab et je voulais avoir votre avis.
    Je possède une courbe experimentale (qui a en gros la forme d´une exponentielle) et qui représente la variation de pression entre l´entrée et la sortie d´une eprouvette en fonction de la vitesse du fluide qui traverse cette meme éprouvette (Pentrée=40MPa)

    L´equation qui modélise tout ceci m´est donnée et l´objectif est d´optimiser les deux paramètres inconnus de l´équation.


    J´ai taper le programme et les résultats obtenus sont plutot satisfaisant avec la fonction "lsqcurvefit".

    Mais afin d´affiner ma solution, on augmente le nombre de mesures. Pour cela on trace deux autres courbes (meme principe que précédemment) mais avec cette fois ci Pentrée=30MPa et Pentrée=20MPa.

    Par analogie, je pensais rentrer mes nouvelles valeurs expérimentales dans mon tableau de données (à la suite des précédentes) et de relancer l´optimisation.
    Malheureusement cela ne marche pas et je crois que cela vient du fait qu´il y a 3 courbes. Je suppose que Matlab ne peut pas gérer le fait de passer d´une courbe à l´autre. Avez vous une idée?

    Merci d´avance

    Doudy

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Pourrais-tu nous montrer le code incriminé ainsi qu'un échantillon des données qui posent problème? Cela nous faciliterait la tâche pour t'aider.

    Duf

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    Je ne peux malheureusement pas...

    Pour ce qui est du code, il doit etre correct puisqu´il fonctionne plutot bien avec une courbe.

    Ce qui est plus ennuyeux, c´est lorsque j´ai mes 3 courbes: Disons que l´ensemble de mes points est tracé (on appercoit trois courbes ayant grossierement l´allure de 3 portion d´exponentielle l´une a coté de l´autre). Je lance l´optimisation. Matlab me sors les valeurs de mes parametres, puis me trace ma courbe théorique.

    Le soucis c´est que cette courbe relie tous les points (y compris le dernier de la courbe 1 et le premier de la courbe 2, de meme pour le dernier de la 2 et le premier de la 3)

    Ces morceaux de courbes supplémentaire n´ont pas de signification physique et je pense que ce sont eux qui me fausse mon résultat

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    si tu ne peux pas nous montrer ton code, il faut que tu expliques mieux ta démarche. L'équation que tu cherche à ajuster possède un paramètre sur la pression d'entrée? Peux-tu nous montrer cette équation? Les données des 3 courbes sont-elles données pour les mêmes vitesses du fluide? (si j'ai bien compris la vitesse du fluide est ton abscisse).

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    Disons que l´expérience me donne la vitesse du fluide pour un DP donné (pourtant oui V est bien en abscisse).

    Or, meme si le DP est le meme à travers mon eprouvette, la vitesse ne sera pas la meme si en entrée j´ai 10 ou 40 bars.

    J´obtiens donc un réseau de courbes. Je fixe un certain Pentrée et je trace DP=f(V). Puis je réitère le procédé avec différentes pressions d´entrée.



    L´équation est la suivante:
    DP=A*alpha*V+B*beta*V² avec A et B connu et alpha, beta parametres à optimiser.

    Quand j´optimise pour une courbe, tout va bien. Mais dès lors que je rentre l´ensemble des valeurs (points des 3 courbes), ca ne fonctionne plus.

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Citation Envoyé par doudy22 Voir le message
    Or, meme si le DP est le meme à travers mon eprouvette, la vitesse ne sera pas la meme si en entrée j´ai 10 ou 40 bars.
    Donc
    ta pression en entrée est un paramètre de ton équation, en fait tu cherches alpha et beta tel que :
    si Pentrée=40MPa => DP=A1*alpha*V+B1*beta*V²
    si Pentrée=30MPa => DP=A2*alpha*V+B2*beta*V²
    si Pentrée=20MPa => DP=A3*alpha*V+B3*beta*V²
    donc tu cherches alpha et beta qui ajuste au mieux ces trois équations, non?

    (et j'ai l'impression que tu utilises la même équation quelque soit ta pression d'entrées?)

  7. #7
    Futur Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    C´est exactement ca Magelan. Je recherche les valeurs de alpha et beta qui optimise ces trois courbes.

    (et oui c´est une bonne impression. Quelque soit ma pression en entrée, c´est DP que je calcul. Donc l´equation est la meme).


    J´avais penser contourner le "problème" en optimisant la pression de sortie. C´est a dire en ecrivant DP=Pin-Pout et changer le Pin de coter pour le faire intervenir en temps que variable.

    Mais une optimisation avec lsqcurvefit d´une fonction de deux variables est impossible je crois. La solution serait de faire du surface fitting mais je ne connais pas du tout le procédé. Enfin, quand bien meme cette solution fonctionnerait...

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Plutôt que comme une nouvelle variable, je verrais plus Pin comme un paramètre de ta fonction.

    J'ai fait un exemple : supposons que l'équation soit :
    Pout = 4*alpha*V+0.132*beta*V²-Pin

    J'ai pris des valeurs arbitraires, et j'ai fait ce programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    % abscisse des données
    xdata = [1:20 1:20 1:20];
     
    % paramètres de la fonction
    A1 = 4;
    B1 = 0.132;
    c = [ones(1,20) ones(1,20)*100 ones(1,20)*1000]; % Ici c représente Pin
     
    % Calcul d'un set de données en y ajoutant un peu d'aléatoire
    ydata = (A1*3.6822*xdata+B1*32.1233*xdata.^2+c)+((-1)^(round(rand))*rand(1,60)*50);
     
    % Affichage des données
    figure
    plot(xdata(1:20),ydata(1:20),'ro');
    hold on
    plot(xdata(21:40),ydata(21:40),'go');
    plot(xdata(41:60),ydata(41:60),'ko');
     
    % Ajustement des paramètres
    x = lsqcurvefit(@(x,xdata) myfun(x,xdata,c),[0;0],xdata,ydata)
     
    % Calcul des nouvelles valeurs en fonction des nouveaux paramètres
    ydata2 = (A1*x(1)*xdata+B1*x(2)*xdata.^2+c);
     
    % Affichage des données
    figure
    plot(xdata(1:20),ydata(1:20),'ro');
    hold on
    plot(xdata(21:40),ydata(21:40),'go');
    plot(xdata(41:60),ydata(41:60),'ko');
    plot(xdata(1:20),ydata2(1:20));
    plot(xdata(21:40),ydata2(21:40));
    plot(xdata(41:60),ydata2(41:60));
    et la fonction myfun :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function F = myfun(x,xdata,c)
    A1 = 4;
    B1 = 0.132;
    F=A1*x(1)*xdata+B1*x(2)*xdata.^2+c;
    Ainsi toutes les données sont ajustées en fonction de la pression Pin.
    En espérant que cela puisse t'aider.

  9. #9
    Futur Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    C´est grosso modo le code que j´avais entré dans mon programme.

    Mais les resulats numeriques obtenus sont assez éloigné de la réalité (bien que les courbes soient plutot satisfaisantes)

    Selon toute vraissemblance, je dois juste avoir des soucis d´hypothèses (trop de simplifications tuent les simplification...)

    Mais merci à toi. Je suis rassurer. Le problème ne vient vraissemblablement pas de la facon de résoudre.

    Doudy

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    le fait que les résultats sont un peu éloignés de la réalité vient peut être de la méthode d'optimisation, par exemple si tu utilise un optimiseur local il peut se trouver dans des minimums locaux et non le minimum global.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Double axes des ordonnées avec plusieurs courbes
    Par zebino dans le forum MATLAB
    Réponses: 10
    Dernier message: 16/11/2012, 20h22
  2. graphique avec plusieurs courbes
    Par eno97 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/01/2012, 12h40
  3. Graphique dynamique avec plusieurs courbes
    Par thefutureisnow dans le forum Débuter
    Réponses: 1
    Dernier message: 12/07/2011, 13h56
  4. Graph avec plusieurs courbes - GD
    Par vargasvan dans le forum Modules
    Réponses: 4
    Dernier message: 11/05/2006, 13h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo