giac icas

Librairie C++ de calcul formel/ C++ symbolic computation library

Modérateur : xcasadmin

parisse
Messages : 5731
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: giac icas

Message par parisse » dim. janv. 22, 2017 12:57 pm

Vous pouvez utiliser "\n" pour inserer un saut de ligne
Il ne devrait pas y avoir de ; apres sinon ni apres alors, mais ce n'est pas ca qui provoque des erreurs. Il est surement plus facile de voir d'ou viennent les erreurs en testant depuis Xcas.

ddorange
Messages : 55
Inscription : sam. mars 12, 2016 7:50 am

Re: giac icas

Message par ddorange » dim. janv. 22, 2017 5:40 pm

Merci pour votre aide précieuse.
Pour mémoriser une variable, j'utilise le code :

Code : Tout sélectionner

unarchive("giac.sav");
Resultat:=(h(x):=x^2+2x+2);
Sortie:=fopen("giac.out");
fprint(Sortie,Unquoted,Resultat);
fclose(Sortie);
Sortie:=fopen("giac.var");
for j in VARS do
  print(eval(j,1),j,type(j));
  si type(j)==DOM_FUNC  et eval(j,1)!='Resultat' alors
     fprint(Sortie,Unquoted,"#");
     fprint(Sortie,Unquoted,eval(j,1));
  fsi;
od;
fprint(Sortie,Unquoted,"\n");
for j in VARS do
  si eval(j,1)!='Resultat' et eval(j,1)!='Sortie' et eval(j,1)!='j' alors
    print(eval(j,1),type(j));
    si type(j)==DOM_FUNC  et eval(j,1)!='Resultat' alors
       fprint(Sortie,Unquoted,eval(j,1));
       fprint(Sortie,Unquoted,"(x):=");
       fprint(Sortie,Unquoted,j[3]);
    sinon
       fprint(Sortie,Unquoted,eval(j,1));
       fprint(Sortie,Unquoted,"=");
       fprint(Sortie,Unquoted,j);
    fsi;
    fprint(Sortie,Unquoted,"\n");
  fsi;
od;
fclose(Sortie);
archive("giac.sav");
J'obtiens comme giac.var :

Code : Tout sélectionner

#b#c#d#h
a=72
b(x):=tan(x)+x
c(x):=x*sin(x)
d(x):=x^2*cos(x)
h(x):=x^2+2*x+1
La première ligne contient les fonctions mémorisées, les suivantes la liste des variables et leurs valeurs.
Du coup, je peux dans une zone de liste de la boîte de dialogue faire apparaître la liste des variables (Voir image en pièce jointe).
Ci-dessous un exemple de code LibreOffice qui permet de récupérer la liste des fonctions définies par l'utilisateur :

Code : Tout sélectionner

Function RecupereFonctions As String
	Dim sGiacVar, sMaVariable as String
	Dim monTexte As Object, f2 As Object, flux As Object
	sGiacVar = sCheminDmathsUtilisateur & "giac.var"
	If FileExists(sGiacVar) Then
			monTexte = createUnoService("com.sun.star.io.TextInputStream")
			f2 = createUnoService("com.sun.star.ucb.SimpleFileAccess")
			flux = f2.openFileRead(ConvertToUrl(sGiacVar))
			monTexte.InputStream = flux
			monTexte.Encoding = "utf-8"	
			sMaVariable = monTexte.readLine
			flux.closeInput
			monTexte.closeInput	
	Endif	
	RecupereFonctions = sMaVariable	
End Function
Si vous avez une idée pour améliorer le contenu du giac.in ...
Encore merci. 8)
Pièces jointes
Capture du 2017-01-22 18-13-51.png
Capture du 2017-01-22 18-13-51.png (64.72 Kio) Consulté 9158 fois
Didier DP
www.dmaths.org

parisse
Messages : 5731
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: giac icas

Message par parisse » dim. janv. 22, 2017 6:50 pm

Pas vraiment, si ce n'est que pour tester dans xcas, c'est sans doute plus simple de creer une chaine de caractere et de la sauver en une seule commande a la fin. Mais des l'instant ou quelque chose marche, je ne vois pas de raison de modifier., le mieux est l'ennemi du bien!

ddorange
Messages : 55
Inscription : sam. mars 12, 2016 7:50 am

Re: giac icas

Message par ddorange » jeu. janv. 26, 2017 11:38 am

Bonjour,

Quelques petites remarques pour Xcas :
1) La commande csolve(x^2+x+1) renvoie : list[(-sqrt(3)*i-1)/2,(sqrt(3)*i-1)/2], c'est à dire que la partie imaginaire arrive en premier. Ce qui n'est pas habituel.
Peut-on faire différemment ?

2) Hier j'ai été très surpris avec : solve(0.5x^2+2x+0.5=0) le retour est : list[-3.732050807569,-0.267949192431].
Du coup j'ai exploré en calculant le discriminant : normal (2^2-4*0.5*0.5), le retour est 3.0
Ce qui explique que Giac ne résolve pas exactement l'équation.
A noter que l'équation équivalente solve(x^2+4x+1=0) donne list[-(sqrt(3))-2,sqrt(3)-2].
La encore le radical arrive en tête ce qui n'est pas habituel.

Tout cela n'est pas du tout gênant. Je tenais juste à avoir votre avis.

Cordialement.
Didier DP
www.dmaths.org

parisse
Messages : 5731
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: giac icas

Message par parisse » jeu. janv. 26, 2017 1:07 pm

On peut changer l'ordre d'affichage dans Xcas en cochant puissances croissantes, mais je n'ai pas de commande utilisateur pour ca sauf en utilisant cas_setup qui est un peu geek comme commande, par exemple ici

Code : Tout sélectionner

cas_setup(0,0,0,1,0,[1e-12,1e-15],12,[1,100,0,25],1,1,0,1)
Le resultat de solve est parfaitement normal, des l'instant ou une donnee est approchee, l'ensemble du calcul est approche. Il faut utiliser 1/2 et non 0.5 pour avoir des resultats exacts.

ddorange
Messages : 55
Inscription : sam. mars 12, 2016 7:50 am

Re: giac icas

Message par ddorange » jeu. janv. 26, 2017 7:29 pm

Même si c'est un peu geek, si je le programme dans l'écriture du giac.in c'est transparent pour l'utilisateur.

J'obtiens le résultat voulu avec :

Code : Tout sélectionner

unarchive("giac.sav");
cas_setup(0,0,0,1,0,[1e-12,1e-15],12,[1,100,0,25],1,1,0,1);
Sortie:=fopen("giac.out");
fprint(Sortie,Unquoted,csolve(x^2+x+1=0,x));
fclose(Sortie);
archive("giac.sav");
A noter que la configuration ainsi transmise n'impacte pas le fonctionnement de xcas mais uniquement le icas
L'exécution du giac.in mémorise la configuration.
J'ai trouvé l'endroit sur le disque dur où Xcas mémorise sa configuration dans un fichier nommé ".xcasrc", mais pas l'endroit où le giac.in stocke celle de icas.
Didier DP
www.dmaths.org

parisse
Messages : 5731
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: giac icas

Message par parisse » ven. janv. 27, 2017 6:50 am

Attention, cela impacte l'ecriture des polynomes qui seront aussi par ordre croissant de monomes. Peut-etre vaudrait-il mieux ne rien mettre et laisser les utilisateurs configurer cela depuis xcas.
La configuration de icas est egalement lue dans .xcasrc ou xcas.rc.

ddorange
Messages : 55
Inscription : sam. mars 12, 2016 7:50 am

Re: giac icas

Message par ddorange » sam. janv. 28, 2017 8:42 am

Bonjour,
J'ai implémenté une option. En fonction de la valeur du Boolean bPuissancesCroissantes et du calcul fait (résolution d'équation ou pas), le giac.in se construit ainsi :

Code : Tout sélectionner

If Instr(sLastCalcul,"solve") Or bPuissancesCroissantes Then 
	monTexte.writeString("cas_setup(0,0,0,1,0,[1e-12,1e-15],12,[0,100,0,25],1,1,0,1);" & Chr(10)) 
Else
	monTexte.writeString("cas_setup(0,0,0,1,0,[1e-12,1e-15],12,[0,100,0,25],0,1,0,1);" & Chr(10)) 
Endif
Cela fonctionne bien.
Je n'ai pas encore compris comment se fait l'enregistrement de la configuration setup_cas, lorsque l'on utilise icas. J'ai encore quelques essais à faire ...
Didier DP
www.dmaths.org

ddorange
Messages : 55
Inscription : sam. mars 12, 2016 7:50 am

Re: giac icas

Message par ddorange » mar. nov. 03, 2020 1:08 pm

Bonjour,

Le code ci-dessous permet de mémoriser une variable.

Code : Tout sélectionner

unarchive("giac.sav");
Resultat:=(a(x):=x^2);
archive("giac.sav");
Existe-t-il une commande pour retirer une variable mémorisée (ce qui éviterait d'effacer le fichier giac.sav et du coup de perdre toutes les variables) ?

Merci d'avance pour votre réponse.
Didier DP
www.dmaths.org

parisse
Messages : 5731
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: giac icas

Message par parisse » mar. nov. 03, 2020 6:54 pm

Il suffit de faire purge(a) (ou purge(a,Resultat))

ddorange
Messages : 55
Inscription : sam. mars 12, 2016 7:50 am

Re: giac icas

Message par ddorange » mer. nov. 04, 2020 7:41 am

Bonjour,
Merci cela fonctionne parfaitement.
Bien cordialement.
Didier DP
www.dmaths.org

Répondre