Bewegung einer Punktfolge programmieren (dynamische Systeme)

Martin Rost shared this question 5 months ago
Answered

Liebe Leute,

ich möchte ein dynamisches System progrmmieren (geogebra 5.0 habe ich)

Folgendes funktioniert:

Ich habe einen Punkt A und eine Zeitvariable t in einem Schieberegler.

In den Eigenschaften von t kann ich im "Skripting" unter "bei Update" eine Zeile wie z.B.

A = A + dt * v

schreiben, wobei ich das v vorher in Abhängigkeit von A definiert habe. So habe ich schon nichtharmonische Oszillatoren oder andere Simulationen programmiert. Alles gut soweit.

Ein Problem bekomme ich, wenn ich eine Folge von Punkten updaten will. Dann motzt geogebra, das sei eine Zirkeldefinition.

Ich verstehe nicht, warum es die Zirkeldefinition für Einzelpunkte akzeptiert, aber nicht für eine ganze Folge.

Gibt es da einen Trick, wie man ganze Folgen so updaten kann?

Mein Ziel: ich will einen Kontaktprozess simulieren, also eine Population von diffundierenden Punkten, in die ein mit einem Virus infizierter Punkt reinkommt, und wie sich die Krankheit dann ausbreitet.

Ich habe das letztes Jahr in netlogo schon ganz schön hinbekommen, aber vom Design her gefällt mir geogebra besser, und ich will es da machen.


Grüße, Martin

Comments (10)

photo
1

Hm,

Du solltest uns auch was an die Hand geben, wenn wir zu dem Problem was sagen sollen...

Wenn ich unter Update eine Zuweisung ablege, dann packe ich die gewöhnlich in Execute ein, damit lässt sich auch steuern ob Variable oder Wert eingebaut wird.

Is gewagt einfach so eine Zuweisung als Script zu hinterlegen?


BTW: Kennst Du Cindy-Script?

photo
1

1) Please post your file


2) don't use "=" in scripts, use SetValue

SetValue(A, A + dt * v)

photo
1

Danke für die Hinweise.

Ich habe hier eine einfache Version, in der ein Punkt diffundiert. Die Zeit läuft in Schritten mit, und bei jedem Update springt der Punkt um einen zufälligen Schritt.

Das würde ich gerne mit einer ganzen Folge von Punkten machen. In den nächsten Tagen habe ich etwas mehr Zeit und kann einiges ausprobieren. Ich muss sagen, dass mich geogebra immer wieder überrascht, weil ich einfach nicht die Objektstruktur dahinter kenne und drum nicht verstehe. Was kann man mit welcher Art von Objekten machen?

Hier ist das Beispiel: https://www.geogebra.org/m/druvcxwt

Vielen Dank nochmal an eure Hinweise. Und vielleicht wisst ihr, wie sich das noch viel einfacher machen lässt.

Grüße, Martin

photo
1

wenn du eine sequence/folge verwendest sind es keine individuell zu betüttelnde punkte mehr sondern eine einheitswolke, ist das ok? soll jeder punkt individuell springen oder alle den gleichen versatz springen? gleichzeitig alle springen oder einzelne punkte springen erkennbar? wie viele punkte?

siehe auch skript execute, repeat, setvalue(list,index...)

photo
1

Vielleicht so? Erzeuge eine Liste mit 50 zufälligen Vektoren (r=Vektorlänge)

V=Folge[Vektor[(r; 2π random())], n, 1, 50]

Den Schieberegler definierst du ganzzahlig von 1 bis 50 und in sein Skriptinteil setzt du SetzeWert[A, A+V(t)]

Oder ohne Vektorliste.

SetzeWert[A, A+Vektor[(r; 2π random())]]

photo
1

Okay, analog zu den 50 Zufallsvektoren in der Liste V erstellst du einen Schieberegler t für ganze Zahlen von 0 bis 49. Und

P=Folge[(n, 1) + V(1 + Mod[t + n, 50]), n, 1, 10]

ergeben 10 Zitterpunkte. Skripting ist also unnötig.

photo
1

Danke nochmal an euch.

da habe ich für heute wieder was zum Ausprobieren.

@hawe Die Punkte sollen unabhängig zittern und diffundieren. Die Punkte sollen sich zufällig begegnen und so kann sich eine Krankheit in der Punktewolke ausbreiten. Sowas heißt Kontaktprozess oder SIR-Modell (susceptible, infected, recovered/removed)

Letztes Jahr, in der ersten Corona-Phase habe ich das mit netlogo programmiert. Es gibt ein sehr schönes Video von 3blue1brown dazu. https://www.youtube.com/wat...

photo
1

Ich hab einen Infizierten in die Cloud gesetzt und die Kontakte in statische Listen (per Skript) geschrieben. Das Listenhandling ist nicht stabil bei vielen Umbauten - und es bremst auch weil viele Listenelemente durchgerechnet werden müssen. Über den Slider werden bei jedem Update die Listen mit Werten gefüllt - das scheint stabil und schnell zu laufen?

Die Wolke wandert allerdings nach unten links aus.... sollte nicht sein?

photo
photo
1

Um das einigermaßen flott am Laufen zu halten blieb ich beim Skripten. Und vorallem möchte ich nicht jeden Punkt einzeln behandeln sondern die gesamte Wolke in einen Schritt updaten...


Die Fixplatzmarkerpoints A..T hab ich 3 mal nach X koopiert = 60 Punkte und auf X die ZufallsZitter-Liste Rnd addiert..


nach ein paar durchgängen Fixpunkt rot und die weggezitterten Punkte Liste X grün

/8+vXr+PokaMYMHyA9HxiAoFGE7r7dsfWLVthMBjqvFea85rLFZGRkUhMTJQ9D3cjOjoaCQkJsufhbsTGxiIuLk72PNyN+Ph4xMTE4N8J6GR4xlQjMwAAAABJRU5ErkJggg==

ggf. müsste es eine S, I, R Liste geben und die Jungs müssten dann umsortiert werden - recht aufwändig, dann kann aber nicht so schnell gezittert werden?

© 2021 International GeoGebra Institute