Ich berechne gerade eine durchschnittliche Transportentfernung aus einem Umkreis von 40000 ha zu einer Ethanolfabrik. Also hat mein kreis den Radius 35,5 km, was ist jetzt der durchschnittliche Abstand zu jedem Punkt im Kreis. Weil ich habe ja viel mehr Punkte die eeiter weg sind als näher dran weil die Fläche vom kreis ja nich linear mit dem Radius wächst sondern exponentiell.
Spontaner Ansatz:
r^2*pi ist die Fläche
(r+x)^2 * pi = 2*r^2 * pi
(r+x) = 2^1/2 * r
x= (2^1/2 - 1) * r
So würde man rausbekommen, bei welchem Radius nur noch halb soviele Punkte da wären.
Mehr fällt mir jetzt so spontan auch nicht ein, außer:
Summe über den Radius: radius*Umfang(radius)/Summe aller Umfänge
r*r*2*pi / Summe(Umfang)
sollte man sogar rausziehen können, also:
1/ Summe 2*r*pi * Summe(r*r*pi*2)
Habs spontan mal mit r= 1...10 ausprobiert, kam 7 raus(klingt realistisch)
Wenn man den Ansatz weiter vereinfacht, dann steht ja irgendwann da:
Summe (r^2) / Summe(r)
Vllt hilft dir das ja schon(imo sieht das Ergebnis relativ vernünftig aus)
Es wird in irgendeiner Form auf Integralrechnung hinauslaufen. Du kannst z.B. ne gleichverteilte Zufallsvariable auf nem Kreis mit Radius R nehmen und den Erwartungswert des Betrages berechnen. Ergibt dann als Durchschnittsentfernung 2/3*R.
wenn ich nicht ganz auf der leitung steh:
du hast einen kreis mit radius r
einen zweiten kreis mit radius c*r
Fläche kreisring aussen = fläche kreis innen
r^2*pi - (c*r)^2 *pi = (c*r)^2 * pi
r^2=2*(c*r)^2
c^2=1/2
c=1/sqrt(2)
also ist in deinem fall der radius vom inneren kreis 35.5/sqrt(2)
-> 25.10229
schnellfickerlösung:
double sum = 0.0;
int num = 1000000;
for (int i = 0; i < num; i++){
float x = random(-1,1);
float y = random(-1,1);
sum += sqrt(x*x +y*y);
}
println(sum/num);
kommt so ca. 0.765*r raus :-)
e: also 35,5 * 0.765 = 27.16 (rund)
Original von Coolpawn
schnellfickerlösung:double sum = 0.0;
int num = 1000000;
for (int i = 0; i < num; i++){
float x = random(-1,1);
float y = random(-1,1);
sum += sqrt(x*x +y*y);
}
println(sum/num);kommt so ca. 0.765*r raus :-)
e: also 35,5 * 0.765 = 27.16 (rund)
Wie kann ich das jetzt in Worte fassen als Methode?
ein loesungweg waere vielleicht ueber ein wegintegral.
angenommen der mittelpunkt liegt im koordinatenursprung.
dann laesst du r vom koordinatenursprung bis zum rand deines kreises laufen.
fuer jede position von r hast du so "viele punkte wie ein kreis mit dem umfang r"
somit musst du wohl das integral
Int_{0}^{35,5km} x * UmfangKreismitRadius(x) dx / 35,5km rechnen
Original von LLuq
Original von Coolpawn
schnellfickerlösung:double sum = 0.0;
int num = 1000000;
for (int i = 0; i < num; i++){
float x = random(-1,1);
float y = random(-1,1);
sum += sqrt(x*x +y*y);
}
println(sum/num);kommt so ca. 0.765*r raus :-)
e: also 35,5 * 0.765 = 27.16 (rund)
Wie kann ich das jetzt in Worte fassen als Methode?
wenn ich es richtig verstehe will er einfach eine million punkte in den kreis setzen und durch eine statistische berechnung dein problem loesen ... allerdings verteilt er die punkte im einheitsquadrat ...
zusaetzlich sollte random gleichverteilte werte liefern. das bedeutet er verteilt zweimal was zufaellig auf einer gerade, was nicht dazu passt, dass ein die anzahl der punkte ansteigt je weiter man vom mittelpunkt weg ist.
Wie ist folgende Idee:
Punkte mit der Entfernung r sind gleich dem Kreisumfang bei Radius r:
r*2*pi*r
Das Integrieren um die Gesamtentfernung aller Radien bis zum Gesamtradius zu bekommen:
2/3*pi*r^3|von 0 bis 35,5
Und um den Durchschnitt zu erhalten durch die gesamten Punkte=Kreiflache teilen:
(2/3*pi*r^3-0)/(pi*r^2)=2/3*r
Aber ehrlich gesagt keine Ahnung ob das Sinn macht^^
/edit: sieht wohl doch so aus als ob die Lösung stimmt
Original von soltana
Original von LLuq
Original von Coolpawn
schnellfickerlösung:double sum = 0.0;
int num = 1000000;
for (int i = 0; i < num; i++){
float x = random(-1,1);
float y = random(-1,1);
sum += sqrt(x*x +y*y);
}
println(sum/num);kommt so ca. 0.765*r raus :-)
e: also 35,5 * 0.765 = 27.16 (rund)
Wie kann ich das jetzt in Worte fassen als Methode?
wenn ich es richtig verstehe will er einfach eine million punkte in den kreis setzen und durch eine statistische berechnung dein problem loesen ... allerdings verteilt er die punkte im einheitsquadrat ...
zusaetzlich sollte random gleichverteilte werte liefern. das bedeutet er verteilt zweimal was zufaellig auf einer gerade, was nicht dazu passt, dass ein die anzahl der punkte ansteigt je weiter man vom mittelpunkt weg ist.
oh ja !!!!
du hast vollkommen recht !!!
so muss die lösung also aussehen:
float sum = 0.0;
int num = 1000000;
float r;
for (int i = 0; i < num; i++){
do
r = sq(random(-1,1)) + sq(random(-1,1));
while (r > 1);
sum += sqrt(r);
}
println(sum/num);
kommt raus: r_mittel = 0.666 (also 2/3), d.h. hier: r = 23.67 km