Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 Re : Programmation » programmation scilab » 02-06-2012 19:05:39
Oui effectivement, désolé pour le manque de clarté...
Je dois maintenant calculer le max toujours pour K=1000 et n=57, n=89, n=1253 et n=8571
Je ne vois pas trop pourquoi avec cet algorithme j'ai le max mais dans une liste avec des 0 avant:
function M=M(n)
A=Suite(n,1000)
M(n)=max(A)
endfunction
#2 Programmation » methode montecarlo par scilab » 02-06-2012 18:00:25
- amady89
- Réponses : 0
Bonsoir à tous,
Je dois calculer des intégrales par la méthode de montecarlo c'est à dire l'aire sous la courbe représentative de ces fonctions.
Les deux fonctions sont f(x)= (1+x) / (1+x²) et g(x)=x*sin(2*pi*x) et je dois calculer leur intégrale entre 0 et 1
La fonction f a pour minimum a=1 et pour maximum b=(racine carré de 2) / (4- 2f racine carré de 2) et la fonction g a'= 0 et b'= 1
Pour calculer l'aire sous la courbe de ces fonctions je dois choisir au hasard une valeur alpha entre a et b et une valeur au hasard beta entre 0 et 1
Si beta>f(alpha) alors il a échec sinon succès
on fait N fois l'expérience avec N=100 et l'aire sous la courbe vaut S/N avec S le nombre de succès.
Je propose cet algorithme:
function y=f(x);
y=(1+x)/(1+x*x)endfunction;
function z=g(x);
z=x*sin(2*%pi*x)endfunction;
function a1=aire(N)
S=0;
A=S/N;
a=rand();
b=rand();
if (g(a)>b) then S=S+1;
aire(N)=A;
end
endfunction
Je ne vois pas trop comment le corriger, merci de votre aide. COrdialement.
#3 Re : Programmation » programmation scilab » 02-06-2012 16:57:02
En fait il faut calculer pour chaque n le 1er terme u(k) pour lequel u(k)=1 et non le minimum pour tous les n parmi (57 89 1253 8571)
il faut donc trouver un programme qui donne k=30 pour n=89, k=32 pour n=57 k=132 pour n=1253 et k= 171 pour n=8571
#4 Re : Programmation » programmation scilab » 02-06-2012 12:22:08
function k=T(n)
a=Suite(n,1000);
b=a(1)
k=1;
for k=1:1000
if (b >1) then k=k+1; else b=-1;
b=k;
end;
endfunction;
#5 Re : Programmation » programmation scilab » 02-06-2012 12:15:10
Effectivement j'ai le même problème avec ces instructions mais j'ai réussi à résoudre le problème en programmant de cette manière:
function V = Suite(n,K)
V = [n];
TermeActuel = n;
for i = 1:K-1
if ( modulo(TermeActuel,2) == 0 ) then
TermeActuel = TermeActuel / 2;
else TermeActuel = 3*TermeActuel + 1;
end
V = [V,TermeActuel];
end
endfunction;
Le problème est que ensuite je dois trouver pour K=1000 ou K est le nombre de termes de la suite et pour n=57,89,1253 et 8571 la valeur T(n) qui est la plus petite valeur de k si elle existe pour laquelle u(k)=1 et si elle n'existe pas T(n)=-1
j'ai construit cette fonction qui ne marche pas:
function k=T(n)
a=Suite(n,1000)(1);
k=1;
for k=1:K
if (a >1) then k=k+1; else a=-1;
a=k;
end;
endfunction;
#6 Re : Programmation » programmation scilab » 01-06-2012 20:17:37
Merci pour ton aide, j'ai essayé de corriger quelques détails mais en vain, voici mon programme final:
function [v]=syracuse(n,K)
v=n
for k=1:K
reste=modulo(v,2)
if (reste =0) then v=v/2
else v=3*v+1
end; disp [v];
endfunction
Avec ces instructions, scilab répond lorsque je tape syracuse(5,5) ou [v] qu'ils ne sont pas définis.
#7 Re : Programmation » programmation scilab » 01-06-2012 17:49:17
j'ai pris contact avec mon enseignant qui m'a signalé l'erreur, les suites v et u sont les mêmes
#8 Programmation » programmation scilab » 01-06-2012 12:17:28
- amady89
- Réponses : 14
Bonjour,
Il y a un exercice que je n'arrive pas à faire, voici l'énoncé
1)Ecrire une fonction Scilab calculant, pour deux entiers n et K > 1, la suite
des valeurs v(k) definies par v0 = n et pour 0 k < K
v(k+1) =3uk + 1 si uk est impair
et 1/2uk si uk est pair
2) Pour n = 89, calculer uk pour k = 0;.... ;K = 20.
Pouvez vous m'aider ?
Merci par avance.
Pages : 1







