2010-09-11 23 views
3

J'ai un système de 2 équations à 2 inconnues que je veux résoudre en utilisant MATLAB mais je ne sais pas exactement comment programmer. On m'a donné des informations sur une distribution gamma (moyenne de 1,86, intervalle de 90% entre 1,61 et 2,11) et finalement, je veux obtenir la moyenne et la variance. Je sais que je pourrais utiliser l'approximation normale mais je préférerais résoudre pour A et B, les paramètres de forme et d'échelle de la distribution gamma, et trouver la moyenne et la variance de cette façon. Dans le code pseudo-Matlab Je voudrais résoudre ceci:MATLAB | calculer les paramètres de gamma dist en fonction de la moyenne et de l'intervalle de probabilité

gamcdf(2.11, A, B) - gamcdf(1.61, A, B) = 0.90; 
A*B = 1.86; 

Comment iriez-vous de résoudre cela? J'ai la boîte à outils mathématique symbolique si cela aide.

Répondre

5

La moyenne est A * B. Alors pouvez-vous résoudre pour A peut-être en termes de la moyenne (mu) et B?

A = mu/B 

Bien sûr, cela ne vaut rien, sauf si vous connaissiez B. Ou le fait?

Examinez votre première expression. Pouvez-vous remplacer?

gamcdf(2.11, mu/B, B) - gamcdf(1.61, mu/B, B) = 0.90 

Est-ce que cela vous rapproche? Peut-être. Il n'y aura pas de solution symbolique utile, sauf en ce qui concerne la fonction gamma incomplète elle-même. Comment résoudre une seule équation numériquement dans une inconnue dans Matlab? Utilisez fzero.

Bien sûr, fzero recherche une valeur nulle. Mais en soustrayant 0,90, cela est résolu. Peut-on définir une fonction utilisable par fzero?

Utilisez une poignée de fonction.

>> mu = 1.86; 
>> gamfun = @(B) gamcdf(2.11, mu/B, B) - gamcdf(1.61, mu/B, B) - 0.90; 

Alors essayez-le. Avant de faire cela, je recommande toujours de comploter les choses.

>> ezplot(gamfun) 

Hmm. Cette intrigue suggère qu'il pourrait être difficile de trouver un zéro de votre fonction. Si vous l'essayez, vous trouverez ici de bonnes valeurs de départ pour fzero.

Désolé pour mon premier essai. De meilleures valeurs de départ pour fzero, plus un peu plus de traçage donne une distribution gamma qui donne la forme désirée.

>> B = fzero(gamfun,[.0000001,.1]) 
B = 
     0.0124760672290871 
>> A = mu/B 
A = 
      149.085442218805 
>> ezplot(@(x) gampdf(x,A,B)) 

En fait, il s'agit d'une courbe très "normale", c'est-à-dire gaussienne.

+0

C'est formidable, merci pour la réponse détaillée. La fonction fzero est géniale! Je suis un peu consterné qu'il n'y ait pas de solution, cependant, puisque l'auteur d'un article que j'essaie de reproduire a dit qu'il a utilisé une distribution avec exactement ces caractéristiques comme une distribution préalable pour une simulation MCMC. Je suppose que vous n'êtes pas familier avec MCMC, n'est-ce pas? Si c'est le cas, pourriez-vous jeter un coup d'œil à la page 11 de ce document et me dire si j'ai mal compris quelque chose? Voici l'URL du document: http://bit.ly/9uWlLN. – jefflovejapan

+0

Le précédent, j'ai donné les détails ci-dessus est le premier dans le tableau, tau. – jefflovejapan

+0

J'ai lu le document, puis j'ai continué à jouer. J'avais besoin d'utiliser de meilleures valeurs de départ pour fzero, plus un intervalle entre parenthèses pour obtenir la convergence. –