Inscription / Connexion Nouveau Sujet
Niveau maths spé
Partager :

Petit programme Python

Posté par
pirandello
01-03-15 à 20:43

Bonjour,
Je dois écrire le programme en Python suivant mais je n'ai que très peu manipulé le logiciel au cours de ma vie ( je débute ) et un coup de pouce serait la bienvenue. J'ai écrit un programme mais il ne fonctionne pas, est-ce que quelqu'un aurait une solution à proposer ? Je vous serais très reconnaissant.


Écrire deux fonctions ln et exp qui calculent, seulement avec les quatre opérations arithmétiques,
le logarithme et l'exponentielle réelle d'un réel, dans l'intervalle [1/2 , 2] pour le logarithme et
[−1 , 1] pour l'exponentielle, en utilisant le développement limité en 1 pour le logarithme et en
0 pour l'exponentielle.

Posté par
fm_31
re : Petit programme Python 01-03-15 à 21:16

Bonjour ,

le mieux serait que tu montres ton programme et indiquer ce qui ne marche pas .

Cordialement

Posté par
pirandello
re : Petit programme Python 01-03-15 à 21:36

Je viens d'effacer mon programme, il était rempli d'inepties.
Du coup j'essaie d'en faire un autre mais je ne sais pas par où commencer

qq chose du genre

def exp(x, n=... ) ( pour n il faut que je choisisse un intervalle de précision en rapport avec le temps de calcul, m'a-t-on demandé )
for x from 1/2 to 1
exp(x) = là j'utilise la formule de Taylor pour exprimer exp comme on me l'a demandé ?

Je ne sais pas, grosse confusion

Posté par
fm_31
re : Petit programme Python 01-03-15 à 21:49

Pour la précision , il serait peut-être plus simple de gérer une précision relative 1/10000 par exemple car arrêter une fonction au bout d'un certain temps de calcul n'est pas immédiat .

Posté par
pirandello
re : Petit programme Python 01-03-15 à 21:55

Oui, ça je comptais le faire mais je ne vois pas comment l'exprimer.
Tout comme je vois très mal comment exprimer le reste ?

Posté par
fm_31
re : Petit programme Python 02-03-15 à 07:35

Il te faut partir de la formule mathématique (développements limités par exemple) que tu comptes utiliser puis déterminer les variables que tu as besoin (quotient , numérateur , dénominateur ...) .
Comme tu vas avoir une boucle de répétition , déterminer la condition de fin de boucle .
Faire l'algorithme de la fonction en langage clair puis la coder en python

Posté par
LeDino
re : Petit programme Python 02-03-15 à 15:26

Exponentielle de x pris dans I = [-1;1] :


ENTRER X
N      = 0
U0     = 1
S      = U0
RESTE  = 2
PRECIS = 1/10^9

TANT QUE (RESTE > PRECIS)
    U1 = U0 * X /N
    S = S + U1
    RESTE = 2 * U1 * X /(N+1)
    U0 = U1
FIN_TANT_QUE

AFFICHER S, N, RESTE


Justification :

S est la somme de la suite U définie par :  U(N) = X^N/N!
U(N) peut se calculer par récurrence en partant de U(0) et en multipliant par X/N à chaque itération.
Le reste R(N), différence entre EXP(X) et S(N), est majoré par 2*U(N+1)
Ce qui se prouve facilement en écrivant ce reste...

Posté par
fm_31
re : Petit programme Python 02-03-15 à 15:32

Attention quand même :

TANT QUE (RESTE > PRECIS)
    U1 = U0 * X /N    division par 0
    S = S + U1
    RESTE = 2 * U1 * X /(N+1)   N reste toujours égal à 0

Posté par
LeDino
re : Petit programme Python 02-03-15 à 15:32

Pour X = 1 :  12 itérations
S(X) = 2.718291828
N(X) = 12
R(X) < 3 10^-10

Pour X = 1/2 :  9 itérations
S(X) = 1.64872127
N(X) = 9
R(X) < 5 10^-10


CORRECTIF : prendre la valeur absolue pour le RESTE, car X peut être négatif...

Posté par
LeDino
re : Petit programme Python 02-03-15 à 15:34

Citation :
U1 = U0 * X /N    division par 0
Lol oui, désolé : j'ai oublié d'incrémenter N !

ENTRER X
N      = 0
U0     = 1
S      = U0
RESTE  = 2
PRECIS = 1/10^9

TANT QUE (RESTE > PRECIS)
    N = N+1
    U1 = U0 * X /N
    S = S + U1
    RESTE = 2 * U1 * X /(N+1)
    U0 = U1
FIN_TANT_QUE

AFFICHER S, N, RESTE

Posté par
LeDino
re : Petit programme Python 02-03-15 à 15:37

Implémentation sous R :

X <- -1/2
PRE <- 1/10^9
N <- 0
U0 <- 1
S <- U0
RMAX <- 2

while (RMAX > PRE) {
    N <- N + 1
    U1 <- U0*(X/N)
    S <- S + U1
    U0 <- U1
    RMAX <- abs(2 * U1 * (X/(N+1)))
    }
print(S)
print(N)
print(RMAX)

Posté par
verdurin
re : Petit programme Python 02-03-15 à 17:01

Bonjour,
un algorithme un peu différent, en python.


def expo(x) :
	exp=1;
	n=16; 
	for i in range(n,1,-1):
	    exp=exp*x/i+1
	return(exp*x+1);

Il calcule juste le DL à l'ordre 16 (ce qui donne théoriquement une précision meilleure que 10-13) en utilisant la méthode de Horner pour l'évaluation du polynôme.

Posté par
pirandello
re : Petit programme Python 02-03-15 à 20:02

Merci beaucoup, je commence à voir un peu mieux.
Quelqu'un a-t-il pour ln également ?

Et je me débrouillerai seul pour arctan, ln(1+x) et chx.

Posté par
LeDino
re : Petit programme Python 02-03-15 à 20:06

Pour log(X) tu écris log(1+x) avec X=1+x et x entre -.5 et +1.
Ensuite DL.
Et Calcul d'une somme S de termes définis par récurrence.

La récurrence doit ressembler à :  
U(n+1) = -U(n)*X*n/(n+1)
en partant de U(0) = X

Posté par
verdurin
re : Petit programme Python 02-03-15 à 20:51

Pour la fonction ln, la convergence en 1 est beaucoup trop lente.
Il vaut mieux calculer ln(1/x)=-ln(x) et utiliser
\ln(1-u)=-\sum_{k=1}^n\frac{u^k}{k}

Une implantation en python :


def logb(x) :
	n=30; # précision supérieure à 2^(-30) entre 0.5 et 1
	signe=-1;
	if x>1 : 
            x=1/x; signe=1;
	u=1-x;
	log=1/n;
	for k in range(n,0,-1) : 
            log=log*u+1/k;
	log=signe*u*log;
	return(log);


Une remarque : je ne suis pas un spécialiste du calcul numérique, et je ne connais pas la précision des calculs que fait python.
Je ne peux donc pas garantir la précision du résultat.
Je suis parti de l'idée que la mantisse des flottants comporte au moins 64 bits.
Comme on commence par calculer les plus petits termes, il me semble que l'on peut monter jusqu'à n=40 sans problème, et, vraisemblablement, un peu au delà.

Posté par
verdurin
re : Petit programme Python 02-03-15 à 21:05


il faut corriger mon programme : log doit-être initialisé à 1/(n+1).
En pratique sa ne change rien, sauf pour les petites valeurs de n.



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1724 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !