Pari/gp et fonction

Vous lisez 8 fils de discussion
  • Auteur
    Messages
    • #5308
      Merci, ca m’a aidé
      Up
      0
      Down
      Pas très utile.
      Julien
      Participant

      Bonjour,

      Le code suivant fonctionne dans direct exe :

      a=10;
      f(t)=t^2;
      printsep("|",f(a));

      Par contre dans un fichier oef, f(t) les parenthèses sont mal interprétées par pari/gp et le code suivant ne fonctionne pas :

      \text{DD=pari(a=10;
      f(t)=t^2;
      printsep("|",f(a));
      )}

      Une idée est la bienvenue.

      • Ce sujet a été modifié le il y a 1 week et 5 days par  Julien.
      • Ce sujet a été modifié le il y a 1 week et 5 days par  Julien.
    • #5313
      Merci, ca m’a aidé
      Up
      0
      Down
      Pas très utile.
      byache
      Participant

      Je ne comprend peut-être pas bien le but, mais ce qu’on fait en général c’est une variable wims qui contient a, une autre qui contient f et ensuite pas besoin d’un appel à pari-gp…

      A la limite un replace…

      \real{a=10}
      \text{f=t^2}
      \real{wims(replace internal t by \a in \f)}
      
    • #5317
      Merci, ca m’a aidé
      Up
      0
      Down
      Pas très utile.
      Julien
      Participant

      En remplaçant a=10 par a=1/3 tu as la valeur exacte avec pari/gp. En gros tu maîtrises mieux la sortie. Avec Wims tu as juste les valeurs numériques.

    • #5318
      Merci, ca m’a aidé
      Up
      0
      Down
      Pas très utile.
      byache
      Participant

      Dans ce cas, tu as aussi le choix de mettre, après le replace, pari(eval f)
      Ou un truc du genre…
      Bref, l’idée est d’avoir les variables et le gros du code en syntaxe ‘wims’ et de faire appel à pari ou aux autres logiciels disponibles juste pour faire un calcul par ci par là.
      Si tu fais autrement, il faut s’attendre à des problèmes je pense.

    • #5319
      Merci, ca m’a aidé
      Up
      0
      Down
      Pas très utile.
      byache
      Participant

      De plus, tu peux très bien avoir la valeur exacte sans utiliser explicitement pari (en fait je ne crois pas me tromper en disant que wims envoie de toute façon le calcul à pari à un moment).
      Il suffit de déclarer que tu veux une fraction, ou même un texte :
      \rational{image=\f}
      Ou
      \text{image=\f}
      (Non testé car sur mon téléphone c’est galère 🙂

    • #5320
      Merci, ca m’a aidé
      Up
      0
      Down
      Pas très utile.
      byache
      Participant

      Là, je suis sur un ordinateur, donc c’est plus pratique.
      Je n’ai pas été très clair ci-dessus. Voilà du code qui fonctionne :

      \rational{a=2/3}
      \rational{f=(\a)^2}
      \statement{\f}

      Ou alors (plus compliqué et qui fait au final la même chose) :

      \rational{a=2/3}
      \text{f=(t)^2}
      \rational{g=wims(replace internal t by \a in \f)}
      \statement{\g}

      ou encore plus compliqué :

      \rational{a=2/3}
      \text{f=(t)^2}
      \text{g=wims(replace internal t by \a in \f)}
      \rational{h=pari(eval \g)}
      \statement{\h}

      Bon, il y a sans doute moyen de faire encore plus compliqué 🙂

    • #5322
      Merci, ca m’a aidé
      Up
      0
      Down
      Pas très utile.
      Julien
      Participant

      Ok Paul mais je veux pouvoir scripter avec pari sans passer par Wims. Tu as la récursivité et parfois avec Wims tu as un « too many goto ». Il doit bien avoir des caractères d’échappement pour que la déclaration d’un fonction passe.
      Voili voilou

      • Cette réponse a été modifiée le il y a 1 week et 2 days par  Julien.
    • #5326
      Merci, ca m’a aidé
      Up
      0
      Down
      Pas très utile.
      Julien
      Participant

      J’ai trouvé une solution en effectuant 2 appels à pari.

      \text{aa=pari(f(t)=t^2;)}
      \text{DD=pari(a=10;
      printsep("|",f(a));
      )}
    • #5329
      Merci, ca m’a aidé
      Up
      1
      Down
      Pas très utile.
      bernadette
      Admin bbPress

      Si je mets ton code directement dans pari/gp, j’obtiens

      ? a=10;f(t)=t^2;printsep("|",f(a));
      ? a=10;f(t)=t^2;printsep("|",f(a))
      %2 = (t)->t^2;printsep("|",f(a))

      Donc le problème n’est peut-être pas wims !

      ? a=10;f(t)=t^2;printsep("|",f(a))
      %5 = (t)->t^2;printsep("|",f(a))
      ? f(a)
        ***   [...] at: t^2;printsep("|",f(a))
        ***                              ^-----
        ***   in function f: t^2;printsep("|",f(a))
        ***                                   ^-----
        ***   in function f: t^2;printsep("|",f(a))
        ***                                   ^-----
        ***   in function f: t^2;printsep("|",f(a))
      ? a=10;f(t)=t^2;
      ? printsep("|",f(a))
      100

      Ta fonction f contient le printsep.
      Cela explique qu’en le faisant en deux fois, ta fonction f contient ce qu’il faut et pas le printsep.

      a=10;f=(t->t^2);printsep("|",f(a))

      fonctionnera (mais là le printsep ne sert à rien ?).

Vous lisez 8 fils de discussion
  • Vous devez être connecté pour répondre à ce sujet.