Outils pour utilisateurs

Outils du site


jeux_dessais

Ceci est une ancienne révision du document !


Calcul de jeux d'essais de paramètres pour tester ou dessiner des fonctions

Objectif

j'ai une fonction y=f(x), et j'aimerais bien pouvoir en calculer d'un seul coup 20 valeurs pour x=0.2 à x=2.3 afin de la tracer.

J'ai une autre fonction y=f(x,z,t), et j'aimerais étudier ses valeurs pour 10 jeux de paramètres [x,z,t] allant de [2,56,7.89] jusqu'à [8.23,72,-21.32]

Dans les 2 cas, j'ai besoin d'une fonction qui me calcule la liste des valeurs ou la liste des jeux de valeurs que je vais pouvoir appliquer à la fonction.

Code Python

usr/bin/python
# -*- coding: utf-8 -*-
 
# indispensable pour qu'une division entre 2 entiers donne un résultat décimal!
from __future__ import division
 
def jeuxdessais(n,L1,L2):
    """jeudessais(n,L1,L2): Construit une liste de n listes de paramètres de L1 (début) à L2 (fin)"""
    L=[]
    if type(L1)!=list:
        # ici, L1 est un nombre, alors L2 doit en être un aussi
        # calcul d'une liste simple (et non d'une liste de liste)
        L2m1=L2-L1
        for i in range(0,n):
            L.append(L1+L2m1/(n-1)*i)
    else:
        # L1 est une liste, L2 doit en être une aussi!
        np=len(L1)
        # calcul d'une liste de n listes de np paramètres compris entre L1 et L2
        for i in range(0,n):
            Lp=[]
            for k in range(0,np):
                Lp.append(L1[k]+(L2[k]-L1[k])/(n-1)*i)
            L.append(Lp)
    return L
 
# exemples d'utilisation:
print jeuxdessais(5,2008,2012)  # affiche [2008.0, 2009.0, 2010.0, 2011.0, 2012.0]
print jeuxdessais(5,[1,45.2,89],[20,5,-42]) # affiche (avec arrondis) [[1.0, 45.2, 89.0], [5.75, 35.15, 56.25], [10.5, 25.1, 23.5], [15.25, 15.05, -9.25], [20.0, 5.0, -42.0]]

Utilisation

Une fois la liste des valeurs obtenues, on va utiliser la fonction map pour appliquer à la fonction. Si nécessaire, on va utiliser lambda afin de pouvoir passer une liste de valeurs.

Exemples.

Calcul de 10 valeurs du sinus d'un angle en radian entre 0 et pi/4, arrondi à 4 chiffres après la virgule:

map(sin,jeuxdessais(10,0,pi/4)) => "[0.0000,0.0872,0.1736,0.2588,0.3420,0.4226,0.5000,0.5736,0.6428,0.7071]"

Calcul de la valeur de l'expression 2*cos(pi/x)*z+e**t pour 10 valeurs de [x,z,t] allant de [0.2,3,7] à [1.3,6.8,2.1], arrondi à 4 chiffres après la virgule:

y=lambda L: 2*cos(pi/L[0])*L[1]+e**L[2]

map(y,jeuxdessais(10,[0.2,3,7],[1.3,6.8,2.1])) => [1090.6331,629.7409,374.5529,220.4540,122.8208,64.4736,31.0290,12.51279,2.7275,-2.0135]

Vous voyez l'astuce: comme map demande de ne passer qu'un seul paramètre, on se débrouille avec lambda pour créer une fonction qui demandera une liste de paramètres!

jeux_dessais.1205779330.txt.gz · Dernière modification: 2008/03/17 19:42 de tyrtamos

Outils de la page