Fonctions rationnelles

Utilisation de Xcas

Modérateur : xcasadmin

magicvinni
Messages : 40
Inscription : dim. août 26, 2007 7:07 am
Contact :

Fonctions rationnelles

Message par magicvinni » lun. mars 09, 2009 9:14 pm

Bonjour,

Je cherche à faire une procédure qui compare 2 fonctions rationnelles, et je voudrais qu'elle me retourne faux pour par exemple :
f1=(x-1)/(x^2-1) et f2(x)=1/(x+1) dans la mesure où elles n'ont pas le m^me ensemble définition, avez-vous des idées ? Car pour XCas, f1=f2

Merci,

Vincent

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

Message par parisse » mar. mars 10, 2009 7:38 am

On doit pouvoir construire une telle fonction en utilisant getDenom qui renvoie le denominateur d'une expression non simplifie. Ensuite le test a construire sur getDenom peut varier, par exemple si on cherche une dependance par rapport a une variable x:

Code : Tout sélectionner

test_eq(f1,f2,x):={
  if (normal(f1-f2)!=0) return false;
  return diff(normal(getDenom(f1)/getDenom(f2)),x)==0;
}
Attention, il faut que f1 et f2 soient deja reduits sous forme d'une unique fraction.[/code]

magicvinni
Messages : 40
Inscription : dim. août 26, 2007 7:07 am
Contact :

Message par magicvinni » mar. mars 10, 2009 1:09 pm

Bonjour,

Merci de ta réponse, en fait c'est ce que j'avais fait comme essai, mais getDenom, ne fonctionne en effet que si on a déjà une fonction rationnelle et pas un truc du genre 1/(x-1)+3/x, du coup si on veut le faire il faut utiliser normal avant et du coup il simplifie :(

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

Message par parisse » mar. mars 10, 2009 2:07 pm

oui, si on veut eviter la simplification il faut ecrire soi-meme un programme de reduction au meme denominateur sans simplification. Ca doit etre faisable avec une procedure recursive, en utilisant le fait que pour une expression f (type(f)==DOM_SYMBOLIC), f[0] designe l'opérateur (qu'on peut comparer avec +,neg,*,inv) et f[1], ..., f[size(f)] désignent les arguments de l'opérateur (x-y est codé x + neg(y) et x/y est codé x*inv(y), + et * peuvent avoir plusieurs args). Mais ce n'est pas un prog tout simple...

magicvinni
Messages : 40
Inscription : dim. août 26, 2007 7:07 am
Contact :

Message par magicvinni » mar. mars 10, 2009 4:50 pm

OK, merci de ta réponse rapide, je vais peut-être m'y coller.

J'ai une autre question si on tape 2(x-5)^2+8 , la multiplication n'est pas prise en compte, existe-il un procédure pour ajouter les * ? (En fait je suis ne train de gérer des réponses d'élèves et je ne veux pas les obliger à mettre le *).

merci

Vincent

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

Message par parisse » mar. mars 10, 2009 6:17 pm

En y réfléchissant, je vais peut-etre modifier getDenom et getNum pour mettre les expressions rationnelles sous forme d'une fraction non simplifée. Ca serait cohérent avec leur fonctionnalité.
Par contre pour 2(x-5)^2, ça nécessiterait de changer les règles grammaticales du parser, et je n'ai pas trop envie de le faire, j'ai trop peur d'introduire des bugs. D'autant plus que en général, il faut explicitement indiquer le *, le cas de 2x étant simplement une tolérance.

magicvinni
Messages : 40
Inscription : dim. août 26, 2007 7:07 am
Contact :

Message par magicvinni » mar. mars 10, 2009 6:24 pm

OK, merci, je vais donc programmer l'ajout du * à la main depuis le php.

Pour ce qui est des modifs à venir de getDonom et autres, je me posais une question justement, j'ai (après un an de galère) à réussit à installer Giac via php sur le serveur pédagogique de mon académie...Pour mettre une version à jour, il faut recommencer toute l'installation ou c'est "facile" ?

Merci pour ta disponibilité

Vincent

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

Message par parisse » mar. mars 10, 2009 6:53 pm

Je pense qu'il n'y a qu'à mettre à jour l'exécutable et/ou la librairie dynamique. Ca devrait donc etre plus simple. Jean-Pierre Branchard devrait pouvoir répondre mieux que moi!

Répondre