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

Signal Discussion :

fonctions trigo de matrices


Sujet :

Signal

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 11
    Points : 4
    Points
    4
    Par défaut fonctions trigo de matrices
    Bonjour,

    Je cherche à créer une méthode numérique et pour cela j'ai besoin d'utiliser des exponentielles de matrices. Par exemple, j'ai une matrice carrée A et je calcule la série de Taylor correspondant à \cos(A). J'y suis parvenue en utilisant la fonction matlab funm(A,@cos) et cela fonctionne très bien.
    Par contre, lorsque je cherche à calculer \textup{sinc}(A) par le même biais, matlab râle :

    >> funm(A,@sinc)
    ??? Error using ==> sinc
    Too many input arguments.
    
    Error in ==> funm at 175
       F = U*diag(feval(fun,diag(T),0,varargin{:}))*U';
    Pourtant la fonction existe bel et bien sous matlab...
    Est-ce que quelqu'un aurait la gentillesse de m'indiquer où est l'erreur et comment je dois m'y prendre?

    Merci beaucoup!

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Si on lit la documentation de cette fonction, on se rend compte que funm(A,@sinc) ne fonctionnera pas car SINC ne fait pas partie de la liste des fonctions donnée (exp, log, cos, sin, cosh, sinh).

    Il faut écrire toi-même la fonction qui donne la kième dérivée de la fonction SINC : function f = myfun(x,k)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « 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)

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Ok je vois. Le but est donc de reconstruire la série entière soi-même?
    J'essaie de suivre tes indications. J'ai écrit cette fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function der=dersinc(k)
    syms x
    der=diff(sin(x)/x,k);
    end
    Je ne sais pas si c'est ce à quoi tu pensais. En fait, maintenant si j'ai bien compris, il faudrait pouvoir l'évaluer pour construire la série associée à sinc?
    Si oui, comment faire pour construire une telle série en matlab? Est-ce une bonne idée?

    Merci beaucoup à toi!

  4. #4
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    En fait, je me trompe peut-être, mais comme on sait que la série entière de sin(A) est

    \sin(A) = \sum_{k=0}^{\infty} (-1)^k \frac{A^{2k+1}}{(2k+1)!}

    ne peut-on pas simplement donner celle de sinc(A) comme ceci? :

    \textup{sinc}(A) = \sum_{k=0}^{\infty} (-1)^k \frac{A^{2k}}{(2k+1)!}

    (vraiment désolée pour l'écriture.. je ne trouve pas comment afficher le texte en latex...)

  5. #5
    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 plocq Voir le message
    (vraiment désolée pour l'écriture.. je ne trouve pas comment afficher le texte en latex...)
    C'est parce que le forum n'a pas de module latex. Il te faut utiliser un soft pour créer les images et puis les envoyer sur le forum, comme latexit par exemple :

    et :
    Images attachées Images attachées   
    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.

  6. #6
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    D'accord, je ne savais pas. Merci pour l'information.

    Par ailleurs, je suis toujours bloquée sur mon problème et commence à désespérer
    Si quelqu'un peu me dépanner, ce serait vraiment sympa!

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Où es-tu bloqué maintenant?
    Comme te l'a dit Dut:
    Citation Envoyé par Dut Voir le message
    Il faut écrire toi-même la fonction qui donne la kième dérivée de la fonction SINC : function f = myfun(x,k)
    Puis l'utiliser: funm(A,@myfun)

  8. #8
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta réponse.
    Mon problème est que j'ai écrit la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function der=dersinc(k)
    syms x
    der=diff(sin(x)/x,k);
    end
    qui semble-t-il est sensée me donner la kième dérivée de sinc(x) correctement. Mais je ne vois pas en quoi cette kième dérivée remplace la fonction sinc(x) elle-même J'aurais eu plutôt envie d'écrire sinc(x) sous forme de série entière comme mentionné dans un post précédent (mais là encore, je sèche quand à la façon dont je devrais m'y prendre).

    Et puis, je pense que ma fonction ne correspond pas à ce à quoi vous pensez parce que si (sans comprendre réellement ce que je fais et donc évidemment sans grand espoir) j'appelle ma fonction, j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    >> funm(A,@dersinc)
    ??? Error using ==> dersinc
    Too many input arguments.
     
    Error in ==> funm at 175
       F = U*diag(feval(fun,diag(T),0,varargin{:}))*U';
    Bref, je n'y vois rien de bon..

  9. #9
    Invité
    Invité(e)
    Par défaut
    As-tu bien regardé le prototype de la fonction?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function f = dersinc(x,k)
    Citation Envoyé par plocq Voir le message
    qui semble-t-il est sensée me donner la kième dérivée de sinc(x) correctement.
    C'est bien cela qu'il faut faire.

    PS: Si tu es bloqué, pense à t'inspirer du code des fonctions contenues dans FUNM edit funm

  10. #10
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Merci pour ton aide. J'ai suivi ton conseil et me suis inspirée des fonctions existantes.
    J'ai construit la fonction suivante

    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
    function f=dersinc(x,k)
     
    f=sin(x)/x;
     
    for i=1:k
     
       f_part=-i/x*f;
     
       if mod(i,4)==1
        f=f_part+cos(x)/x;
     
       elseif mod(i,4)==2
        f=f_part-sin(x)/x;
     
       elseif mod(i,4)==3
        f=f_part-cos(x)/x;
     
       else
        f=f_part+sin(x)/x;   
       end
     
    end
    J'ai vérifié, elle doit être correcte.

    Si j'ai bien compris, j'ai donc comblé la fonction inexistante dans matlab, donc l'appel

    devrait fonctionner?
    Or j'ai maintenant une erreur avec les dimensions que je n'arrive pas à identifier...La voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ??? Error using ==> mtimes
    Inner matrix dimensions must agree.
     
    Error in ==> funm at 175
       F = U*diag(feval(fun,diag(T),0,varargin{:}))*U';
    Je ne peux donc toujours pas passer de matrice en argument?

  11. #11
    Invité
    Invité(e)
    Par défaut
    Le problème est que ta fonction dersinc retourne une matrice et non un vecteur lorsqu'un vecteur est entré. Membre à membre => opérateur './'
    Regarde la différence entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x = rand(3,1);
    x/x
    x./x

  12. #12
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Ca y est! Ca marche maintenant

    Un grand merci pour tes conseils et ta patience!

  13. #13
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    je réactualise ce post parce que j'ai découvert un nouveau problème dans ma fonction qui calcule la série entière de sinc. J'ai donc complété la fonction manquante dans MATLAB en définissant ma fonction dersinc qui calcule la kième dérivée de sinc.
    Maintenant l'appel funm(A,@dersinc) me renvoie une valeur mais le problème est que la série ne converge pas quand elle devrait... : un exemple simple: en choisissant simplement A=0, je n'ai pas la convergence!! (bien évidemment je devrais l'avoir puisque ma série est de la forme donnée dans le post de Magelan ci-dessus..

    Bref, je croyais que MATLAB me calculais cette série mais ça n'est pas le cas. Où est l'erreur? et comment devrais-je y remédier?
    personnellement j'y réfléchis en vain...

    Si quelqu'un peu me dépanner c'est vraiment sympa!

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par plocq Voir le message
    en choisissant simplement A=0, je n'ai pas la convergence!!
    À noter que sin(x)/x; pour x=0 n'est pas défini.
    Tu peux regarder le code de la fonction SINC qui gère cela.

  15. #15
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    j'aurais dû voir ça.. ça fonctionne maintenant.
    Merci beaucoup pour ton aide!

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

Discussions similaires

  1. fonction renvoyant une matrice
    Par sub-0 dans le forum Débuter
    Réponses: 6
    Dernier message: 31/12/2008, 17h59
  2. algorithme pour calculer les fonctions trigo ?
    Par thomas0302 dans le forum Mathématiques
    Réponses: 3
    Dernier message: 24/12/2007, 22h44
  3. Fonctions manipulant des matrices
    Par panda31 dans le forum C
    Réponses: 24
    Dernier message: 14/06/2006, 10h28
  4. fonction trigo
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/11/2004, 11h51

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