Bonjour ,
Je suis débutante en Matlab et je veux appliquer la formule ci-dessous , mais je ne sais pas comment:surtout le produit et la somme.
Merci pour vos aide en avance.
-----
Bonjour ,
Je suis débutante en Matlab et je veux appliquer la formule ci-dessous , mais je ne sais pas comment:surtout le produit et la somme.
Merci pour vos aide en avance.
Une façon de faire est de décomposer le problème en plusieurs parties qui seront autant de fonctions, chaque fonction appelant en entrée les variables dont elle a besoin, puis de combiner le tout
1) pour le produit:
2) pour la sommeCode:fonction p=monproduit(i,C) p=1; % initialisation à l'élément neutre pour le produit for j=1:i init=p*j((C+1-j)/C); end end %endfunction
3) on combine en mettant à la fin du code les fonctions intermédiairesCode:function s=masomme(lambda, L, A, C) s=0; % initialisation à l'élément neutre pour la somme for i=1:C haut=(lambda*L/A)^i; bas=monproduit(i,C); s=s+haut/bas; end end % endfonction
Ce n'est probablement pas la façon la plus efficace de coder cela, mais si tu débutes c'est la démarche la plus simple.Code:function resultat=myfunction(lambda, L, A, C) resultat=1+masomme(lambda, L, A, C); end % fin de la fonction principale function s=masomme(lambda, L, A, C) s=0; % initialisation à l'élément neutre pour la somme for i=1:C haut=(lambda*L/A)^i; bas=monproduit(i,C); s=s+haut/bas; end end % fin de la sous-fonction 1 fonction p=monproduit(i,C) p=1; % initialisation à l'élément neutre pour le produit for j=1:i init=p*j((C+1-j)/C); end end % fin de la sous-fonction 2
Merci pour votre réponse,
J'ai écrit cette fonction
Est -il vrai?Code:function p0= calculp0(L,K,N,lamda,A) c=L*K*N; p=0; for i=1:1:c for j=1:1:i p1 = (lamda*L/A)^i/(j*((c+1-j)/c)); p = p+p1; end p0=p; end
En fait j'ai essayé avec le votre, mais il m'affiche des messages d'erreur.
Ce n'est pas conforme à l'équation, en particulier "(lamda*L/A)^i)" est dans la boucle de multiplication (entre autres problèmes).
Yep, deux typos ("init" à la place de "p", absence du signe "*" après le "j")... on va dire qu'ils étaient "laissés en exercice"
Code:function resultat=myfunction(lambda, L, A, C) resultat=1+masomme(lambda, L, A, C); end % fin de la fonction principale function s=masomme(lambda, L, A, C) s=0; % initialisation à l'élément neutre pour la somme for i=1:C haut=(lambda*L/A)^i; bas=monproduit(i,C); s=s+haut/bas; end end % fin de la sous-fonction 1 function p=monproduit(i,C) p=1; % initialisation à l'élément neutre pour le produit for j=1:i p=p*j*((C+1-j)/C); end end % fin de la sous-fonction 2
Ci-dessous, une version corrigée conservant le style de ta fonction (et identique à la mienne (sauf en cas de très grand nombre, pour lesquelles les deux algorithmes peuvent arrondir différemment))
Ta fonction est légèrement plus efficace que la mienne, mais avec l'inconvénient d'être plus difficile à comprendre/corriger (surtout quand on débute). Si la performance est un objectif, on peut faire mieux en adoptant un style vectorisé.Code:function p0=calculp0(L,K,N,lamda,A) c=L*K*N; % je suppose que c'est correct p=0; for i=1:c % le chiffre du milieu est facultatif (1 est le défaut) p1=1; % ici il manquait l'initialisation du produit for j=1:i p1 = p1*(j*((c+1-j)/c)); % la partie de la fonction pour le produit end p=p+(lamda*L/A)^i/p1; % la partie de la fonction qui calcule la somme end p0=1+p; % il manquait aussi la fin du calcul end
Pour les grandes valeurs les deux algorithmes donnent comme résultat l'infini
c'est bien compliqué Matlab...
la même chose sous R : fu <- function(lambda,L,A,C) 1/(1+sum((lambda*L/A)^(1:C)/cumprod((1:C)*(C:1)/C)))
J'ai déjà l'écrit en java , même chose.la même chose sous R : fu <- function(lambda,L,A,C) 1/(1+sum((lambda*L/A)^(1:C)/cumprod((1:C)*(C:1)/C)))
Est-il vrai de faire des exceptions pour les valeurs qui tendent vers l'infini , pour calculer p0?