Division von BigInteger soll Gelitkommazahl liefern

ernst

Top Contributor
Hallo allerseits,
da ich mit großen Zahlen wie z.B.
100 ! = 100 * 99* ...
rechnen und auch dividieren muss, benutze ich den Datentyp BigInteger

1) Was ist dazu eher geeignet:
BigInteger oder BigDecimal ?

2)
Wie kann man zwei BigInteger bzw. BigDecimal so dividieren, daß als Wert eine Gleitkommazahl rauskommt, also double oder float ?
Also so etwas wie:
double d;
d = big1 / big2;
d = big1.dividiere(big2);


mfg
ern












BigInteger oder
 

temi

Top Contributor
Du kannst die Methoden doubleValue() oder floatValue() von BigInteger/BigDecimal verwenden, um dieses in double oder float zu wandeln.

Wird dazu einen Blick in diese Doku und diese.
 

ernst

Top Contributor
Du kannst die Methoden doubleValue() oder floatValue() von BigInteger/BigDecimal verwenden, um dieses in double oder float zu wandeln.
Wird dazu einen Blick in diese Doku und diese.

Danke für das Feedback.
In der Doku steht:
========================================
public double doubleValue()
Converts this BigInteger to a double. This conversion is similar to the narrowing primitive conversion from double to float as defined in section 5.1.3 of The Java™ Language Specification: if this BigInteger has too great a magnitude to represent as a double, it will be converted to Double.NEGATIVE_INFINITY or Double.POSITIVE_INFINITY as appropriate. Note that even when the return value is finite, this conversion can lose information about the precision of the BigInteger value.
==============================================
Ich will große Zahlen durcheinander dividieren, wie z.B:
500 ! / 400 !

Bekomme ich da Double.POSITIVE_INFINITY
Bzw. wie kann man das vermeiden ?

mfg
ern
 

temi

Top Contributor
Wenn deine Zahl zu groß ist für ein double, dann ist sie eben zu groß. Was gibt es da noch zu wollen?

Arbeite einfach generell mit BigInteger/BigDecimal. Was ist der Grund für die Konvertierung?
 

ernst

Top Contributor
Wenn deine Zahl zu groß ist für ein double, dann ist sie eben zu groß. Was gibt es da noch zu wollen?
Arbeite einfach generell mit BigInteger/BigDecimal. Was ist der Grund für die Konvertierung?
big1 / big2 liefert ein BigInteger.

Mein Wunsch ist Folgender:
Es soll eine Methode egeben, die bei
big1 / big2
ein double liefert.

mfg
ern
 
Wie meinst du das ?
Ungefähr so
Java:
	public static BigInteger fac(int i1) {
		BigInteger one = BigInteger.ONE;
		while (i1 > 1) {
			one = one.multiply(BigInteger.valueOf(i1--));
		}
		return one;
	}

	public static double div(BigInteger i1, BigInteger i2) {
		return i1.divide(i2).doubleValue();
	}

	public static void main(String[] args) {
		System.out.println(div(fac(40), fac(30)));
	}
 

temi

Top Contributor
Mein Wunsch ist Folgender:
Es soll eine Methode egeben, die bei
big1 / big2
ein double liefert.
Wie dieser Wunsch erfüllt werden kann steht ja jetzt schon da. Jedes BigInteger/BigDecimal verfügt über die Methode doubleValue(). Da das Ergebnis deiner Division wiederum ein BigInteger/BigDecimal ist, kannst du darauf natürlich ebenfalls diese Methode aufrufen.

Worauf ich hinauswollte war folgendes: Wenn du mit so großen Zahlen operierst, dann solltest du einfach generell mit dem gewählten Datentyp weiterarbeiten und zwar solange, bis es für irgendeine weitere Operation notwendig wird, in einen anderen Datentyp zu konvertieren, wie z.B. zur Anzeige in einen String konvertieren.
 

ernst

Top Contributor
Ich bin jetzt auf eine Lösung gekommen bzw. so habe ich es gemeint (Genauigkeit auf 2 Stellen):
double d;
BigInteger zähler = new BigInteger("10");
zähler = zähler.multiply(new BigInteger("100"));
BigInteger nenner = new BigInteger("3");
d = zähler.divide(nenner).doubleValue()/100.0;
System.out.println("d="+d);

mfg
ern
 

mihe7

Top Contributor
Java:
BigDecimal.TEN.multiply(new BigDecimal(100))
    .divide(new BigDecimal(3), RoundingMode.HALF_UP)
    .divide(new BigDecimal(100))
    .doubleValue();
 

mrBrown

Super-Moderator
Mitarbeiter
Ich bin jetzt auf eine Lösung gekommen bzw. so habe ich es gemeint (Genauigkeit auf 2 Stellen):
Damit löst du das Problem (welches du mit der Lösung hattest, also @temi sie vorgeschlagen hat) allerdings nicht:
Ich will große Zahlen durcheinander dividieren, wie z.B:
500 ! / 400 !

Bekomme ich da Double.POSITIVE_INFINITY
Bzw. wie kann man das vermeiden ?



Bin mir nicht sicher, ob BigInteger gepooled werden

Ist doch völlig irrelevant?
 

fhoffmann

Top Contributor
Ich will große Zahlen durcheinander dividieren, wie z.B:
500 ! / 400 !
Das Egebnis ist eine (im Dezimalsystem) über 200-stellige Zahl. Was willst du damit?
Und Rechnungen wie
500 ! / 499 ! = 500
kann ich leicht ausführen, wenn ich vorher kürze. Ich muss dafür nicht zunächst zwei über 1000-stellige Dezimalzahlen berechnen und sie dann durcheinander teilen.
 

ernst

Top Contributor
Ich weiß ja nicht genau, wie oft er solche Berechnungen braucht... Eigentlich ist die komplette Aufgabe noch etwas unklar.
Simulation einer Infektion:
In einer Population mit Anzahl n = k+g , z.B. n=1000) hat es zu Beginn k kranke und g gesunde Personen. Die kranken Personen können die gesunden Personen infizieren.
Deswegen betrachte ich die Anzahl der möglichen Paare KK, KG und GG.
(aus diesen kann man dann die neue Anzahl an kranken und gesunden Personen berechnen).
Wie viele Möglichkeiten gibt es?
Dazu muss man mit grossen Zahlen rechnen.

mfg
ern
 

ernst

Top Contributor
Wozu brauchst Du da die Kombinationen?
Ein Paar wie KK, KG oder GG simuliert das Aufeinandertreffen zweier Personen:
Ein Kranker kann auf einen Kranken oder einen Gesunden treffen.
Ein Gesunder kann auf einen Gesunden treffen.
Dieses Aufeinandertreffen kann dann eine Infektion zur Folge haben.

Inspiriert dazu hat mich folgende Aufgabe:
www.friedrich-verlag.de/mathematik/funktionen/mathematisch-modellieren-spiel-zur-simulation-einer-epidemie/

mfg
ern
 

ernst

Top Contributor
Hmm, die Wahrscheinlichkeit dürfte im Mittel bei gk/(n-1) liegen, d. h. für einen Gesunden k/(n-1).
Das sehe ich nicht so schnell.
Zuerst mal muss man die Anzahl anz aller möglichen n-Tupel berechnen, die aus k Kranken und g Gesunden bestehen.
Pro n-Tupel schaut man sich dann die Paare KK, GG, KG an und berechnet dann (nach der Vorschrift, die in dem Link steht) die Zugänge/Abgänge an Kranken und Gesunden.
Diese Zugänge/Abgänge werden dann aufsummiert zu einem sum_deltaK und sume_deltaG.
Wenn man dann
anz / sum_deltaK
und
anz / sum_deltaG
berechnet hat man den durchschnittlichen Abgang/Zugang pro Simulationsschritt und damit einen neuen Wert für g und k.
Ich bin noch am Überlegen, wie man das geschickt berechnet.

mfg
ern
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Das sehe ich nicht so schnell.
Die Überlegung ist folgende: nehmen wir einen Gesunden an, so dass von den 1000 nur noch 999 (n-1) übrig bleiben. Aus den 999 wählt man nun zufällig einen aus. Wie hoch ist die Wahrscheinlichkeit, dass dieser krank ist? Wenn es k Kranke gibt, dann liegt die Wahrscheinlichkeit bei k/(n-1). Den Spaß wiederholt man nun im Geiste für alle Gesunden, so dass sich insgesamt eine Wahrscheinlichkeit von gk/(n-1) ergibt, dass irgendein Gesunder auf irgendeinen Kranken trifft.
 

ernst

Top Contributor
Die Überlegung ist folgende: nehmen wir einen Gesunden an, so dass von den 1000 nur noch 999 (n-1) übrig bleiben. Aus den 999 wählt man nun zufällig einen aus. Wie hoch ist die Wahrscheinlichkeit, dass dieser krank ist? Wenn es k Kranke gibt, dann liegt die Wahrscheinlichkeit bei k/(n-1). Den Spaß wiederholt man nun im Geiste für alle Gesunden, so dass sich insgesamt eine Wahrscheinlichkeit von gk/(n-1) ergibt, dass irgendein Gesunder auf irgendeinen Kranken trifft.
Wenn du "den Spaß" wiederholst, dann muß man das GK Paar aus der Population nehmen.
nNeu ist dann 998 und gNeu ist dann g-1 und Kneu = k-1
Urnenmodell ohne Zurücklegen.

mfg
ern
 

advc_java

Neues Mitglied
Etwas makaber, aber bei der Simulation sterben bei mir alle weg:
Java:
import java.util.Collections;
import java.util.LinkedList;
import java.util.Random;

public class Spiel {
	private LinkedList<Spieler> spieler = new LinkedList<>();

	public Spiel(int n, int n2) {
		for (int i = 1; i <= n; i++) {
			spieler.add(new Spieler(i));
		}
		for (int i = 0; i < n2; i++) {
			spieler.get(i).setKrank();
		}
	}

	public void next() {
		Random random = new Random();
		Collections.shuffle(spieler);
		LinkedList<Spieler> spieler2 = new LinkedList<>();
		while (spieler.size() > 1) {
			Spieler a = spieler.removeFirst();
			Spieler b = spieler.removeFirst();
			System.out.println(a + " und " + b + " gezogen.");
			int paar = (a.verfassung.equals("gesund") ? 0 : 1) + (b.verfassung.equals("gesund") ? 0 : 2);
			switch (paar) {
			case 0:
				// both healthy
				break;
			case 1:
				// a ill, b healthy
				Spieler c = a;
				a = b;
				b = c;
			case 2:
				// a healthy, b ill
				int r1 = random.nextInt(6);
				int r2 = random.nextInt(6);
				if (r1 <= r2) {
					a.setKrank();
				}
				int r3 = random.nextInt(6);
				if (r3 == 0) {
					b.setTot();
				} else if (r3 == 5) {
					b.setGesund();
				}
				break;
			case 3:
				// both ill
				int r4 = random.nextInt(6);
				if (r4 == 0) {
					a.setTot();
				} else if (r4 == 5) {
					a.setGesund();
				}
				int r5 = random.nextInt(6);
				if (r5 == 0) {
					b.setTot();
				} else if (r5 == 5) {
					b.setGesund();
				}
				break;
			default:
				break;
			}
			if (!a.verfassung.equals("tot")) {
				spieler2.add(a);
			}
			if (!b.verfassung.equals("tot")) {
				spieler2.add(b);
			}
		}
		spieler.addAll(spieler2);
	}

	public static void main(String[] args) {
		Spiel spiel = new Spiel(10, 2);
		for (int i = 1; i <= 10; i++) {
			System.out.println("Runde: " + i);
			spiel.next();
		}
	}
}

class Spieler {
	int nummer;
	String verfassung;

	Spieler(int nummer) {
		this.nummer = nummer;
		this.verfassung = "gesund";
	}

	void setGesund() {
		this.verfassung = "gesund";
		System.out.println(nummer + " wird gesund.");
	}

	void setKrank() {
		this.verfassung = "krank";
		System.out.println(nummer + " wird krank.");
	}

	void setTot() {
		this.verfassung = "tot";
		System.out.println(nummer + " ist tot.");
	}

	@Override
	public String toString() {
		return String.format("Spieler [nummer=%s, verfassung=%s]", nummer, verfassung);
	}
}

Code:
1 wird krank.
2 wird krank.
Runde: 1
Spieler [nummer=6, verfassung=gesund] und Spieler [nummer=1, verfassung=krank] gezogen.
6 wird krank.
Spieler [nummer=3, verfassung=gesund] und Spieler [nummer=5, verfassung=gesund] gezogen.
Spieler [nummer=4, verfassung=gesund] und Spieler [nummer=9, verfassung=gesund] gezogen.
Spieler [nummer=2, verfassung=krank] und Spieler [nummer=10, verfassung=gesund] gezogen.
10 wird krank.
Spieler [nummer=7, verfassung=gesund] und Spieler [nummer=8, verfassung=gesund] gezogen.
Runde: 2
Spieler [nummer=8, verfassung=gesund] und Spieler [nummer=4, verfassung=gesund] gezogen.
Spieler [nummer=5, verfassung=gesund] und Spieler [nummer=6, verfassung=krank] gezogen.
5 wird krank.
Spieler [nummer=3, verfassung=gesund] und Spieler [nummer=9, verfassung=gesund] gezogen.
Spieler [nummer=2, verfassung=krank] und Spieler [nummer=7, verfassung=gesund] gezogen.
Spieler [nummer=1, verfassung=krank] und Spieler [nummer=10, verfassung=krank] gezogen.
1 ist tot.
Runde: 3
Spieler [nummer=5, verfassung=krank] und Spieler [nummer=2, verfassung=krank] gezogen.
Spieler [nummer=6, verfassung=krank] und Spieler [nummer=3, verfassung=gesund] gezogen.
3 wird krank.
Spieler [nummer=8, verfassung=gesund] und Spieler [nummer=7, verfassung=gesund] gezogen.
Spieler [nummer=4, verfassung=gesund] und Spieler [nummer=9, verfassung=gesund] gezogen.
Runde: 4
Spieler [nummer=2, verfassung=krank] und Spieler [nummer=3, verfassung=krank] gezogen.
3 wird gesund.
Spieler [nummer=4, verfassung=gesund] und Spieler [nummer=7, verfassung=gesund] gezogen.
Spieler [nummer=9, verfassung=gesund] und Spieler [nummer=10, verfassung=krank] gezogen.
10 wird gesund.
Spieler [nummer=6, verfassung=krank] und Spieler [nummer=8, verfassung=gesund] gezogen.
Runde: 5
Spieler [nummer=6, verfassung=krank] und Spieler [nummer=9, verfassung=gesund] gezogen.
Spieler [nummer=5, verfassung=krank] und Spieler [nummer=10, verfassung=gesund] gezogen.
Spieler [nummer=4, verfassung=gesund] und Spieler [nummer=2, verfassung=krank] gezogen.
4 wird krank.
Spieler [nummer=3, verfassung=gesund] und Spieler [nummer=8, verfassung=gesund] gezogen.
Runde: 6
Spieler [nummer=8, verfassung=gesund] und Spieler [nummer=10, verfassung=gesund] gezogen.
Spieler [nummer=5, verfassung=krank] und Spieler [nummer=4, verfassung=krank] gezogen.
Spieler [nummer=6, verfassung=krank] und Spieler [nummer=9, verfassung=gesund] gezogen.
9 wird krank.
Spieler [nummer=3, verfassung=gesund] und Spieler [nummer=7, verfassung=gesund] gezogen.
Runde: 7
Spieler [nummer=4, verfassung=krank] und Spieler [nummer=10, verfassung=gesund] gezogen.
10 wird krank.
Spieler [nummer=3, verfassung=gesund] und Spieler [nummer=5, verfassung=krank] gezogen.
Spieler [nummer=9, verfassung=krank] und Spieler [nummer=6, verfassung=krank] gezogen.
6 wird gesund.
Spieler [nummer=2, verfassung=krank] und Spieler [nummer=8, verfassung=gesund] gezogen.
2 ist tot.
Runde: 8
Spieler [nummer=7, verfassung=gesund] und Spieler [nummer=8, verfassung=gesund] gezogen.
Spieler [nummer=6, verfassung=gesund] und Spieler [nummer=3, verfassung=gesund] gezogen.
Spieler [nummer=5, verfassung=krank] und Spieler [nummer=9, verfassung=krank] gezogen.
Spieler [nummer=10, verfassung=krank] und Spieler [nummer=4, verfassung=krank] gezogen.
Runde: 9
Spieler [nummer=8, verfassung=gesund] und Spieler [nummer=10, verfassung=krank] gezogen.
Spieler [nummer=4, verfassung=krank] und Spieler [nummer=7, verfassung=gesund] gezogen.
Spieler [nummer=5, verfassung=krank] und Spieler [nummer=3, verfassung=gesund] gezogen.
3 wird krank.
Spieler [nummer=6, verfassung=gesund] und Spieler [nummer=9, verfassung=krank] gezogen.
6 wird krank.
Runde: 10
Spieler [nummer=4, verfassung=krank] und Spieler [nummer=6, verfassung=krank] gezogen.
Spieler [nummer=7, verfassung=gesund] und Spieler [nummer=9, verfassung=krank] gezogen.
7 wird krank.
9 ist tot.
Spieler [nummer=10, verfassung=krank] und Spieler [nummer=3, verfassung=krank] gezogen.
10 ist tot.
Spieler [nummer=5, verfassung=krank] und Spieler [nummer=8, verfassung=gesund] gezogen.
8 wird krank.
 

ernst

Top Contributor
case 1:
// a ill, b healthy
Spieler c = a;
a = b;
b = c;

Du betrachtest hier den gesunden Spieler.
Mit der Wahrscheinlichkeit von 0,5 wird er krank.
Wo wird hier die WK berücksichtigt ?

mfg
ern
 

ernst

Top Contributor
Die Überlegung ist folgende: nehmen wir einen Gesunden an, so dass von den 1000 nur noch 999 (n-1) übrig bleiben. Aus den 999 wählt man nun zufällig einen aus. Wie hoch ist die Wahrscheinlichkeit, dass dieser krank ist? Wenn es k Kranke gibt, dann liegt die Wahrscheinlichkeit bei k/(n-1). Den Spaß wiederholt man nun im Geiste für alle Gesunden, so dass sich insgesamt eine Wahrscheinlichkeit von gk/(n-1) ergibt, dass irgendein Gesunder auf irgendeinen Kranken trifft.
Beispiel: k=3, g=10 n=g+k=13
gk/(n-1) = 3*10 /(13-1) > 1
Wahrscheinlichkeiten sind aber immer <= 1

mfg
ern
 

ernst

Top Contributor
Die Überlegung ist folgende: nehmen wir einen Gesunden an, so dass von den 1000 nur noch 999 (n-1) übrig bleiben. Aus den 999 wählt man nun zufällig einen aus. Wie hoch ist die Wahrscheinlichkeit, dass dieser krank ist? Wenn es k Kranke gibt, dann liegt die Wahrscheinlichkeit bei k/(n-1). Den Spaß wiederholt man nun im Geiste für alle Gesunden, so dass sich insgesamt eine Wahrscheinlichkeit von gk/(n-1) ergibt, dass irgendein Gesunder auf irgendeinen Kranken trifft.
Beispiel: k=3, g=10 n=g+k=13
gk/(n-1) = 3*10 /(13-1) > 1
Wahrscheinlichkeiten sind aber immer <= 1

mfg
ern
 

ernst

Top Contributor
Die Überlegung ist folgende: nehmen wir einen Gesunden an, so dass von den 1000 nur noch 999 (n-1) übrig bleiben. Aus den 999 wählt man nun zufällig einen aus. Wie hoch ist die Wahrscheinlichkeit, dass dieser krank ist? Wenn es k Kranke gibt, dann liegt die Wahrscheinlichkeit bei k/(n-1). Den Spaß wiederholt man nun im Geiste für alle Gesunden, so dass sich insgesamt eine Wahrscheinlichkeit von gk/(n-1) ergibt, dass irgendein Gesunder auf irgendeinen Kranken trifft.
So sieht meine Rechnung aus:
Voraussetzung:
In einer Population von n = k+g Personen gibt es k kranke und g gesunde Personen.

WK, daß ein Kranker auf einen Kranken trifft:
pKK = (k#2) / (n#2)

WK, daß ein Gesunden auf einen Gesunden trifft:
pKG = (g#2) / (n#2)

WK, daß ein Kranker auf einen Gesunden trifft:
pKG = k*g /(n#2)

wobei # für "über" steht, wie z.B. 6 über 2 = 6! / (2!*(6-2)!)

mfg
ern
 
Zuletzt bearbeitet:

mihe7

Top Contributor
OK, meine Interpretation am Ende als "Wahrscheinlichkeit" war falsch.

Die Wahrscheinlichkeit, bei einem "Kontakt" auf einen Kranken zu treffen, liegt bei k/(n-1). In Deinem Beispiel also bei 3/12 = 1/4. Betrachtet man einen einzelnen Gesunden, trifft dieser somit nach einem Kontakt im Mittel auf 1/4 Kranke (er müsste also vier Kontakte haben, um im Mittel auf einen Kranken zu treffen). Nimmt man einen zweiten Gesunden, gilt für den das gleiche. Auch der trifft nach einem Kontakt im Mittel auf 1/4 Kranke. D. h. die Kranken-Kontakt-Rate beträgt für 2 Gesunde das doppelte: 1/2. Bei g Gesunden ergibt das eben das g-fache, also gk/(n-1).
 

CharlizeMe

Neues Mitglied
Du betrachtest hier den gesunden Spieler.
Mit der Wahrscheinlichkeit von 0,5 wird er krank.
Wo wird hier die WK berücksichtigt ?
Der Spieler wird geswappt, so dass immer der Spieler a gesund ist und der Spieler b krank ist.
Treffen ein gesunder und ein kranker Spieler aufeinander, wird durch Würfeln über die mögliche Ansteckung entschieden (höhere Augenzahl gewinnt, ggf. mehrfach würfeln); danach würfelt der vorab schon Kranke noch seinen weiteren Gesundheitszustand aus (1 = tot, 2-5 = krank, 6 = gesund)
das ist 1:1 umgesetzt, bis auf das bei Gleichstand nicht nochmal gewürfelt wird, sondern der Spieler a krank wird. ;)
 

ernst

Top Contributor
Die Wahrscheinlichkeit, bei einem "Kontakt" auf einen Kranken zu treffen, liegt bei k/(n-1).
1)
Die Wahrscheinlichkeit, dass eine beliebige Person (ob krank oder gesund) eine kranke Person kontaktiert (d.h. dass man aus n Personen eine kranke Person rausgreift) ist k/n
Das kann man auch etwas aufwendiger rechnen:
(Anzahl aller KK Möglickeiten + Anzahl aller KG Möglichkeiten) / Anzahl aller Paare aus n Personen

2)
Vermutlich meinst du die WK, dass eine beliebige gesunde Person eine kranke Person kontaktiert.

3)
Gefragt ist aber die WK für einen Kontakt Kranker/Gesunder also KG bzw GK
Die WK dafür ist :
2kg /(n(n-1))

4)
Mein Problem ist:
Wie viele KK, GG und GK Kontakte gibt es im Mittel bei n Personen

mfg
ern
 
Zuletzt bearbeitet:

ernst

Top Contributor
Selbstverständlich - die Aussage wurde oben aus der Annahme abgeleitet, dass ich einen Gesunden betrachte und mich frage, wie hoch die Wahrscheinlichkeit ist, dass dieser auf einen Kranken trifft :)
In dem Link zu der Aufgabe habe ich aber das folgende Problem:
Wie viele KK, GG und GK Kontakte gibt es im Mittel bei n Personen?
Weißt du dazu eine Lösung?

mfg
ern
 

temi

Top Contributor
Hängt das nicht auch davon ab, wievie Personen überhaupt Kontakt zu anderen haben?

Wenn einer von den 1000 daheim bleibt ist der schon mal raus. Und bei den restlichen ist es ja auch nicht so, das jeder der 999 Personen mit 998 anderen Kontakt hat, oder?
 

mihe7

Top Contributor
@ernst Jetzt ist mir @temi zuvorgekommen: das ist ja gerade ein Parameter der ganzen Geschichte.

Man modelliert das andersrum: Im SIR-Modell hast Du einen Pott mit Gesunden (=noch nicht infizierten), einen Pott mit Kranken und einen Pott mit immunen (auch toten) Personen. Und jetzt ist die Frage, wie sich diese Pötte verändern.

Schau Dir mal das Video an:
 

ernst

Top Contributor
Hängt das nicht auch davon ab, wievie Personen überhaupt Kontakt zu anderen haben?
Wenn einer von den 1000 daheim bleibt ist der schon mal raus. Und bei den restlichen ist es ja auch nicht so, das jeder der 999 Personen mit 998 anderen Kontakt hat, oder?
In meinem Modell bleibt niemand zu Hause. Ich betrachte alle theoretisch _möglichen_ Kontakte KK, KG und GG
Ob das Modell gut ist, ist eine andere Frage :)
@mihe7
"Man modelliert das andersrum: Im SIR-Modell hast Du einen Pott mit Gesunden (=noch nicht infizierten), einen Pott mit Kranken und einen Pott mit immunen (auch toten) Personen. Und jetzt ist die Frage, wie sich diese Pötte verändern. "
Danke für das Video. Das ist sicher realistischer als mein Modell.
Trotzdem interessiert mich die Frage zu meinem Modell.

mfg
ern
 

ernst

Top Contributor
Naja, dann ist die Frage: wie viele Möglichkeiten gibt es 2 aus n auszuwählen, oder?
Mein Vorschlag:
Voraussetzung:
In einer Population von n = k+g Personen gibt es k kranke und g gesunde Personen.
WK, daß ein Kranker auf einen Kranken trifft:
pKK = k(k-1) / (n(n-1))
WK, daß ein Kranker auf einen Gesunden trifft:
pKG = 2kg / (n(n-1))
WK, daß ein Gesunder auf einen Gesunden trifft:
pGG = g(g-1) / (n(n-1))

Im Mittel gibt es also bei n Personen die folgende mittlere Anzahl an KK, KG und GG

mittlere Anzahl, daß ein Kranker auf einen Kranken trifft:
aKK = k(k-1) / (n(n-1)) * n
mittlere Anzahl, daß ein Kranker auf einen Gesunden trifft:
aKG = 2kg / (n(n-1)) * n
mittlere Anzahl, daß ein Gesunder auf einen Gesunden trifft:
aGG = g(g-1) / (n(n-1)) * n

was meint ihr dazu ?

mfg
ern
 

ernst

Top Contributor
Hallo allerseits,
Habe nochmals die Fälle zusammengestellt.
Hier werden für verschieden Fälle die durchschnittliche Anzahl von Abgängen bzw. Zugängen bei den Kranken und Gesunden berechnet bzgl. der Anzahl von KK und KG-Paaren (Kontakten).
Was meint ihr dazu ?


mfg
ern


Fall1: Beide Personen sind gesund (GG)
Es passiert nichts.

Fall2: Beide Personen sind krank (KK)
Für jede der beiden Personen gilt:
1/6 aller Kranken stirbt.
1/6 wird wieder gesund.
2/3 bleiben krank.
Tabelle mit den Folgezuständen eines KK-Kontakts:
FZK1 FZK2 WK Abgänge/Zugänge pro KK-Paar
T T 1/6 * 1/6 = 1/36 dk=-1 dg=0; dk=-1 dg=0
gesamt: dk=-2 dg=0
T K 1/6 * 2/3 = 1/9 dk=-1 dg=0; dk=0 dg=0
gesamt: dk=-1 dg=0
T G 1/6 * 1/6 = 1/36 dk=-1 dg=0; dk=-1 dg=+1
gesamt: dk=-2 dg=+1
K T 2/3 * 1/6 = 1/9 dk=0 dg=0; dk=-1 dg=0
gesamt: dk=-1 dg=0
K K 2/3 * 2/3 = 4/9 dk=0 dg=0; dk=0 dg=0
gesamt: dk=0 dg=0
K G 2/3 * 1/6 = 1/9 dk=0 dg=0; dk=-1 dg=+1
gesamt: dk=-1 dg=1
G T 1/6 * 1/6 = 1/36 dk=-1 dg=+1; dk=-1 dg=0
gesamt: dk=-2 dg=+1
G K 1/6 * 2/3 = 1/9 dk=-1 dg=+1; dk=0 dg=0
gesamt: dk=-1 dg=+1
G G 1/6 * 1/6 = 1/36 dk=-1 dg=+1; dk=-1 dg=+1
gesamt: dk=-2 dg=2
Gesamtbilanz: (aKK bezeichnet die Anzahl der KK-Paare in der Population)
deltK_KK =
1/36*aKK*(-2) + 1/9*aKK*(-1) + 1/36*akk*(-2) + 1/9*aKK*(-1) +
4/9*aKK*(0) + 1/9*aKK*(-1) + 1/36*aKK*(-2) + 1/9*aKK*(-1) +
1/36*aKK*(-2) =
aKK*(-2/36 - 1/9 -2/36 -1/9 -1/9 -2/36 -1/9 -2/36) =
aKK*(-12/18) = -2/3*aKK

deltG_KK =
1/36*aKK*(0) + 1/9*aKK*(0) + 1/36*aKK*(1) + 1/9*aKK*(0) +
4/9*aKK*(0) + 1/9*aKK*(1) + 1/36*aKK*(1) + 1/9*aKK*(1) +
1/36*aKK*(2) =
aKK*(1/36+ 1/9 + 1/36 + 1/9 + 2/36) =
aKK*(12/36) = 2/3*aKK
Interpretation für Fall2: Kranke werden weniger und Gesunde mehr.

Fall3: Eine Person ist krank und die andere ist gesund (KG)
Für die gesunde Person gilt:
1/2 der gesunden Personen wird krank.
Für die kranke Person gilt:
1/6 aller Kranken stirbt.
1/6 aller Kranken wird wieder gesund.
2/3 bleiben krank.

Tabelle mit den Folgezuständen eines KG-Kontakts:
FZK1 FZK2 WK Abgänge/Zugänge pro KGPaar
T K 1/6 * 1/2 = 1/12 dk=-1 dg=0; dk=+1 dg=-1
gesamt: dk=0 dg=-1
T G 1/6 * 1/2 = 1/12 dk=-1 dg=0; dk=0 dg=0
gesamt: dk=-1 dg=0
K K 2/3 * 1/2 = 1/3 dk=0 dg=0; dk=+1 dg=-1
gesamt: dk=1 dg=-1
K G 2/3 * 1/2 = 1/3 dk=0 dg=0; dk=0 dg=0
gesamt: dk=0 dg=0
G K 1/6 * 1/2 = 1/12 dk=-1 dg=+1; dk=+1 dg=-1
gesamt: dk=0 dg=0
G G 1/6 * 1/2 = 1/12 dk=-1 dg=+1; dk=0 dg=0
gesamt: dk=-1 dg=1
Gesamtbilanz: (aKG bezeichnet die Anzahl der KG-Paare in der Population)
deltK_KG =
1/12*aKG*(0) + 1/12*aKG*(-1) + 1/3*aKG*(1) + 1/3* aKG*(0) +
1/12*aKG*(0) + 1/12*aKG*(-1) =
aKG*(-1/12 + 1/3 -1/12) =
aKG*(-2/12) = 1/6*aKG

deltG_KG =
1/12*aKG*(-1) + 1/12*aKG*(0) + 1/3*aKG*(-1) + 1/3* aKG*(0) +
1/12*aKG*(0) + 1/12*aKG*(1) =
aKG*(-1/12 - 1/3 + 1/12) =
aKG*(-4/12) = -1/3*aKG
Interpretation für Fall3: Kranke werden mehr und Gesunde weniger.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Fehler bei integer Division Java Basics - Anfänger-Themen 28
Eninaj Division Java Basics - Anfänger-Themen 12
Y Datentypen Double Division ungenau Java Basics - Anfänger-Themen 45
M Rationale Zahl erkennen - Kurze Frage zum Restwert nach Division Java Basics - Anfänger-Themen 3
J Division ohne Arithmetische Funktion Java Basics - Anfänger-Themen 2
M rekursive division/0 mit exception Java Basics - Anfänger-Themen 18
Arif Java Division Java Basics - Anfänger-Themen 4
T Division durch 0 abfangen mit Schleife Java Basics - Anfänger-Themen 4
C Erste Schritte Problem mit der Division von Koeffizienten... oder einfach nur irgendwlechen zahlen Java Basics - Anfänger-Themen 10
Q Operatoren inkrement der Division ? Java Basics - Anfänger-Themen 16
A Ausgabe einer Division Java Basics - Anfänger-Themen 11
A Brauche Hilfe bei Division von Feldzahl durch Ganzzahl Java Basics - Anfänger-Themen 3
S double division Java Basics - Anfänger-Themen 4
Corben if Abfrage mit Division durch Null Java Basics - Anfänger-Themen 4
T Datentypen byte -Division..mal gehts mit cast mal ohne Java Basics - Anfänger-Themen 5
H Division Java Basics - Anfänger-Themen 4
A Problem bei der Division mit Java Java Basics - Anfänger-Themen 4
J division mit rest Java Basics - Anfänger-Themen 8
U if-Anweisung trotz Division/0 Java Basics - Anfänger-Themen 6
S Division von long! Java Basics - Anfänger-Themen 4
U Double-Variable führt Division nicht korrekt aus Java Basics - Anfänger-Themen 4
RaoulDuke Division von ints Java Basics - Anfänger-Themen 2
R mathe trainer, division und andere fragen Java Basics - Anfänger-Themen 11
B Division ergibt null Java Basics - Anfänger-Themen 7
G Modulo Division funzt nicht Java Basics - Anfänger-Themen 3
S Division durch null abfangen :freak: Java Basics - Anfänger-Themen 14
C Wie erhalte ich nur ganze Zahlen als Ergebnis einer Division Java Basics - Anfänger-Themen 4
P Division Java Basics - Anfänger-Themen 6
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
sserio Frage zu BigInteger Java Basics - Anfänger-Themen 1
K Rekursive Methode für Fakultät mit BigInteger Java Basics - Anfänger-Themen 10
D Wie vergleiche ich zwei BigInteger Werte? Java Basics - Anfänger-Themen 1
TheSorm erstellen von BigInteger Java Basics - Anfänger-Themen 24
A Long in BigInteger Java Basics - Anfänger-Themen 3
R BigInteger zusammensetzen Java Basics - Anfänger-Themen 8
G Methoden BigInteger Zufallszahlen erzeugen Java Basics - Anfänger-Themen 5
G Datentypen BigInteger */: Int Java Basics - Anfänger-Themen 5
B BigInteger , rechen problem Java Basics - Anfänger-Themen 8
M BigInteger mit Decimalzahlen? Java Basics - Anfänger-Themen 5
R Bestimmte Stellen eines BigInteger Java Basics - Anfänger-Themen 7
T String spliten und in BigInteger umwandeln Java Basics - Anfänger-Themen 3
L Compiler-Fehler Fehler bei BigInteger Java Basics - Anfänger-Themen 3
A wurzel von bigInteger Java Basics - Anfänger-Themen 4
A Problem mit BigInteger und Schleife Java Basics - Anfänger-Themen 13
A Schleife mit BigInteger Java Basics - Anfänger-Themen 18
A umwandlung biginteger in int[] Java Basics - Anfänger-Themen 9
P Methode BigInteger-Array übergeben als Referenz Java Basics - Anfänger-Themen 6
P Bits bei BigInteger abprüfen Java Basics - Anfänger-Themen 2
D BigInteger potenzieren und anschließend Modulo Java Basics - Anfänger-Themen 7
A BigInteger? Java Basics - Anfänger-Themen 4
K String(ASCII) to BigInteger Java Basics - Anfänger-Themen 2
Z BigInteger Methoden und deren Übergabe Java Basics - Anfänger-Themen 3
G Quersumme berechnen (BigInteger) Java Basics - Anfänger-Themen 3
G array (BigInteger) durchsuchen Java Basics - Anfänger-Themen 2
G BigInteger Java Basics - Anfänger-Themen 6
I BigInteger + Array Java Basics - Anfänger-Themen 4
B BigInteger: Wert per Methode zuweisen Java Basics - Anfänger-Themen 3
G BigInteger zu int Java Basics - Anfänger-Themen 2
Linad Die Methode pow in der BigInteger Klasse Java Basics - Anfänger-Themen 4
N String zu BigInteger Java Basics - Anfänger-Themen 14
G BigInteger und Modulo Java Basics - Anfänger-Themen 3
M brauche Hilfe zu BigInteger Java Basics - Anfänger-Themen 2
Ü Methode soll Quadrat aus der Summer zurückgeben Java Basics - Anfänger-Themen 10
DrahtEck Schleife soll wieder da anfangen wo ich es möchte ! Java Basics - Anfänger-Themen 17
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
Com.Roter Wie soll ich lernen? Java Basics - Anfänger-Themen 17
T code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen) Java Basics - Anfänger-Themen 16
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
I aus 2 random zahlen soll nur die ungerade summe der beiden genommen werden. Java Basics - Anfänger-Themen 13
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
M Bei nach oben scrollen soll Seite aktualisiert werden (Userscript mit Javascript) Java Basics - Anfänger-Themen 10
R App soll selbstständig reagieren, anstatt via Models Java Basics - Anfänger-Themen 0
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
C Ein Algorithmus soll schneller werden Java Basics - Anfänger-Themen 24
K Ein Objekt Auto kennt den Inhalt seines links und rechtsstehenden Autos, wie soll man das ermöglichen Java Basics - Anfänger-Themen 2
HeiTim Brauche Hilfe soll ein nummeriertes Feld ausgeben lassen Java Basics - Anfänger-Themen 17
O Ich habe einen String und soll mit matches schauen, ob ein Buchstabe zu einer geraden ANzahl im String vorkommt, wie soll das gehen? Java Basics - Anfänger-Themen 7
O Ich ahbe einen char und diesen soll ich bei .matches prüfen, also ob der char in meiner Zeichenkette vorhanden ist, wie mache ich das? Java Basics - Anfänger-Themen 9
B Java Programm soll mit Python kommunizeren Java Basics - Anfänger-Themen 1
J Kreis soll die gleiche Fläche wie das Rechteck haben wie mache ich das? Java Basics - Anfänger-Themen 3
MichelNeedhelp Brauche zu diesem Labyrinth ein Skript? Der Hamster soll im Urzeigersinn das ganze Labyrinth abgehen und wieder an seinem Ursprungsplatz sein. Java Basics - Anfänger-Themen 40
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
F Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll. Java Basics - Anfänger-Themen 5
kazzam94 Methode soll Array von Boolean zurückgeben Java Basics - Anfänger-Themen 5
S Scanner soll Groß-/ Kleinschreibung ignorieren Java Basics - Anfänger-Themen 2
M Unterklasse soll nicht alle Methoden erben Java Basics - Anfänger-Themen 3
E Methode soll andere Methode der selben Klasse aufrufen Java Basics - Anfänger-Themen 28
S Vergleichen ob der Integer der benutzt eingeben werden soll überhaupt ein int ist Java Basics - Anfänger-Themen 1
C Ganzzahlige Werte in Boolean ausgeben und überprüfen ob Primzahl oder nicht, wenn es keine Primzahl ist soll es die Primfaktorzerlegung ausgeben Java Basics - Anfänger-Themen 4
E Kreis soll eine Raupe darstellen Java Basics - Anfänger-Themen 37
V Erste Schritte for-Schleife; Ausgabe soll alle 5 Sekunden erfolgen. Java Basics - Anfänger-Themen 4
H Koordinateneingabe im 2D Array soll true/false zurückgeben Java Basics - Anfänger-Themen 5
D Etwas unsicher wie es weitergehen soll Java Basics - Anfänger-Themen 2
N Bewegtes Objekt soll sich um eine Parallele bewegen Java Basics - Anfänger-Themen 0
B Button soll sowohl auf Klicken als auch auf die Enter-Taste reagieren Java Basics - Anfänger-Themen 9
B Derzeit JSF - Projekt, später soll MobileApp folgen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben