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 :

tracer une courbe d'une fonction complexe


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 15
    Points : 4
    Points
    4
    Par défaut tracer une courbe d'une fonction complexe
    Bonjour,

    je viens tout juste de me mettre à MATLAB pour effectuer un traçage de courbe pour un projet acoustique.
    Bref, je suis totalement bloqué,

    voila se que je voudrai faire :

    On a une fonction complexe z(f)=22.3+i((-116/f)+f*0.063), pour f compris dans la plage [1;25000]
    pour chaque z(f) calculer ( de z(1) à z(25000) ) je voudrai " sauvegarder" les résultats et ainsi tracer la courbe de z(f) en échelle log, avec en abscisse les fréquences et en ordonnée Z(f) sur MATLAB

    J'ai effectué diverses recherches et tuto mais sans réussir à tracer ma courbe... Avec des fonctions non complexe j'y arrive !

    EDIT : Normalement je devrais obtenir une courbe ressemblant à celle-ci :
    http://www.justdiyit.com/wp-content/...MP-HP-Reel.jpg

    Pouvez-vous m'aider s'il vous plait ? C'est très important pour moi !

    Merci à vous,
    bonne journée,

    Nicolas

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Salut,

    Au vu de la formule de ta courbe, autant juste la tracer sur sa partie imaginaire vu que sa partie réelle ne dépend pas de f. A mon avis tu peux travailler sur Imag(Z).
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Merci du temps passé pour me répondre, bon finalement je dois tracer le module de ce nombre complexe ( fonction 'abs' ) cependant lorsque je trace celui-ci ci je n'obtiens pas se que je devrai avoir avec la formule en rouge dans mon premier message...
    J'ai donc développer la formule ( car celle-ci était une forme réduite que j'ai calculé ( peut être que mon calcul était faux...))
    Et malheureusement.... mon programme ne contient aucune erreurs mais aucune courbe ne se trace, j'ai juste la figure qui est affiché en log avec aucune courbe ?!... Quel est le problème ?

    Voici mon programme en question :

    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
    clear all; close all; clc;
     
    %Initialisation
     
    Qms=7.88;
    Qes=0.37;
    f=0;
    fs=43;
    i=0;
    w=2*pi*f;
    ws=2*pi*fs;
     
    %fonction boucle
     
    for i=1:24999;
        f=i+1;
        z(f)=((1+1/(Qes*(Qms^-1)))+(1j*((-ws/Qes*w)+(w/(Qes*ws)))));
        i=i+1;
    end
     
    R=abs(z(f));    
    f=(1:1:25000);
    figure, loglog(f,R,'r');
    xlabel('Fréquence', 'fontSize', 15);
    ylabel('Impédance acoustique Z', 'fontsize', 15);
    Merci d'avance de votre aide,
    cordialement,

    Nicolas

    EDIT : c'est bon j'ai trouvé mon erreur ! enfaite dans la boucle après f=i+1 il fallait rajouter w=2*pi*(f+1) car sinon w=0 et donc pas de courbe !
    Cependant je n'obtiens pas la courbe que je devrai obtenir mais ça vous y pouvez rien ^^' !

    Merci ! cordialement Nicolas


    ( je laisse quand même ouvert mon sujet car il est possible que je revienne vous voir )

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Citation Envoyé par Gk_44 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
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    clear all; close all; clc;
     
    %Initialisation
     
    Qms=7.88;
    Qes=0.37;
    f=0;
    fs=43;
    i=0;
    w=2*pi*f;
    ws=2*pi*fs;
     
    %fonction boucle
     
    for i=1:24999;
        f=i+1;
        z(f)=((1+1/(Qes*(Qms^-1)))+(1j*((-ws/Qes*w)+(w/(Qes*ws)))));
        i=i+1;
    end
     
    R=abs(z(f));    
    f=(1:1:25000);
    figure, loglog(f,R,'r');
    xlabel('Fréquence', 'fontSize', 15);
    ylabel('Impédance acoustique Z', 'fontsize', 15);
    Petite remarque sur le code, la boucle peut (et devrait) être écrite de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for f = 1:24999
        z(f)=((1+1/(Qes*(Qms^-1)))+(1j*((-ws/Qes*w)+(w/(Qes*ws)))));
    end
    Pourquoi introduire une variable i?
    De plus, inutile d'ajouter en fin de boucle i = i + 1 (ou f = f + 1 dans mon cas), cet incrémentation est implicite dans Matlab.
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Merci de votre réponse !

    j'ai mis une variable i parce que je suis tout nouveau sur matlab et donc je pensais que l'incrémentation ne se faisait pas automatiquement...
    Mais du coup si je fais votre boucle j'obtiens une erreur : " Index exceeds matrix dimensions."

    pouvez vous m'aider, merci

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Cette expression

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((1+1/(Qes*(Qms^-1)))+(1j*((-ws/Qes*w)+(w/(Qes*ws)))));
    ne dépendant pas de la variable de boucle, je suppose que dans un premier temps, il manque ceci dans la boucle w=2*pi*(f+1). Peux tu nous dire à quel ligne ce produit cette erreur? Es-tu sûr qu'elle se produit dans la boucle?
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Gooby Voir le message
    Cette expression

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((1+1/(Qes*(Qms^-1)))+(1j*((-ws/Qes*w)+(w/(Qes*ws)))));
    ne dépendant pas de la variable de boucle, je suppose que dans un premier temps, il manque ceci dans la boucle w=2*pi*(f+1). Peux tu nous dire à quel ligne ce produit cette erreur? Es-tu sûr qu'elle se produit dans la boucle?
    Exact, elle n'est pas dans la boucle

    "Index exceeds matrix dimensions.

    Error in Untitled (line 21)
    figure, loglog(f,abs(z(f)),'r');"

    Excat il me manquait, [CODEINLINE]w=2*pi*(f+1)[/CODELINE], cependant j'ai fais w=2*pi*(f)

    Je vous montre mon code actuel :

    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
    clear all; close all; clc;
     
    %Initialisation
     
    Qms=7.88;
    Qes=0.37;
    f=0;
    fs=43;
    i=0;
    ws=2*pi*fs;
     
    %fonction boucle
     
    for f=1:24999;
        w=2*pi*(f);
        z(f)=((1+1/(Qes*(Qms^-1)))+(1j*((-ws/Qes*w)+(w/(Qes*ws)))));
    end
     
    %graph    
    f=(1:1:25000);
    figure, loglog(f,abs(z(f)),'r');
    xlabel('Fréquence', 'fontSize', 15);
    ylabel('Impédance acoustique Z', 'fontsize', 15);
    Avec plot c'est la même chose

    EDIT c'est bon j'ai trouvé !
    Mais du coup, j'obtiens une grosse fonction affine...

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Citation Envoyé par Gk_44 Voir le message
    Exact, elle n'est pas dans la boucle

    "Index exceeds matrix dimensions.

    Error in Untitled (line 21)
    figure, loglog(f,abs(z(f)),'r');"

    Excat il me manquait, [CODEINLINE]w=2*pi*(f+1)[/CODELINE], cependant j'ai fais w=2*pi*(f)

    Je vous montre mon code actuel :

    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
    clear all; close all; clc;
     
    %Initialisation
     
    Qms=7.88;
    Qes=0.37;
    f=0;
    fs=43;
    i=0;
    ws=2*pi*fs;
     
    %fonction boucle
     
    for f=1:24999; % Ici
        w=2*pi*(f);
        z(f)=((1+1/(Qes*(Qms^-1)))+(1j*((-ws/Qes*w)+(w/(Qes*ws)))));
    end
     
    %graph    
    f=(1:1:25000); % et Ici
    figure, loglog(f,abs(z(f)),'r');
    xlabel('Fréquence', 'fontSize', 15);
    ylabel('Impédance acoustique Z', 'fontsize', 15);
    Avec plot c'est la même chose
    Tu ne vois pas une incohérence sur les 2 lignes où j'ai ajouté des commentaires?
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Exact, j'ai vu l'erreur juste après ! Merci !
    Mais du coup, j'obtiens pas du tout se que je devrai obtenir...

    voici mon code final :

    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
     clear all; close all; clc;
     
    %Initialisation
     
    Qms=7.88;
    Qes=0.37;
    f=0;
    fs=43;
    i=0;
    ws=2*pi*fs;
     
    %fonction boucle
     
    for f=1:1:25000;
        w=2*pi*(f);
        z(f)=1+(1/(Qes*(Qms^-1)))+(1j*((-ws/(Qes*w))+(w/(Qes*ws))));  %essai fonction 2
        %z(f)=1+((Qms/Qes)*((1i*w/ws)*(1/Qms)/((1i*w/ws)^2)+(1i*w/ws)*(1/Qms)+1));  %Essais fonction 1
    end
     
    %graph    
    I=imread('C:\zhptheorie.jpg');
    imshow(I);
    f=(1:1:25000);
    figure, loglog(f,abs(z(f)),'r');
    xlabel('Fréquence', 'fontSize', 15);
    ylabel('Impédance acoustique Z', 'fontsize', 15);
    Mon résultat est censé ressemblé à celui-ci :



    et à la place j'ai ça : ...


    Merci de votre aide en tous cas

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Je dirai que c'est probablement à cause de tes paramètres. Peut être un problème d'ordre de grandeur? fs = 43 quoi?
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

Discussions similaires

  1. [Débutant] passage d'une courbe fermée à une courbe non fermée
    Par diadieuf dans le forum MATLAB
    Réponses: 0
    Dernier message: 11/03/2011, 18h43
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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