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 :

Mettre une intégrale en fonction


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Mettre une intégrale en fonction
    Salut a tous

    J'explique mon problème. Je dois optimiser une fonction de 2 variables (facile !) sauf qu'elle s'exprime sous forme d'intégrale.

    Je comptais utiliser la fonction "quad" et "fmincon". J'ai 3 polynômes P1, P2, P3 , fonction de 2 paramètres (a1,a2) qui sont en entrée de ma fonction initiale (function f = valeur (a1,a2)). Je veux optimiser : g = int (P1,0..3) + int(P2,3..6) + int (P3,6..9) qui sera fonction de (a1,a2).

    Le but étant de minimiser g, comment faire ?

    (PS : c'est immédiat sur maple, mais on me le demande sur matlab )

  2. #2
    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
    Salut,

    Si ce sont des polynômes, ne peux-tu pas passer par les primitives?

    Qu'est ce qui bloque avec les fonctions quad et fmincon? (d'ailleurs si tu n'as pas de contrainte, pourquoi ne pas utiliser fminsearch?)

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Je me suis trompé dans l'expression de g, il s'exprime sous la forme :

    g = int ( (1 + P1'^2)^(1/2), 0..3 ) + int ( (1 + P2'^2)^(1/2), 3..6 ) + int ( (1 + P3'^2)^(1/2), 6..9 )
    Voilà mon petit bout de programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function f = valeur(X); % X est un vecteur de 2 paramètres
     
    % le programme qui calcule en fct de X les polynomes
     
    g1 = @(t) sqrt(polyval(polyder(P1),t.)^2+1.); % Ligne 30
    g2 = @(t) sqrt(polyval(polyder(P2),t.)^2+1.);
    g3 = @(t) sqrt(polyval(polyder(P3),t.)^2+1.);
     
    f = quadl(g1,0,3) + quadl(g2,3,6)+ quadl(g3,6,9);
    et le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >> valeur([1,1]);
    ??? Error: File: valeur.m Line: 30 Column: 38
    Unbalanced or misused parentheses or brackets.
    Je ne comprends pas.

  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
    Je ne comprends pas bien ce que tu cherches à faire, mais pourquoi écris-tu :
    t.
    A quoi te sert ce point ici? (c'est la cause du message d'erreur)

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Mon but final c'est de minimiser f, mais je ne sais pas comment m'y prendre.

    Je voulais donc avoir en sorti de mon programme f pour différente valeur de X.

    Pourquoi j'écris t. ? Parce que Matlab me demande de l'écrire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Example:
            FUN can be specified as:
     
            An anonymous function:
               F = @(x) 1./(x.^3-2*x-5);
               Q = quad(F,0,2);
    Voici mon code en entier :
    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
    34
    35
     
    function f = valeur(X);
     
    a1=X(1);
    d2=X(2);
     
    % Le polynome P1.
     
    P1 = [a1 -3*a1 a1 0];
     
    % Les differentes contraintes de P2, mise sous forme matricielle.
     
    M2=[27 9 3 ; 216 36 6; 27 6 1];
    B2=[ 3-d2; -d2; polyval(polyder(P1),3) ];
     
    X2=M2/B2';
     
    P2 = [X2(1) X2(2) X2(3) d2];
     
    %Les differentes contraintes de P3, mise sous forme matricielle.
     
    M3 = [6*6*6 6*6 6 0; 9*9*9 9*9 9 0; 3*9*9 2*9 1 0; 3*6*6 2*6 1 0];
    B3 = [0; 0; polyval(polyder(P2),6) ; 1];
     
    X3=M3/B3';
     
    P3 = [X3(1) X3(2) X3(3) X3(4)];
     
    % la fonction a optimiser :
     
    g1 = @(t) sqrt(polyval(polyder(P1),t)^2+1);
    g2 = @(t) sqrt(polyval(polyder(P2),t)^2+1);
    g3 = @(t) sqrt(polyval(polyder(P3),t)^2+1);
     
    f = quadl(g1,0,3) + quadl(g2,3,6)+ quadl(g3,6,9);
    En enlevant les ".", c'est encore pire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ??? Error using ==> mpower
    Matrix must be square.
     
    Error in ==> valeur>@(t) sqrt(polyval(polyder(P1),t)^2+1) at 30
    g1 = @(t) sqrt(polyval(polyder(P1),t)^2+1);
     
    Error in ==> quadl at 63
    y = feval(f,x,varargin{:}); y = y(:).';
     
    Error in ==> valeur at 34
    f = quadl(g1,0,3) + quadl(g2,3,6)+ quadl(g3,6,9);
    Je désespère... J'espère avoir été clair...

  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 petitpotam Voir le message
    Mon but final c'est de minimiser f, mais je ne sais pas comment m'y prendre.

    Je voulais donc avoir en sorti de mon programme f pour différente valeur de X.

    Pourquoi j'écris t. ? Parce que Matlab me demande de l'écrire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Example:
            FUN can be specified as:
     
            An anonymous function:
               F = @(x) 1./(x.^3-2*x-5);
               Q = quad(F,0,2);
    Ne fais pas dire à Matlab ce qu'il n'a pas dit!!

    Il est écrit : x.^3, c'est à dire que chaque élément de la matrice x va être mis au cube. Si on avait x^3, alors ce serait le produit matricielle x*x*x (* et .* sont 2 opérateurs différents)

    Toi tu veux multiplier terme à terme, donc :
    g1 = @(t) sqrt(polyval(polyder(P1),t).^2+1);

  7. #7
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par petitpotam Voir le message
    Je me suis trompé dans l'expression de g, il s'exprime sous la forme :

    Voilà mon petit bout de programme :

    ...

    Je ne comprends pas.
    remplacepar

Discussions similaires

  1. [XL-2010] Mettre une couleur en fonction d'une cellule
    Par cdan974 dans le forum Excel
    Réponses: 3
    Dernier message: 26/06/2014, 15h10
  2. Réponses: 6
    Dernier message: 25/09/2006, 14h11
  3. Mettre une fonction à dormir
    Par Feeder_Fan dans le forum Général Python
    Réponses: 6
    Dernier message: 16/09/2006, 19h55
  4. [Excel]Mettre une variable dans une fonction
    Par soad029 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/04/2006, 12h00
  5. Réponses: 12
    Dernier message: 22/02/2005, 17h45

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