giac icas
Modérateur : xcasadmin
Re: giac icas
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.
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.
Re: giac icas
Merci pour votre aide précieuse.
Pour mémoriser une variable, j'utilise le code :
J'obtiens comme giac.var :
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 :
Si vous avez une idée pour améliorer le contenu du giac.in ...
Encore merci.
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");
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
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
Encore merci.
- Pièces jointes
-
- Capture du 2017-01-22 18-13-51.png (64.72 Kio) Consulté 9977 fois
Didier DP
www.dmaths.org
www.dmaths.org
Re: giac icas
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!
Re: giac icas
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.
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
www.dmaths.org
Re: giac icas
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
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.
Code : Tout sélectionner
cas_setup(0,0,0,1,0,[1e-12,1e-15],12,[1,100,0,25],1,1,0,1)
Re: giac icas
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 :
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.
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");
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
www.dmaths.org
Re: giac icas
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.
La configuration de icas est egalement lue dans .xcasrc ou xcas.rc.
Re: giac icas
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 :
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 ...
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
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
www.dmaths.org
Re: giac icas
Bonjour,
Le code ci-dessous permet de mémoriser une variable.
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.
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");
Merci d'avance pour votre réponse.
Didier DP
www.dmaths.org
www.dmaths.org
Re: giac icas
Il suffit de faire purge(a) (ou purge(a,Resultat))
Re: giac icas
Bonjour,
Merci cela fonctionne parfaitement.
Bien cordialement.
Merci cela fonctionne parfaitement.
Bien cordialement.
Didier DP
www.dmaths.org
www.dmaths.org