Pas assez de solutions

Bugs

Modérateur : xcasadmin

maths468W2T
Messages : 5
Inscription : ven. août 23, 2013 9:23 pm

Pas assez de solutions

Message par maths468W2T » sam. août 24, 2013 2:17 pm

solve(sqrt(1-t^2) = 0.5, t) ne renvoie qu'une seule solution, alors qu'en remplaçant 0.5 par 1/2 les deux solutions sont renvoyées. (GIAC 1.1.0)

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

Re: Pas assez de solutions

Message par parisse » sam. août 24, 2013 3:54 pm

Ce n'est pas un bug, des l'instant ou votre equation contient un coefficient approche (0.5), le solveur numerique est appele, et une seule solution est calculee (voir les options de fsolve pour avoir plus de solutions dans le cas d'une recherche approchee).

maths468W2T
Messages : 5
Inscription : ven. août 23, 2013 9:23 pm

Re: Pas assez de solutions

Message par maths468W2T » sam. août 24, 2013 11:35 pm

Ah d'accord. Mais est-ce qu'il y a une raison fondamentale pour ça ? Sur calculatrices TI par exemple, c'est le solveur exact qui est utilisé dans les deux cas, et c'est assez pratique puisqu'on peut souvent avoir besoin d'une liste exhaustive des solutions malgré la présence de valeurs flottantes : je pense notamment aux équations en physique.

D'autre part l'absence d'avertissement peut être assez piégeuse pour un utilisateur qui s'attendrait à ce que solve() soit exhaustif, au moins pour les équations algébriques : il peut d'ailleurs le croire d'autant plus facilement que fsolve() semble détecter les équations polynomiales et renvoie la liste exhaustive des racines dans ce cas. Ce qui introduit un changement soudain de comportement quand sqrt() est introduit dans l'équation, changement soudain qui n'existe pas avec des valeurs exactes.

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

Re: Pas assez de solutions

Message par parisse » dim. août 25, 2013 6:43 am

Oui, la raison fondementale c'est que beaucoup de manipulations algebriques utilisees dans le preprocessing exact de solve pour se ramener a une ou des equations polynomiales ne marchent pas bien avec des coefficients approches (par exemple le pgcd de 2 polynomes, plus generalement on risque d'aboutir a une equation polynomiale dont les erreurs d'arrondi sur les coefficients entraineront des solutions fantaisistes). Les polynomes forment une categorie un peu a part pour la resolution numerique par fsolve puisque (s'ils n'ont pas de racines doubles) on a un excellent algorithme numerique qui calcule toutes les racines, mais sinon on ne peut pas esperer ca, le mieux qu'on puisse esperer c'est trouver toutes les racines sur un intervalle fin (et c'est ce qu'essaie de faire fsolve si on lui donne un intervalle).
Je ne sais pas exactement ce que fait TI pour solve (ca depend sans doute du mode exact/auto/approx), ils convertissent peut-etre temporairement les coefficients approches en coefficients rationnels (et inversement si l'equation ne peut etre resolue exactement), ca parait peut-etre plus simple, mais je pense que c'est une erreur d'utiliser (d'enseigner a utiliser) un CAS sans (faire) comprendre la difference entre donnee approchee et donnee exacte (0.5 et 1/2 sont *differents* pour un CAS, malheureusement beaucoup de profs de maths continuent a utiliser les 2 sans distinction), si on n'en prend pas conscience des que possible sur des exemples simples, on se fera surprendre sur des exemples plus compliques.

Répondre