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 :

Résolution d'une fonction


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Résolution d'une fonction
    Il s'agit de la résolution d'une fonction bien déterminée .

    On considère le programme suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function y=F(x) 
    %fonction définie par morceaux 
    if x < -1 
    y= (x^2)+2-(1/(x+1)); 
    elseif x>-1 
    y=exp(1/(x+1)); 
    else 
    y=0; 
    end
    Modifier cette fonction pour que F([-5,-1,2;3,4]) renvoie [F(-5),F(-1),F(2);F(3),F(4)].

    J'ai résolu le problème pour un scalaire et pour un vecteur colonne mais je n'ai pas réussi à résoudre ce problème , merci de m'aider svp .

  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,

    Déjà dans un premier temps, je pense que tu as un problème dans ton énoncé, il n'est pas possible de créer une matrice [-5,-1,2;3,4]: il faut le même nombre de colonnes sur toutes les lignes...

    Pour le reste, es-tu sûr que ca te renvoie le bon résultat pour un vecteur colonne?

    Duf
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Bon voilà mon travail :

    1- Sur l’invite de Matlab, évaluer la fonction F aux points :
    a. x=3 ;
    b. x= [-5, -1,2]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function y=F(x) 
    % fonction définie par morceaux 
    if x < -1 
    y= (x^2)+2-(1/(x+1)); 
    elseif x>-1 
    y=exp(1/(x+1)); 
    else 
    y=0; 
    end
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function y=F(x) 
    % fonction définie par morceaux 
    x=[-5 ,-1 ,2] ;
    for i=1:(length(x))
         if x(i) < -1 
       y(i)= (x(i)^2)+2-(1/(x(i)+1)); 
       elseif x(i)>-1 
       y(i)=exp(1/(x(i)+1)); 
       else 
       y(i)=0; 
       end 
     end
    2-Modifier cette fonction pour que F([-5,-1,2;3,4]) renvoie [F(-5),F(-1),F(2);F(3),F(4)].

    Ce n'est pas une matrice mais un ensemble de valeurs .

    Lorsque j'ai défini x comme une matrice ça marche :

    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
    function y=F(x) 
    % fonction définie par morceaux 
     x=[-5 ,-1 ,2;3,4 1]
     % x1=[-5,-1,2]
    % x2=[3,4]
     for i=1:size(x,1)
      for j=1:size(x,2)
       if x(i,j) < -1 
       y(i,j)= (x(i,j)^2)+2-(1/(x(i,j)+1)); 
       elseif x(i,j)>-1 
       y(i,j)=exp(1/(x(i,j)+1)); 
       else 
       y(i,j)=0; 
       end
     end
     end
    Mais mon problème est de répondre à cette question , merci pour votre compréhension .

  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,

    Citation Envoyé par wajdibelhaj Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function y=F(x) 
    % fonction définie par morceaux 
    x=[-5 ,-1 ,2] ;
    for i=1:(length(x))
         if x(i) < -1 
       y(i)= (x(i)^2)+2-(1/(x(i)+1)); 
       elseif x(i)>-1 
       y(i)=exp(1/(x(i)+1)); 
       else 
       y(i)=0; 
       end 
     end
    x est la variable d'entrée de ta fonction, il ne faut pas la définir à l'intérieur de ta fonction.

    Par exemple, si tu as la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function y=F(x) 
    % fonction définie par morceaux 
    for i=1:(length(x))
         if x(i) < -1 
       y(i)= (x(i)^2)+2-(1/(x(i)+1)); 
       elseif x(i)>-1 
       y(i)=exp(1/(x(i)+1)); 
       else 
       y(i)=0; 
       end 
     end
    Tu peux l'appeler en faisant :
    et ainsi vérifier que y contient bien le résultat attendu.

    Le même principe s'applique pour la question 2.

    Citation Envoyé par wajdibelhaj Voir le message
    Mais mon problème est de répondre à cette question
    A quelle question n'arrives-tu pas à répondre?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  5. #5
    Membre éprouvé
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Points : 1 146
    Points
    1 146
    Par défaut
    il est fortement déconseillé d'utiliser les boucles en matlab et surtout les boucles imbriquées
    j'ai optimisé ta fonction :
    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
     
    function y=F(x)
     
    x1=zeros(size(x));
    x2=x1;
     
    x1((x<-1))=x(x<-1);
    x2((x>-1))=x(x>-1);
     
    % cas  x < -1
    y1= (x1.^2)+2-(1./(x1+1));
     
    % cas x>-1 
    y2=exp(1./(x2+1));
     
    % cas x==-1 
    y1((x>-1)|(x==-1) )=0;
    y2((x<-1)|(x==-1))=0;
    y=y1+y2;
    Si tu trouves ma réponse utile, n'oublies pas de voter pour ce me message

  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 soft001 Voir le message
    il est fortement déconseillé d'utiliser les boucles en matlab et surtout les boucles imbriquées
    C'est un peu exagéré, c'est fortement recommandé de ne pas mettre de boucle for, de là à les déconseiller... Ici, c'est un travail scolaire, donc mettre des boucles for me semble tout à fait adapté.

    De plus soft001, tu peux simplifier ton code : pourquoi utiliser 2 variables x1 et x2?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  7. #7
    Membre éprouvé
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Points : 1 146
    Points
    1 146
    Par défaut
    Oui vous avez raison, on peut utiliser une seulement variable soit x1 ou bien x2
    Si tu trouves ma réponse utile, n'oublies pas de voter pour ce me message

  8. #8
    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
    Dans cet exercic, on te demande de comprendre comment on peut manipuler des tableaux par morceaux grâce à des tableaux logiques.

    Voici le code qu'on te demande de comprendre. C'est une technique essentielle à une bonne maitrise de matlab. Je te recommande de passer un peu de temps pour bien comprendre ce code et être capable de réutiliser cette technique dans une autre situation.

    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
    function y=F(x) 
    %fonction définie par morceaux 
    if nargin==0
        x = -2:0.5:2 ;
        y = F(x) ;
        return
    end
     
    cas1 =  (x < -1);
    cas2 =  (x> -1);
    cas3 = (x==0);  
    x1 = x(cas1) ;
    x2 = x(cas2) ;
    y(cas1) = (x1.^2)+2-(1./(x1+1)); 
    y(cas2) = exp(1./(x2+1)); 
    y(cas3)= 0; 
    end
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/07/2012, 20h30
  2. Comment chronométrer une fonction
    Par 323 dans le forum Pascal
    Réponses: 3
    Dernier message: 19/03/2003, 20h24
  3. [VBA-E] avec une fonction value
    Par laas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2002, 13h22
  4. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14
  5. Une fonction avec des attributs non obligatoires
    Par YanK dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2002, 13h39

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