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 :

Warning: Matrix is singular to working precision


Sujet :

MATLAB

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Warning: Matrix is singular to working precision
    Bonjour,

    Je réalise un petit programme calculant le diagramme de rayonnement d'une antenne à ouverture circulaire, je vous met le code çi-dessous :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [theta]=meshgrid(0:1:180);
    a=2;
    fr=10*10^10;
    lambda=3*10^8/(fr);
    u = (2*pi*a*sin(theta)/lambda)
     
    fonction=2*(besselj(1,(u)))/u;
    Cependant je reçois en retour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Warning: Matrix is singular to working precision
    > In ouverturecirculaire at 7
    J'ai regardé sur un ancien post, pour ce dernier il s'agissait d'un pb avec la fonction "inv" mais moi je ne l'utilise pas et je ne comprends pas trop mon erreur, si quelqu'un pouvait me donner un coup de main svp???

    Merci d'avance.

  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 : 53 166
    Points
    53 166
    Par défaut
    Il me semble que le problème vient du fait que theta contient des valeurs identiques

    D'ailleurs, cette variable ne devrait-elle pas être un vecteur plutôt qu'une matrice ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    theta = linspace(0,180,181);
     
    a = 2;
    fr = 10*10^10;
    lambda = 3*10^8/(fr);
    u = (2*pi*a*sin(theta)/lambda);
     
    fonction = 2*(besselj(1,(u)))/u;
    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
    Membre averti
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Points : 311
    Points
    311
    Par défaut
    Le problème vient du fait que ta matrice est singulière (donc mal conditionnée) et donc ceci pause problème pour l'inverser. Ce n'est pas un problème de matlab, mais un problème de calcul matriciel.
    Normalement une matrice singulière n'est pas inversible, il te faut alors calculer son pseudo-inverse.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci dut, bien en fait ma "fonction" est en fonction de theta et me renvoie une valeur comprise entre 0 et 1 pour chaque valeurs de theta entre 0 et 180.
    Dans le cas de ce code, je n'obtiens qu'une valeur de "fonction"...

    andnicam, merci également de ta réponse, mais je ne comprends pas très bien : de quelle matrice parles tu qui est mal conditionnée? et ou procède t'on à l'inversion de cette dernière?

  5. #5
    Membre averti
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Points : 311
    Points
    311
    Par défaut
    U n'est pas un scalaire, mais une matrice, et tu divises par u (la division revient à multiplier par la matrice inversée).
    Pour faire la division par U matlab inverse U et là il te dit que ta matrice est mal conditionnée. D'ou ton message d'erreur de matlab. Celà n'a aucun rapport avec le fait de diviser par zéro qui produirait un autre message.

Discussions similaires

  1. Warning: Matrix is singular to working precision.
    Par Mrmeynis dans le forum MATLAB
    Réponses: 2
    Dernier message: 21/07/2009, 16h07
  2. [langage] Récupérer des Warning ??
    Par armada dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2003, 16h45
  3. [warning][properties]problème de police introuvable
    Par cyrdec dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 11/04/2003, 17h41
  4. Warnings lors de la compilation
    Par polo54 dans le forum C
    Réponses: 5
    Dernier message: 07/02/2003, 09h12
  5. Generation d'evenements a une date precise
    Par pascalzzz dans le forum MFC
    Réponses: 2
    Dernier message: 04/06/2002, 15h21

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