Tracer la fonction exponentielle

Fermé
ezor Messages postés 177 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 27 octobre 2016 - Modifié par ezor le 31/10/2014 à 20:21
 etisbew_parc - 5 nov. 2014 à 01:59
Bonjour tout le monde
Je souhaite tracer la fonction y=x! sous matlab, mais je n'arrive à rien
j'ia le code suivant

clear all
close all

x = 1:1:99;
y = ones(1,99);

for k=1:length(y)
y(k) = factorial(k);
end

plot(x,y,'+');

mais je n'obtiens que des 0 entre x=0 et x=97
en x=98, j'ai y = 1.5 environ
en x= 99 j'ai y qui tend vers 10^57 !

J'ai essayer de remplir le vecteur y avec

y(1) = 1;
for k = 2:99
y(k) = y(k-1)*k;
end


mais ça me donne exactement la même chose

SI vous avez une idée, ça m'aiderai pas mal.

d'avance merci
ezor

1 réponse

etisbew_parc
5 nov. 2014 à 01:59
Il ne s'agit pas de la fonction exponentielle mais de la factorielle, mais bon, mis à part le fait que les valeurs que tu donnes sont fausses, c'est normal.

1) 98! est de l'ordre de 10^154 et 99! est de l'ordre de 10^156. 99!
vaut presque 100 fois 98! qui lui-même vaut presque 100 fois 97!, donc
en traçant toutes les factorielles de 1 à 99 sur un même graphe, tu
obtiens à peu près le même résultat visuel qu'en traçant 97 trucs qui
valent moins de 1, suivis de la valeur 100 puis de la valeur 10000
plot([rand(97,1);1e2;1e4],'+');
2) Ce que tu voudrais tracer s'écrit en une seule ligne
plot(factorial(1:99),'+');
Ou encore, en utilisant ta seconde manière de procéder
plot(cumprod(1:99),'+');
3) Pour x=29, l'erreur commise sur la factorielle est déjà de plus de 10^15, pour x=99, elle est de plus de 10^140.

4) Si tu veux quelques chose de plus visuel, trace la courbe avec une échelle logarithmique
semilogy(factorial(1:99),'+');
Mais dans ce cas, autant tracer la somme des logarithmes naturels ou décimaux, c'est plus précis
plot(cumsum(log(1:99)),'+');
5) Quelle idée de venir poser une question sur ce site de demeurés ! Tu as choisi le site le plus lamentable de la toile, y a-t-il une raison particulière ?
1