problème avec pinv sous matlab
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

problème avec pinv sous matlab



  1. #1
    invite5544125f

    problème avec pinv sous matlab


    ------

    Bonjour,

    Je suis actuellement en stage et je dois faire un programme matlab. J'ai une boucle qui me permet via la méthode des approximations successives de tendre vers la valeur souhaité, sauf qu'avec certaines valeurs initiales, ma boucle me donne des valeurs trop petites comparé à la précision de matlab, du coup quand le programme veut la pseudo inverse (avec pinv) il me renvoit NaN...
    Le truc étant que mon maitre de stage m'a demandé de refaire ce programme qu'il avait déjà fait pour que je m'entraine sous matlab, à priori c'est la méthode qu'il a utilisé, sauf que maintenant il est absent pour 2 semaines...

    voila le code de la boucle :
    G=ones(J,1);
    H=zeros(J,Q);
    for i=1:J
    for j=i:J:Q
    H(i,j)=1;
    end
    end

    [Nx1 M1 C1]=Nb_photon2(Kik,phii,thetai,E0 i,Deltau,Pj,Z,Massk,khik_tran, rhok,kc1,EXi1,bi1);
    [Nx2 M2 C2]=Nb_photon2(Kik,phii,thetai,E0 i,Deltau,Pj,Z,Massk,khik_tran, rhok,kc2,EXi2,bi2);

    %Normalisation
    MN1=M1./(Mref1*ones(1,J));
    MN2=M2./(Mref2*ones(1,J));

    Matnulle=zeros(Ik,J);
    MN=[MN1 Matnulle ; Matnulle MN2] ;

    B=[MN' H']';
    %PROBLEME 3EME ITERATION, colonne 3 de MN1&2<précision de matlab donc invserse de B = NaN
    CN=pinv(B)*A;

    PS : Je suis sur que Nb_photon2 ne pose aucun soucis

    -----

  2. #2
    invitea29b3af3

    Re : problème avec pinv sous matlab

    Salut

    c'est difficile à dire comme ça vu qu'on n'a pas du tout tes données, mais si c'est un problème de valeurs trop petites, pourquoi ne pas normaliser B avant d'utiliser pinv?

  3. #3
    invite5544125f

    Re : problème avec pinv sous matlab

    Salut

    je ne sais pas trop quoi montrer comme données sans faire un post bourré d'info pas forcément utiles.
    Sinon B est déjà normalisé, et multiplié toute la matrice par une certaine valeur ne change rien vu que j'ai des valeurs autour de 1 et d'autre qui tendent vers 0 (et si je remplace ces valeurs par 0, je perd des infos essentielles).
    J'avais pensé prendre le logarithme de chaque élement de la matrice, le problème c'est qu'il y a des zeros...

  4. #4
    invitea29b3af3

    Re : problème avec pinv sous matlab

    Arf c'est un peu la m*rde effectivement... T'arrives à mettre ta matrice B en pièce jointe? un .mat, ou un .txt, comme tu veux.

    Sinon pourquoi pas utiliser l'exponentielle plutôt ?
    e^(élément de ta matrice)

    Mais bon après je sais pas quelles sont les valeurs maximales que t'as dans ta matrice... Mais disons que tu cherches ta valeur max, tu divises toute ta matrice de façon à ce que cette valeur max soit "acceptable comme exposant d'une exponentielle" et tu prends l'exponentielle... Mais je peux pas t'aider beaucoup plus que ça, désolé :S

  5. A voir en vidéo sur Futura
  6. #5
    invite5544125f

    Re : problème avec pinv sous matlab

    Voila la matrice B, vu qu'on est censé tendre vers la solution il y a plusieurs itérations repérés par l'indice n.

    Pour la méthode de l'exponentielle ça me semble une bonne idée, mais j'ai 2 problèmes :

    -Vu qu'on fait la pseudo inverse de B puis qu'on multiplie par A, est ce que ça ne va pas devenir un peu compliqué de récupérer les vrais valeurs de CN?
    -J'ai tenté de voir avec le log de CN (histoire de voir si ça compile) et j'obtiens des valeurs complexes qui font buger le programme plus loin, mais je ne vois pas pourquoi j'ai des complexes avec le log !
    Fichiers attachés Fichiers attachés

  7. #6
    invitea29b3af3

    Re : problème avec pinv sous matlab

    Salut

    3 choses:
    - le log va te renvoyer des valeurs complexes si tu prends le log d'un nombre négatif ! (puisque la fonction log est définie sur ]0;+inf[ )
    - C'est vrai que récupérer les bonnes valeurs de CN c'est un peu la galère.
    - regarde ce que dit l'help de pinv:
    pinv Pseudoinverse.
    X = pinv(A) produces a matrix X of the same dimensions
    as A' so that A*X*A = A, X*A*X = X and A*X and X*A
    are Hermitian. The computation is based on SVD(A) and any
    singular values less than a tolerance are treated as zero.
    The default tolerance is MAX(SIZE(A)) * NORM(A) * EPS(class(A)).

    pinv(A,TOL) uses the tolerance TOL instead of the default.


    Class support for input A:
    float: double, single

    See also rank.

    Reference page in Help browser
    doc pinv
    Traduction:
    -regarde quelle est la tolérance que Matlab utilise, donnée par max(size(B)) * norm(B) * eps(class(B))
    -choisis une tolérance encore plus petite et utilise pinv(B,tol) à la place de pinv(B)
    -et essaie auparavant de multiplier ta matrice genre par 100 par exemple et de voir si la tolérance que matlab choisit par défaut change ou non (pour savoir si ça vaut la peine de multiplier B par un facteur avant de faire la pinv). Parce que si ça se trouve ça ne change rien mais on sait jamais.

  8. #7
    invite5544125f

    Re : problème avec pinv sous matlab

    à priori j'ai une tolérance de 3e-15 par défaut, j'ai tenté de la descendre pas mal mais ça ne changeait rien, et multiplier la matrice non plus.
    Mon maitre de stage m'a dit de passer à autre chose donc pour le moment ce programme va rester de côté

    Merci quand même pour ton aide fiatlux !

  9. #8
    invitea29b3af3

    Re : problème avec pinv sous matlab

    De rien... littéralement

Discussions similaires

  1. résolution équation avec une intégrale sous matlab
    Par invite517da335 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 24/03/2011, 19h24
  2. Optimisation avec contraintes sous Matlab
    Par invite690e7e9c dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 01/11/2009, 09h29
  3. un graphique avec des heures en abscisse sous MATLAB
    Par inviteb9f49292 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 06/10/2009, 13h34
  4. problème sous matlab avec ode45
    Par invite80950a2d dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 13/02/2007, 18h35
  5. matlab : interaction avec image sous GUI
    Par invite45b865d1 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 29/10/2004, 23h36
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...