Doppelsumme über Funktion < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 14:57 So 24.07.2011 | Autor: | Anja_B |
Aufgabe | Hallo zusammen,
ich brauche dringend Hilfe. Ich habe eine Funktion gegeben, die ich in Matlab berechnen lassen möchte, leider gelingt es mir aber nicht:
Die Formel lautet:
[mm] \summe_{i=1}^{infty}\summe_{j=0}^{i}(i-j)*\bruch{exp^-(M+N)M^iN^j}{i!j!}
[/mm]
Die Gleichung ist gültig, falls i>j
die i und j sind dabei ganze Zahlen, bzw. poissonverteilte Zufallsvariablen. |
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Nun habe ich es so probiert:
function [U]=U(M,N)
U=0
ii=poissrnd(M,1,1000)
jj=poissrnd(N,1,1000)
if ii>jj
for ii=1:lenght(ii)
for jj=0:ii
U= (ii-jj)*(exp(-(M+N))*M^ii*N^jj)/(factorial(ii)*factorial(jj)
end
end
end
allerdings sagt Matlab dann:
Index exceeds matrix dimensions.
Was mache ich bloß falsch?
Für Hilfe wäre ich sehr dankbar!
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 16:04 So 24.07.2011 | Autor: | leduart |
Hallo
ohne zu viel matlab zu können, das if ii>jj steht an der falschen Stelle, das ist doch das Abbruchkriterium für die j Schleife?
da wo es jetzt steht ist ii, jj nicht inititialisiert also wohl ii=jj=0 und dein if nie erfüllt.
also brauchst du es gar nicht, wenn die j Schleife bis ii-1 läuft
so hast du sie immer bis ii laufen. oder du machst while jj<ii ....
gruss leduart
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 16:51 So 24.07.2011 | Autor: | Anja_B |
Danke für die schnelle Antwort:)
Leider löst sich das Problem nicht, wenn ich das if erst vor die Gleichung von U schreibe.
Ich habe das if jetzt komplett rausgelöscht, da ich diese Bedingung ja auch vor dem Aufruf der Funktion einfügen könnte, das Problem bleibt aber das gleiche:
Index exceeds matrix dimensions.
Kann es sein, dass ich bestimmte Elemente transponieren muss, damit dort eine einzige Zahl rauskommt?
|
|
|
|
|
Da geht es ja drunter und drüber!1: | M=2;
| 2: | N=3;
| 3: |
| 4: | ende = 10;
| 5: | summe=0;
| 6: | for i=1:ende
| 7: | for j=0:i
| 8: | summe= summe+(i-j)*(exp(-(M+N))*M^i*N^j)/(factorial(i)*factorial(j) );
| 9: | end
| 10: | end
| 11: | summe
| 12: |
| Erstens würde ich dir die Verwendung von Schleifen in Matlab abraten. Verschachte Schleifen? Noch schlechter!
2. Dieses factorial() jedes mal neu aufzurufen ist auch ne schlechte Idee! Das geht wesentlich effektiver.
3. [mm]P(X_1+X_2=n)&=\sum_{k=0}^n P(X_1=k) \, P(X_2=n-k)=\sum_{k=0}^n \frac{\lambda_1^k}{k!}\, \mathrm{e}^{-\lambda_1} \, \frac{\lambda_2^{n-k}}{(n-k)!} \,\mathrm{e}^{-\lambda_2}=\frac{1}{n!}\, \mathrm{e}^{-(\lambda_1+\lambda_2)} \, \sum_{k=0}^n \binom{n}{k} \lambda_1^k \, \lambda_2^{n-k}=\frac{(\lambda_1+\lambda_2)^n}{n!} \, \mathrm{e}^{-(\lambda_1+\lambda_2)}
[/mm]
für stochast. unabh. pois-vert. Zufallsvariablen gilt also
[mm]X_1+\dotsb+X_n\sim\textrm{P}(\lambda_1+\dotsb+\lambda_n)\,[/mm]
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 19:59 So 24.07.2011 | Autor: | Anja_B |
Danke für die Hilfe!
Leider ist in dem Code die Summe NaN. :( Schade, das liegt wahrscheinlich an der schlechten Programmierung mit den For-Schleifen. Ich weiß mir leider auch nicht anders zu helfen, als mit for-Schleifen:((
Um die dritte Beziehung weiß ich bereits, deswegen steht ja auch exp^-(M+N), allerdings hilft mir diese Beziehung nicht weiter, da ich ja noch die Differenz davorstehen habe..
Was die Formel ja eigentlich berechnet, ist eine Differenz zwischen zwei ganzen Zahlen gewichtet mit ihrer gemeinsamen Eintrittswahrscheinlichkeit und das dann über alle Werte aufsummiert.
Aber trotzdem danke, jetzt weiß ich wenigstens, dass ich grob die richtige Richtung einschlage auch wenn Matlab das anders sieht:)
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 20:19 So 24.07.2011 | Autor: | wieschoo |
> Danke für die Hilfe!
>
> Leider ist in dem Code die Summe NaN. :( Schade, das liegt
> wahrscheinlich an der schlechten Programmierung mit den
> For-Schleifen. Ich weiß mir leider auch nicht anders zu
> helfen, als mit for-Schleifen:((
Ne das liegt an der Fakultät. Die Werte werden einfach zu groß!1: | M=2;
| 2: | N=3;
| 3: |
| 4: | ende = 200;
| 5: | summe=0;
| 6: | fak1 = 1;
| 7: | for i=1:ende
| 8: | fak2=1;
| 9: | if i>0
| 10: | fak1=fak1*i;
| 11: | end
| 12: | for j=0:i
| 13: | if j>0
| 14: | fak2=fak2*j;
| 15: | end
| 16: | summe= summe+(i-j)*(exp(-(M+N))*M^i*N^j)/(fak1*fak2 );
| 17: | end
| 18: | end
| 19: | summe
| 20: |
| So kommt etwas brauchbares raus.
> Um die dritte Beziehung weiß ich bereits, deswegen steht
> ja auch exp^-(M+N), allerdings hilft mir diese Beziehung
> nicht weiter, da ich ja noch die Differenz davorstehen
> habe..
>
> Was die Formel ja eigentlich berechnet, ist eine Differenz
> zwischen zwei ganzen Zahlen gewichtet mit ihrer gemeinsamen
> Eintrittswahrscheinlichkeit und das dann über alle Werte
> aufsummiert.
Falls du uns deine Aufgabenstellung verrätst, dann kann man auch nach einem anderen Weg suchen.
> Aber trotzdem danke, jetzt weiß ich wenigstens, dass ich
> grob die richtige Richtung einschlage auch wenn Matlab das
> anders sieht:)
>
>
|
|
|
|
|
Status: |
(Frage) überfällig | Datum: | 21:18 So 24.07.2011 | Autor: | Anja_B |
Ok, die Geschichte lautet wie folgt:
Der Anteil der Arbeitsmärkte mit i Arbeitnehmern ist poissonverteilt mit M (=durchschnittliche Anzahl der Arbeitnehmer in einem Arbeitsmarkt)
Die Anteil der Arbeitsmärkte mit j Jobs ist auch poissonverteilt mit N (=durchschnittliche Anzahl der Jobs in einem Arbeitsmarkt)
Da diese beiden Anteile unabhängig sind, folgt eine bivariate Poissonverteilung mit :
[mm] \bruch{exp^-(M+N)*M^i*N^j}{i!j!}
[/mm]
es gibt Märkte mit i>j, dort besteht Arbeitslosigkeit, und Märkte mit i<j, dort gibt es offene Stellen.
Die Anzahl der arbeitslosen Personen ist die Summe zwischen der Anzahl der Arbeitnehmer i und der Jobs j in einem bestimmten Markt, aufsummiert über alle Arbeitsmärkte, mit i>j. Und aus diesem Satz resultiert auch die obige Formel.
Das gleiche für j<i und die Differenz i-j ist die Anzahl der offenen Stellen.
Dann weiß ich noch, dass u=U/M ist und u ist die Arbeitslosenquote, d.h. ca. 5,5% und v=V/N wobei v die Vakanzquote mit 2,3% ist.
M=244,2 und N={233:243}
Ich habe mir dazu eine Matrix gebastelt:
ii=0:100;
jj=0:100;
[mm] pi_i= [/mm] poisspdf(ii,M);
[mm] pi_j= [/mm] poisspdf(jj,N);
[mm] pi_ij=pi_i'*pi_j;
[/mm]
Das würde mir die bivariate Wahrscheinlichkeitsverteilung geben.
Dann habe ich mir noch poissonverteilte Zufallsvariablen erzeugt, dann aus denen die Differenz gebildet. Die Differenzen, die positiv sind aufsummiert und die, die negativ sind auch
iii=poissrnd(M,1,100);
jjj=poissrnd(N,1,100);
diff=iii-jjj;
[mm] id_1=find(diff>0);
[/mm]
[mm] id_2=find(diff<0);
[/mm]
[mm] id_3=find(diff==0);
[/mm]
[mm] X=sum(diff(id_1))
[/mm]
[mm] Y=abs(sum(diff(id_2)))
[/mm]
X würde mir die absolute Anzahl an Arbeitslosen im Sample geben
Y die absolute Anzahl der offenen Stellen.
Das Problem ist nur, dass ich die Eintrittswahrscheinlichkeiten berücksichtigen muss, also d.h., dass da i=10 und j=5
---> (10-5)=Anzahl *Wahrscheinlichkeit Pr{ i=10 & i=5}
Im Moment bekomme ich bei der Funktion, die ich vorhin geschrieben habe,bereits verbessert mit deinen Anmerkungen, eine Zahl raus, die ist soooooo klein, dass wenn ich sie noch durch M teile, ich nie auf 5,5% komme:)
Ich hoffe, das war verständlich...
Wenn nicht gerne nachfragen, denn ich bin so verzweifelt, ich brauche alle Hilfe, die ich bekommen kann!
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 07:22 Mi 27.07.2011 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|