giac icas
Modérateur : xcasadmin
giac icas
Bonjour,
Meilleurs vœux de santé et de bonheur à tous.
J'ai remarqué que les écritures x(x+1) et x(ln(x)+1) ne sont pas traitées de la même manière.
Dans le premier cas, Xcas retourne x*(x+1) avec un message d'avertissement : "Attention : utilisation de multiplication implicite pour (x)(x+1)"
Dans le second cas, rien de tel et le calcul est mal interprété : f(x):=x(ln(x)+1) n'est pas modifié et f'(x) donne 1/x car ln(x)+1 est considéré comme une constante.
Ce n'est pas ennuyeux si on travaille directement dans la console Xcas, puis qu'un message d'avertissement s'affiche.
Cependant dans un traitement de textes, c'est plus ennuyeux car l'utilisateur n'est pas averti est se retrouve avec f'(x)=1/x.
Du coup je cherche à contourner cette difficulté.
Piste 1 : en ajoutant une * avant le (. Mais alors il faut que les caractères précédents ne soient pas : ^*/+-’ et ne constituent pas une fonction usuelle sin, ln etc...
Mais également une fonction définie dans giac.sav
D'où ma première question : existe-t-il un moyen de récupérer la liste des variables mémorisées dans giac.sav ?
Piste 2 : récupérer le message d'avertissement. D'où ma question :
Est-ce possible ?
Merci d'avance pour vos réponses.
Cordialement
Meilleurs vœux de santé et de bonheur à tous.
J'ai remarqué que les écritures x(x+1) et x(ln(x)+1) ne sont pas traitées de la même manière.
Dans le premier cas, Xcas retourne x*(x+1) avec un message d'avertissement : "Attention : utilisation de multiplication implicite pour (x)(x+1)"
Dans le second cas, rien de tel et le calcul est mal interprété : f(x):=x(ln(x)+1) n'est pas modifié et f'(x) donne 1/x car ln(x)+1 est considéré comme une constante.
Ce n'est pas ennuyeux si on travaille directement dans la console Xcas, puis qu'un message d'avertissement s'affiche.
Cependant dans un traitement de textes, c'est plus ennuyeux car l'utilisateur n'est pas averti est se retrouve avec f'(x)=1/x.
Du coup je cherche à contourner cette difficulté.
Piste 1 : en ajoutant une * avant le (. Mais alors il faut que les caractères précédents ne soient pas : ^*/+-’ et ne constituent pas une fonction usuelle sin, ln etc...
Mais également une fonction définie dans giac.sav
D'où ma première question : existe-t-il un moyen de récupérer la liste des variables mémorisées dans giac.sav ?
Piste 2 : récupérer le message d'avertissement. D'où ma question :
Est-ce possible ?
Merci d'avance pour vos réponses.
Cordialement
Didier DP
www.dmaths.org
www.dmaths.org
Re: giac icas
pour x(ln(x)+1) je peux ameliorer la detection et reconnaitre une multiplication implicite, mais ca ne resoudra pas tous les cas, et il serait bien de pouvoir recuperer les warnings. Sous Unix, il suffit de rediriger stderr, par exemple
mais je ne sais pas si c'est supporte par un terminal sous windows.
Sinon la commande VARS permet de connaitre la liste des variables affectees, alors que lname renvoie la liste des noms de variables d'une expression.
Code : Tout sélectionner
icas 'x(x+1)' > log 2> logerr
Sinon la commande VARS permet de connaitre la liste des variables affectees, alors que lname renvoie la liste des noms de variables d'une expression.
Re: giac icas
Bonjour,
Pour f(x)=x(lnx+1) l'écriture est f(x)=x(ln(x)+1) mais la sauvegarde dans giac.sav est f(x):=x(ln(x)+1). Ce qui est faux pour le calcul dans Xcas.
Je ne sais pas si vous devez modifier Xcas pour faire reconnaître une multiplication implicite. C'est à vous de juger. De mon côté je cherche à contourner la difficulté. C'est faisable si je sais récupérer la liste des variables mémorisées dans Xcas. A priori je peux faire écrire ces variables dans un fichier texte giac.var. Mais je cherche s'il y a plus smiple.
J'ai fait des essais du type
le dossier Dmaths contenant giac.sav et j'ai [] comme retour alors que f(x):=x+1 est mémorisée.
Voici un lien de téléchargement de Dmaths 4.1 si vous voulez tester.
https://framadrop.org/r/GNNVbbxeJL#Wgh5 ... JshVj9JRU=
Merci et cordialement.
Dmaths manipule un traitement de texte. Par exemple f(x)=x(x+1) va écrire une formule identique mais mémoriser dans giac.av la fonction f(x):=x*(x+1). Là c'est ok pour la suite.parisse a écrit :pour x(ln(x)+1) je peux ameliorer la detection et reconnaitre une multiplication implicite, mais ca ne resoudra pas tous les cas, et il serait bien de pouvoir recuperer les warnings. Sous Unix, il suffit de rediriger stderr, par exemplemais je ne sais pas si c'est supporte par un terminal sous windows.Code : Tout sélectionner
icas 'x(x+1)' > log 2> logerr
Pour f(x)=x(lnx+1) l'écriture est f(x)=x(ln(x)+1) mais la sauvegarde dans giac.sav est f(x):=x(ln(x)+1). Ce qui est faux pour le calcul dans Xcas.
Je ne sais pas si vous devez modifier Xcas pour faire reconnaître une multiplication implicite. C'est à vous de juger. De mon côté je cherche à contourner la difficulté. C'est faisable si je sais récupérer la liste des variables mémorisées dans Xcas. A priori je peux faire écrire ces variables dans un fichier texte giac.var. Mais je cherche s'il y a plus smiple.
Comment s'utilisent ces commandes ? icas 'VARS' > ????Sinon la commande VARS permet de connaitre la liste des variables affectees, alors que lname renvoie la liste des noms de variables d'une expression.
J'ai fait des essais du type
Code : Tout sélectionner
cd /home/didier/.config/libreoffice/4/user/Dmaths
icas VARS
Voici un lien de téléchargement de Dmaths 4.1 si vous voulez tester.
https://framadrop.org/r/GNNVbbxeJL#Wgh5 ... JshVj9JRU=
Merci et cordialement.
Didier DP
www.dmaths.org
www.dmaths.org
Re: giac icas
Avec comme giac.in :
j'obtiens comme giac.var
et comme message console :
Est-ce correct ?
Y a-t-il mieux ?
Par contre, je n'arrive à rien avec lname ...
Code : Tout sélectionner
unarchive("giac.sav");
Sortie:=fopen("giac.var");
fprint(Sortie,Unquoted,VARS);
fclose(Sortie);
archive("giac.sav");
Code : Tout sélectionner
[Resultat,Sortie,f,g]
Code : Tout sélectionner
[cas_setup([0,0,0,1,0,[1e-12,1e-15],12,[4,100,0,25],0,1,0,1]),xyztrange([-10.0,10.0,-10.0,10.0,-10.0,10.0,-10.0,10.0,-10.0,10.0,-1.4,1.1,1,0.0,1.0,3]),[unarchive("giac.sav"),(Resultat:=f(x):=sin(x)),(Sortie:=fopen("giac.out")),fprint(Sortie,Unquoted,Resultat),fclose(Sortie),0,(Resultat:=f(x):=sin(x)),(Sortie:=fopen("giac.out")),fprint(Sortie,Unquoted,Resultat),fclose(Sortie),archive("giac.sav"),0,(Sortie:=fopen("giac.var")),fprint(Sortie,Unquoted,VARS),fclose(Sortie),archive("giac.sav"),0,(Sortie:=fopen("giac.var")),fprint(Sortie,Unquoted,'lname'),fclose(Sortie),archive("giac.sav"),0,(Sortie:=fopen("giac.var")),fprint(Sortie,Unquoted,LNAME),fclose(Sortie),archive("giac.sav"),0,(Sortie:=fopen("giac.var")),fprint(Sortie,Unquoted,VARS),fclose(Sortie),archive("giac.sav"),0,(Resultat:=g(x):=x^2+x),(Sortie:=fopen("giac.out")),fprint(Sortie,Unquoted,Resultat),fclose(Sortie),archive("giac.sav"),0,(Resultat:=VARS),(Sortie:=fopen("giac.var")),fprint(Sortie,Unquoted,Resultat),fclose(Sortie),archive("giac.sav"),0,(Sortie:=fopen("giac.var")),fprint(Sortie,Unquoted,VARS),fclose(Sortie),archive("giac.sav")],["Unable to read file Erreur: Valeur Argument Incorrecte", (x)->sin(x),"Done",1,1,0,[undef], (x)->sin(x),"Done",1,1,0,[undef],"Done",1,1,0,[undef],"Done",1,1,0,[undef],"Done",1,1,0,[undef],"Done",1,1,0,[undef], (x)->x^2+x,"Done",1,1,0,[undef],"Resultat: définition récursive Erreur: Valeur Argument Incorrecte","Done",1,1,0,[undef],pointer(0x7fa9a0000b70,0),1,1],(Resultat:= (x)->x^2+x),(f:= (x)->sin(x)),(g:= (x)->x^2+x),xcas_mode(0)]
Y a-t-il mieux ?
Par contre, je n'arrive à rien avec lname ...
Didier DP
www.dmaths.org
www.dmaths.org
Re: giac icas
on a du mal se comprendre, lname(expression) est une commande Xcas permettant de connaitre la liste des noms de variables d'une expression, vous n'en avez peut-etre pas besoin.
Re: giac icas
L'instruction VARS fait bien mon affaire. Elle retourne : [Resultat,Sortie,f,g,a]
Existe-t-il une instruction qui pourrait retourner : [Resultat,Sortie,f(x):=x^2+1,g(x):=x+1,a:=5] ?
Je pourrais alors distinguer l'affectation d'une fonction d'une simple variable.
Merci.
Existe-t-il une instruction qui pourrait retourner : [Resultat,Sortie,f(x):=x^2+1,g(x):=x+1,a:=5] ?
Je pourrais alors distinguer l'affectation d'une fonction d'une simple variable.
Merci.
Didier DP
www.dmaths.org
www.dmaths.org
Re: giac icas
non, en fait ce n'est pas possible de cette facon, car le langage est fonctionnel. Par contre rien n'interdit a partir de la liste de VARS de faire une boucle pour evaluer le contenu des variables. Par exemple
On peut aussi tester si on a affaire a une fonction
Code : Tout sélectionner
for j in VARS do print(eval(j,1),j) od
Code : Tout sélectionner
for j in VARS do
print(eval(j,1),j,type(j));
si type(j)==DOM_FUNC alors print(j[3]); fsi;
od
Re: giac icas
Désolé mais je ne vois pas comment utiliser ces lignes de code.
Dans un console ? Dans un fichier giac.in ?
Dans un console ? Dans un fichier giac.in ?
Didier DP
www.dmaths.org
www.dmaths.org
Re: giac icas
Ca devrait marcher dans un fichier giac.in
Re: giac icas
Bonjour,
J'ai fait quelques tentatives infructueuses.
Les variables affectées sont :
a,b sont des constantes ; f,g,h des fonctions.
J'ai alors saisi comme giac.in :
J'ai comme retour dans le fichier giac.var :
La fonction h (ln(x)) apparaît deux fois.
Mais surtout, je voudrais les noms des fonctions donc obtenir :
Il suffit sans doute de modifier un peu le code du giac.in. J'ai fait plein de tentatives infructueuses, en remplaçant j[3] par j[0 à 2], name(j), j ...
Merci pour votre aide.
J'ai fait quelques tentatives infructueuses.
Les variables affectées sont :
Code : Tout sélectionner
[Resultat,Sortie,a,b,f,g,h]
J'ai alors saisi comme giac.in :
Code : Tout sélectionner
unarchive("giac.sav");
Sortie:=fopen("giac.var");
for j in VARS do;
print(eval(j,1),j,type(j));
si type(j)==DOM_FUNC alors fprint(Sortie,Unquoted,j[3]); fsi;
od;
fclose(Sortie);
archive("giac.sav");
Code : Tout sélectionner
ln(x)x^2+3tan(x)ln(x)
Mais surtout, je voudrais les noms des fonctions donc obtenir :
Code : Tout sélectionner
fgh
Merci pour votre aide.
Didier DP
www.dmaths.org
www.dmaths.org
Re: giac icas
eval(j,1) devrait donner le nom, c'etait pour ca que j'avais mis la commande print dans la boucle.
Vous pouvez tester dans Xcas pour voir l'effet des commandes.
Je ne sais pas pourquoi la fonction ln(x) apparait deux fois, peut-etre parce que j lui-meme est une variable.
Vous pouvez tester dans Xcas pour voir l'effet des commandes.
Je ne sais pas pourquoi la fonction ln(x) apparait deux fois, peut-etre parce que j lui-meme est une variable.
Re: giac icas
Merci !
Cela fonctionne.
Avec
j'obtiens
Peut-être y a-t-il un moyen de ne pas avoir resultat ou alors resultat: ?
Cela fonctionne.
Avec
Code : Tout sélectionner
unarchive("giac.sav");
Sortie:=fopen("giac.var");
for j in VARS do;
print(eval(j,1),j,type(j));
si type(j)==DOM_FUNC alors fprint(Sortie,Unquoted,eval(j,1)); fsi;
od;
fclose(Sortie);
archive("giac.sav");
Code : Tout sélectionner
Resultatfgh
Didier DP
www.dmaths.org
www.dmaths.org
Re: giac icas
Apparamment Resultat est une de vos variables. Si vous voulez l'eviter il doit suffire de modifier le test
si type(j)==DOM_FUNC et eval(j,1)!='Resultat' alors fprint(Sortie,Unquoted,eval(j,1)); fsi;
si type(j)==DOM_FUNC et eval(j,1)!='Resultat' alors fprint(Sortie,Unquoted,eval(j,1)); fsi;
Re: giac icas
Merci pour votre aide.
Le même problème que celui évoqué plus haut avec x(ln(x)+1) est apparu aujourd'hui avec i(2i+1)^2. Le calculateur interprète mal sans *. Il faut i*(2i+1)^2
Cela vaut donc le coup que je corrige pour le traitement de texte en écrivant une routine qui ajoute l'*.
Je crois tout avoir pour le faire.
Je vous tiens au courant d'ici samedi.
Je mettrait dans ce fil le code utilisé notamment dans LO, pour le cas ou quelqu'un est intéressé.
Cordialement.
Le même problème que celui évoqué plus haut avec x(ln(x)+1) est apparu aujourd'hui avec i(2i+1)^2. Le calculateur interprète mal sans *. Il faut i*(2i+1)^2
Cela vaut donc le coup que je corrige pour le traitement de texte en écrivant une routine qui ajoute l'*.
Je crois tout avoir pour le faire.
Je vous tiens au courant d'ici samedi.
Je mettrait dans ce fil le code utilisé notamment dans LO, pour le cas ou quelqu'un est intéressé.
Cordialement.
Didier DP
www.dmaths.org
www.dmaths.org
Re: giac icas
Bonjour,
Je n'ai pas encore tout à fait terminé.
Je crois que je suis perfectionniste (trop ?). Du coup je cherche un moyen pour que dans la boîte de dialogue calcul formel apparaisse une zone de liste ou listbox avec toutes les variables définie par l'utilisateur.
Du coup j'ai essayé le giac.in suivant :
qui me retourne un résultat correct et attendu :
cependant je voudrais pour une lecture plus facile remplacer # par un retour ligne. Y a-t-il un code spécial ?
A noter que j'ai comme retour dans la console beaucoup d'erreurs :
Est-ce gênant ?
Merci encore pour votre aide précieuse.
Je n'ai pas encore tout à fait terminé.
Je crois que je suis perfectionniste (trop ?). Du coup je cherche un moyen pour que dans la boîte de dialogue calcul formel apparaisse une zone de liste ou listbox avec toutes les variables définie par l'utilisateur.
Du coup j'ai essayé le giac.in suivant :
Code : Tout sélectionner
unarchive("giac.sav");
Sortie:=fopen("giac.var");
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),j,type(j));
si type(j)==DOM_FUNC et eval(j,1)!='Resultat' alors;
fprint(Sortie,Unquoted,eval(j,1));
fprint(Sortie,Unquoted,":=");
fprint(Sortie,Unquoted,j[3]);
fprint(Sortie,Unquoted,"#");
sinon;
fprint(Sortie,Unquoted,eval(j,1));
fprint(Sortie,Unquoted,"=");
fprint(Sortie,Unquoted,j);
fprint(Sortie,Unquoted,"#");
fsi;
fsi;
od;
fclose(Sortie);
archive("giac.sav");
qui me retourne un résultat correct et attendu :
Code : Tout sélectionner
a=17#f:=sin(x)#g:=x^3#h:=sin(x)+x^3#
A noter que j'ai comme retour dans la console beaucoup d'erreurs :
Code : Tout sélectionner
,fclose(Sortie),archive("giac.sav")],["Unable to read file Erreur: Valeur Argument Incorrecte", (x)->sin(x),"Done",1,1,"Done",1,1,0,[undef], (x)->x^3,"Done",1,1,"Done",0,1,0,[undef], (x)->sin(x)+x^3,"Done",1,1,"Done",1,1,0,[undef],"Done","Gen [int] Erreur: Type Argument Incorrect Erreur: Valeur Argument Incorrecte",1,0,[undef],"Done","1er arg=résultat de open, ensuite autres args Erreur: Valeur Argument Incorrecte Erreur: Valeur Argument Incorrecte",1,0,[undef],"Done",1,1,0,[undef],"Done","Gen [int] Erreur: Type Argument Incorrect Erreur: Valeur Argument Incorrecte",1,0,[undef],"Done","Gen [int] Erreur: Type Argument Incorrect Erreur: Valeur Argument Incorrecte",1,0,[undef],"Done",1,1,0,[undef],"Done",1,1,0,[undef],"Done",0,1,0,[undef],"Done",1,1,0,[undef],17,"Done",1,1,"Done",0,1,0,[undef],"Done",1,1,0,[undef],"Done",1,1,0,[undef],"Done",1,1,0,[undef],"Done","Gen [int] Erreur: Type Argument Incorrect Erreur: Valeur Argument Incorrecte",1,0,[undef],"Done","Gen [int] Erreur: Type Argument Incorrect Erreur: Valeur Argument Incorrecte",1,0,[undef],"Done","Gen [int] Erreur: Type Argument Incorrect Erreur: Valeur Argument Incorrecte",1,0,[undef],"Done",1,1,0,[undef],"Done",1,1,0,[undef],"Done",1,1,0,[undef],"Done",1,1,0,[undef],pointer(0x7fa78400f140,0),0,1],(Resultat:=17),(a:=17),(f:= (x)->sin(x)),(g:= (x)->x^3),(h:= (x)->sin(x)+x^3),xcas_mode(0)]
// Time 0
// Total time 0.01
Merci encore pour votre aide précieuse.
Didier DP
www.dmaths.org
www.dmaths.org