Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#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.

Pied de page des forums