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

C Discussion :

numerical recipes -> erreurs ?


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 79
    Par défaut numerical recipes -> erreurs ?
    Bonjour à tous, j'ai besoin pour un projet d'un algorithme permettant d'obtenir les valeurs/vecteurs propres d'une matrice tridiagonale.
    Je me suis tourné vers numerical recipes in C, et plus particulièrement la fonction tqli (ici : http://www.library.cornell.edu/nr/bookcpdf/c11-3.pdf , pages 6 et 7 du document)

    Or, certains éléments de ce programme me semblent bizarres :
    (ne vous souciez pas de pythag et SIGN)

    -> Les indices des tableaux commencent à 1 ????
    -> On ne sort jamais de la boucle do /while, sauf dans des cas particuliers (matrice de dimension n*n, n=2, ou si certains éléments de la subdiagonale sont nuls, ce qui n'est pas mon cas....).

    Bref, que pensez vous de ce programme, ai-je une chance de le faire fonctionner ?
    Et que pensez-vous de Numerical recipes en général ? Est-ce plutôt fiable ?

    Merci à vous

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    Citation Envoyé par BenjaminLustrement
    -> Les indices des tableaux commencent à 1 ????
    C'est normal, les codes étaient à l'origine écris en fortran où les indices commencent à 1, donc plutôt que de modifier tous les indices, tu déclare un tableau avec un cellule de plus est l'indice 0 ne sera jamais utilisé.

  3. #3
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par BenjaminLustrement
    -> Les indices des tableaux commencent à 1 ?
    Oui, c'est tres embetant. C'est un heritage du Fortran, et les auteurs en discutent dans l'introduction (chapitre 0).

    -> On ne sort jamais de la boucle do /while, sauf dans des cas particuliers (matrice de dimension n*n, n=2, ou si certains éléments de la subdiagonale sont nuls, ce qui n'est pas mon cas....)
    Il faudrait regarder l'algo de pres. Peut-etre que ta matrice ne supporte pas la transformation que tu essaies d'appliquer.

    Et que pensez-vous de Numerical recipes en général ? Est plutôt fiable ?
    Definitivement oui. Mais je prefere utiliser la version Fortran (apres tout, c'est un langage concus pour ce genre d'application). Il n'est pas exagerement difficile d'interfacer des fonctions Fortran avec le corps principal du programme ecrit en C.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 79
    Par défaut
    Ok pour les indices....
    Quant à ma matrice, il est écrit dans l'intro de la fonction que ce programme est utilisable avec des matrices carrées, réelles, tridiagonales et symétriques.... C'est exactement mon cas.
    Bon, je vous remercie et vous tiens au courant...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 79
    Par défaut
    Non, ça ne marche toujours pas... J'utilise les vecteurs suivants :

    (d -> vecteur = diagonale principale, e -> diagonale inférieure ou supérieure)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    float d[9] = {0,1,2,3,4,5,6,7,8};
    float e[9] = {0,0,7,6,5,4,3,2,1};
    (Attention, au debut du prog les valeurs de e sont décalées à gauche et on obtient : {0,7,6,5,4,3,2,1,1} )

    Comme ça a été dit plus haut l'indice 0 n'est pas utilisé, et on commence à 1.
    Il semble aussi que la présence de 0 dans les diagonales empeche le bon fonctionnement de la fonction.

    Bref, ça ne marche toujours pas, j'ai pris le programme tel quel, et j'ai appelé la fonction avec les arguments que j'ai spécifié ci dessus (et n=8).

    J'ai également comparé cette version à celle en Fortran 77, et il semble qu'elles soient identiques.

    Je ne sais plus quoi faire !

    PS : en plus je trouve le code particulièrement hard à comprendre à cause du nom des variables (s,r,p,g,f,dd,c,b etc... ) et des break et continue....
    Si vous connaissez quelqu'un qui utilise ce prog, je veux bien un contact...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 79
    Par défaut
    Voilà, si certains sont d'attaque à jeter un oeil, voici mon petit bout de programme .... (Dev C++)
    Fichiers attachés Fichiers attachés

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 79
    Par défaut
    Je vois que deux personnes ont récupéré mon programme... Avez-vous trouvé quelque chose d'anormal ?

Discussions similaires

  1. Numerical Recipes in C#
    Par -={-_-}=- dans le forum C#
    Réponses: 0
    Dernier message: 01/10/2009, 17h02
  2. Problème Functor + Numerical Recipes
    Par Jeromnimo dans le forum C++
    Réponses: 8
    Dernier message: 03/07/2008, 10h17
  3. Réponses: 10
    Dernier message: 12/10/2007, 16h54
  4. code numerical recipe
    Par deubelte dans le forum C++
    Réponses: 13
    Dernier message: 11/02/2007, 09h33
  5. bibliotheque numerical recipes
    Par miminou dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 09/12/2005, 11h41

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