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

Caml Discussion :

Ouvrir les bibliotéques Gmp et libcreal sous Ubuntu


Sujet :

Caml

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut Ouvrir les bibliotéques Gmp et libcreal sous Ubuntu
    Bonjour,

    Je voudrais pouvoir tester les bibliothèques Gmp et libcreal. Je les ai installé via le gestionnaire de paquets de Ubuntu, mais quand je lance un terminal avec ocaml et que je demande On me répond . De même la commande suivante me répond " Syntax error: .

    Vous avez une idée ?

    Merci d'avance.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    Quand on utilise des bibliothèques "externes" (c'est à dire en dehors de la bibliothèque standard), il faut le préciser au compilateur, pour qu'il sache où aller chercher les modules dont tu parles.

    La méthode la plus simple, quand le paquet le permet, est d'utiliser ocamlfind. Que renvoie, dans ta console ubuntu, la commande "ocamlfind list" ? En particulier, parle-t-il de gmp (ocamlfind list | grep gmp) ?

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    La commande "ocamlfind list" me renvoie
    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
    27
    28
    29
    30
    31
    32
    33
    bigarray            (version: [distributed with Ocaml])
    camlp4              (version: [distributed with Ocaml])
    camlp4.exceptiontracer (version: [distributed with Ocaml])
    camlp4.extend       (version: [distributed with Ocaml])
    camlp4.foldgenerator (version: [distributed with Ocaml])
    camlp4.gramlib      (version: [distributed with Ocaml])
    camlp4.lib          (version: [distributed with Ocaml])
    camlp4.listcomprehension (version: [distributed with Ocaml])
    camlp4.locationstripper (version: [distributed with Ocaml])
    camlp4.macro        (version: [distributed with Ocaml])
    camlp4.mapgenerator (version: [distributed with Ocaml])
    camlp4.metagenerator (version: [distributed with Ocaml])
    camlp4.profiler     (version: [distributed with Ocaml])
    camlp4.quotations   (version: [distributed with Ocaml])
    camlp4.quotations.o (version: [distributed with Ocaml])
    camlp4.quotations.r (version: [distributed with Ocaml])
    camlp4.tracer       (version: [distributed with Ocaml])
    creal               (version: 0.7)
    dbm                 (version: [distributed with Ocaml])
    dynlink             (version: [distributed with Ocaml])
    findlib             (version: 1.2.1)
    gmp                 (version: 20021123)
    graphics            (version: [distributed with Ocaml])
    labltk              (version: [distributed with Ocaml])
    num                 (version: [distributed with Ocaml])
    num-top             (version: 1.2.1)
    num.core            (version: [internal])
    stdlib              (version: [distributed with Ocaml])
    str                 (version: [distributed with Ocaml])
    threads             (version: [distributed with Ocaml])
    threads.posix       (version: [internal])
    threads.vm          (version: [internal])
    unix                (version: [distributed with Ocaml])
    Visiblement ça parle de gmp et de libcreal (creal je pense).

    Et maintenant je fait quoi ? Je suis désolé d'être un peu un boulet (mais je suis plutôt théoricien ...). Pour faire ocamlfind install ( [-help | other options] <package_name> <file> ...) où se trouve le fichier ?


    Merci beaucoup en tout cas

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    Non, pas besoin de install, ils sont déjà installés.

    Tu utilises ocamlfind pour produire les "bonnes commandes de compilation". Si tu veux faire ocamlc ..., tu fais à la place :
    ocamlfind ocamlc -package gmp -linkpkg ...

    ("-package foo,bar" si tu veux en mettre plusieurs, et "-linkpkg" ne sert que quand tu veux produire un exécutable).

    Pareil si tu veux utiliser ocamlopt, ocamlfind ocamlopt -package ...

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Re-Bonjour,

    Et si je veux le lancer dans l'interpréteur ? Je peut faire ça ?
    Il faut lancer ocaml dans un mode spécial ? lui spécifier le chemin quand je suis dit "open Gmp;;" ?

    Merci beaucoup !

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    Le plus simple est de passer par "topfind" : dans l'interpréteur :
    #use "topfind";;
    #require "gmp";;


    #use "topfind" est une directive qui rend disponible d'autres directives liées à ocamlfind, comme #require (la liste est affichée normalement). Pour #require, il suffit de mettre le nom du "package" correspondant (ici "gmp") et il charge dans le toplevel les parties nécessaires. Ça marche (comme ocamlfind ocamlc ...) avec n'importe quel paquet ocamlfind, donc aussi pour ton autre bibliothèque.

    Tu parles souvent de "open Gmp". C'est une autre question : une fois que le module Gmp est disponible (s'il a été donné à la compilation, ou après un #require, etc...), tu peux accéder à ses valeurs comme pour n'importe quel module. S'il contient une fonction "foo" par exemple, tu écriras Gmp.foo, comme tu écris List.map pour la fonction map du module List. "open" permet de ne pas avoir à utiliser le nom de module, pour accéder directement aux valeurs (si tu connais le C++, c'est un peu comme "using namespace ..."): après un "open Gmp", tu peux écrire "foo" au lieu de "Gmp.foo". Ça marche avec n'importe quel module, et c'est indépendant du fait qu'il ait été bien chargé avec ton programme ou pas.

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Tout marche parfaitement, merci beaucoup !

    Maintenant je n'ai plus qu'à faire mes tests.

    Merci encore !

    A bientôt !

  8. #8
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    À propos de calcul multiprécision, as-tu essayé Numerix de Michel Quercia ?

  9. #9
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    Si les gens savaient que travailler avec de la précision arbitraire n'augmente pas la qualité des calculs... C'est un résultat démontré et trop peu connu, malheureusement.

  10. #10
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Mais la ça n'est pas du calcul multi précision mais du calcul exacte. On est sûr que en sorti on a le résultat avec la précision voulu (bon ok il faut s'accrifer 3 heurs ...mais c'est juste).

    La multi précision augmente la précision mais je suis d'accord sur le fait que quelque soit la précision alors ont peut trouver un moyen de la mettre en défaut. InOCamlWeTrust je ne suis pas sûr de t'avoir bien compris.

    Bonne journée

  11. #11
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    L'instabilité des schémas numériques mis en oeuvre dans les programmes de mathématiques appliquées est intrinsèque aux schémas eux-mêmes.

    Par exemple, lorsqu'une matrice est mal conditionnée, on peut avoir des résultats complètement faux si on ne prend pas des précautions.

    Pourquoi ?

    Tout simplement parce que la matrice est foutue en tant que telle : elle est intrinsèquement mal conditionnée. Le conditionnement traduit la sensibilité du résultat par rapport à l'entrée ; en d'autres termes, de combien varie Y si X varie de 1% (par exemple), pour un système Y = A X. C'est une propriété mathématique, exacte. Il faut voir ça comme un système physique qui serait dans une position d'équilibre instable : il suffit qu'un paramètre bouge d'un chouilla pour que tout le système se casse la gueule... d'ailleurs, ce n'est pas pour rien que ces systèmes-là proviennent de la physique ou de la chimie, souvent !

    Dans ce cas, augmenter la précision de travail n'améliore en rien la qualité des résultats. Tout au plus,, celà permet de se conforter dans le fait qu'effectivement on travaille bien avec des matrices mal conditionnées.

    Ce qu'il faut faire, par exemple dans ce cas précis, c'est préconditionner le système, ou résoudre grâce à un algorithme robuste, peu sensible à ce genre de choses (en général ce sont les plus compliqués).

    On voit alors qu'une deuxième idée reçue tombe : augmenter le nombre de calculs n'augmente pas nécessairement l'imprécision des résultats. Mieux vaut mouliner 3h des algorithmes précis mais impliquant beaucoup de calculs, que des méthodes certes très rapides mais très peu précises.

    En outre, pour prendre un exemple récent, le CELL de la Playstation 3 intéresse énormément les matheux appliqués (Oh... la blague !), car elles a des performances hors normes en simple précision IEEE 32 bits... et celà n'empêche en rien d'être précis.

    J'ai pris ici le cas de la résolution de systèmes linéaires car c'est la cas le plus courant, mais cette remarque vaut aussi pour tous les autres schémas.

  12. #12
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Je suis d'accorf avec toi. Il y a certaines opération qui provoque une instabilité.

    Un exemple classique (donné par Jean-Michel Muller) consiste à prendre u_0=2 et u_1 et ensuite

    u_n= 111-1130/u_{n-1} + 3000/(u_{n-1.u_{n-2}})

    Cette suite tend vers 6 et si on fait un calcul avec des flottants (quelque soit la précision) on aura l'impression qu'elle tend (donc si on prend n assez grand) vers 100.

    Le module Creal permet de faire des calculs exactes et donc ne se plante pas sur ce truc par exemple.

    Voila voila,

    Bonne journée

  13. #13
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    Oui, mais là c'est envisageable car tous les calculs se résument à une fraction. Dans la "vraie vie", ces calculs là ne sont pas courants, du moins en calcul numérique, car il y a toujours une exponentielle ou deux qui traînent, une racine carrée (ben oui, si on veut des distances !)... En tous cas, pour de vraies applications de calcul, ce genre de procédé n'est pas applicable, car trop gourmand. Ce qui fait énormément de bien, sinon, quand on peut, c'est travailler en précision fixe... et oui, ça revient au goût du jour !

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

Discussions similaires

  1. Comment gérer les caméras ip sous ubuntu 12.04
    Par alex89edu dans le forum Matériel
    Réponses: 1
    Dernier message: 23/10/2012, 23h33
  2. Script pour gérer les sessions utilisateurs sous Ubuntu
    Par thucydide dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 08/06/2012, 11h51
  3. Réponses: 7
    Dernier message: 01/01/2011, 04h10
  4. Pas de son dans les hauts parleurs sous Ubuntu 9.10
    Par methodman225 dans le forum Matériel
    Réponses: 1
    Dernier message: 23/02/2010, 15h53
  5. Obtenir les droit root en mode graphique sous ubuntu
    Par maximenet dans le forum Administration système
    Réponses: 5
    Dernier message: 14/10/2006, 15h56

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