Ajouter un commentaire

zarnac
[Résolu] Traitement de fonctions mathématiques.

Bonjour,

je suis actuellement en deuxième année de MASS, et j'ai un rapport à rendre dans le cadre de la programmation. Ayant vraiment peu d'expérience dans ce domaine là j'aurai besoin de votre avis par rapport à ce que j'ai fait et si possible éventuellement une ouverture pour me permettre de débloquer mes problèmes et d'avancer.

Le sujet est le suivant :

Écrire un programme opmath qui permet de réaliser diverses opérations de traitement sur une fonction mathématique dont l'expression f(x) est entrée par l'utilisateur. Le principe de fonctionnement est similaire à celui du programme stat dans lequel l'opération de traitement était spécifiée sous la forme d'un mot-clé dans la commande saisie par l'utilisateur. Néanmoins, à la différence de stat, le programme doit pouvoir correctement gérer un nombre variable d'arguments pour les différentes opérations. Voici les opérations qui doivent être réalisables :

* def expression : définir expression comme la fonction mathématique à utiliser pour les opérations suivantes (cf. exemple ci-dessous). La même fonction mathématique sera utilisée tant que l'utilisateur n'aura pas défini une nouvelle fonction avec la commande def
* val x : évaluer la fonction courante f(x) pour la valeur x
* root xmin xmax : déterminer toutes les racines de la fonction courante f(x) sur l'intervalle [xmin, xmax]. Pour cela, le plus simple est d'utiliser la technique de la dichotomie jusqu'à obtenir une précision donnée (généralement 10e-6 est largement suffisant). Le programme doit être capable de gérer le cas des racines multiples sur l'intervalle.
* min xmin xmax : déterminer toutes les valeurs de x qui fournissent la valeur minimale de la fonction courante f(x) sur l'intervalle [xmin, xmax]
* max xmin xmax : déterminer toutes les valeurs de x qui fournissent la valeur maximale de la fonction courante f(x) sur l'intervalle [xmin, xmax]
* area xmin xmax : déterminer l'aire comprise sous la fonction courante f(x) pour l'intervalle [xmin, xmax]. Pour cela, le plus simple est d'utiliser la méthode des trapèzes avec un pas d'échantillonnage donné (généralement, utiliser 10e6 échantillons sur l'intervalle est largement suffisant)

Exemple d'exécution :

================================================================================
OPMATH : perform miscellaneous processing on a mathematical function
================================================================================
Note : enter an empty line to stop the interaction loop
<> Enter command : def x*x - 1
f(x) = x*x - 1
<> Enter command : val 2.0
f(2.0) = 3.0
<> Enter command : min -2.0 3.0
min in [-2.0,3.0] : f(0.0) = -1.0
<> Enter command : max -2.0 3.0
max in [-2.0,3.0] : f(3.0) = 8.0
<> Enter command : root -2.0 3.0
root in [-2.0,3.0] : f(-1.0) = f(1.0) = 0.0
<> Enter command : area 0.0 3.0
area under [0.0,3.0] : 6.0
<> Enter command : def cos(x)
f(x) = cos(x)
<> Enter command :

Mon programme est le suivant: ( sachant que je ne me suis arrêté que à "val x"):

f=none

while 1:
command = raw_input("Enter command: ")
if not command:
print "End of program."
break
if command.startswith('def '):
f = command.lstrip('def ')
print "f(x)=%s" % f
elif command.startswith('val '):
x = float(command.lstrip('val '))
try:
print "f(%f)=%f" % (x,eval(f))
except TypeError:
print "No function defined.
else:
print "Unknown command."

J'ai plusieurs problèmes:
-le programme fonctionne trés bien pour le premier exemple: x*x-1
- je ne sais pas comment faire pour implanter plusieurs fonctions , c'est à dire mettre une fonction au hasard et calculer ses images.
- la seconde chose , je ne sais pas comment calculer le min et le max sur un intervalle donné.

Merci de bien vouloir me répondre si possible, et de m'apporter une aide qui me permettrait d'avancer dans mon programme.

Cordialement
Arnaud.

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
  CCC   AA    SSS   FFFF  V     V 
C A A S F V V
C AAAA SSS FFF V V
C A A S F V V
CCC A A SSSS F V