Katze-Maus-DGL

Neue Frage »

Margarita90 Auf diesen Beitrag antworten »
Katze-Maus-DGL
Hallo,
folgende Aufgabe:
Katze jagt in (x,y)-Ebene einer Maus hinterher. Maus startet zum Zeitpunkt t=0 in (0,0) und will auf direktem Wege in ihr Loch (0,1). Die Katze startet in (1,0).
Die Katze läuft dabei mit Geschwindigkeit direkt auf die Maus zu. Betrag ihrer Geschwindigkeit ist zeitlich konstant, also . Maus hat Geschwindigkeit .

Zunächst sollen wir ein DGL-System aufstellen, das die Bahn der Katze beschreibt.
Allgemein soll das so aussehen:


Nachdem ich mich auch schon auf anderen Internetseiten belesen hab, komme ich auf:
Koordinaten M der Maus:
Position K der Katze: und entsprechend ist .
Geht das so?

Danach soll ich berechnen,wie groß höchstens sein darf, damit die Katze die Maus NICHT fängt.
Dazu soll ich die nichtlineare Gleichung lösen, wobei ich g noch aufstellen muss. Wie funktioniert das?
Irgendwie muss im Falle des Fangens ja gelten M=K, also . Um die Koordinaten der Katze zu bekommen, muss ich also irgendwie die vorher aufgestellte DGL lösen? Oder wie geht man da ran? Ich soll dabei matlab benutzen.

Danke und liebe Grüße.
Riemannson Auf diesen Beitrag antworten »
RE: Katze-Maus-DGL
Zitat:
Original von Margarita90

.


da gehe ich mit! jedoch kann man, denke ich, gleich sagen t=1 Denn an dieser Stelle hat die Katze die letzte Möglichkeit die Maus zu fagen.

Wink
Huggy Auf diesen Beitrag antworten »
RE: Katze-Maus-DGL
Die direkte Lösung der gekoppelten Differentialgleichungen für und scheint schwierig zu sein. Vielleicht sollte man eine Differentialgleichung für die Bahnkurve y(x) anstreben. Wenn (x, y) die Position der Katze zur Zeit t ist, kann man y'(x) mit (x, y) und der Position der Maus zur Zeit t verknüpfen. Außerdem muss die Bogenlänge von y(x) zwischen (1, 0) und (x, y) gleich vt sein. Aus diesen beiden Gleichungen kann man dann die Zeit t eliminieren. Das Integral für die Bogenlänge bringt man anschließend durch Ableiten nach x zum Verschwinden.
Riemannson Auf diesen Beitrag antworten »

im Prinzip müsste man die DGL lösen, richtig. Das ist sicher nicht sehr einfach. Wenn ich den beitrag von margarita90 richtig lese, sollte sie matlab verwenden. Deshalb würde ich daraus schließen die DGL numerisch zu lösen. Beispielweise mit der funktion ode.
Heinzelmann3 Auf diesen Beitrag antworten »
RE: Katze-Maus-DGL
Gut, t=1 entspricht dem max. , bei dem die Maus nicht gefangen wird. Also haben wir:


Aber wo hilft das? Welche ist denn nun die gesuchte Funktion ? Vor allem: Diese soll skalar sein, aber hier haben wir es ja mit Vektoren zu tun?! Das ist ja ein DGL-System...
Oder reicht es, eine Koordinate der Katze, zum Besipiel zu betrachten, da sie sich ja eh in jedem Punkt direkt auf die Maus zubewegt, die Kurve an sich also schon gegeben ist?

Gruß
Heinzelmann3 Auf diesen Beitrag antworten »
RE: Katze-Maus-DGL
Hallo,
ich meinte die Fragen oben ernst und es wäre wirklich nett, wenn mir noch jemand antworten würde...
ich weiß wirklich nicht so richtig, wie ich diese DGL lösen soll, wenn das v_0 doch gesucht und somit unbekannt ist... bitte erbarmt euch!

vg, HM3
 
 
Huggy Auf diesen Beitrag antworten »
RE: Katze-Maus-DGL
Willst du die Aufgabe numerisch oder analytisch lösen?
Ehos Auf diesen Beitrag antworten »

Wir suchen die Funktion y(x), entlang derer die Katze läuft. Für die Bolgenlänge s dieser Kurve gilt bekanntlich . Darin setzen wir , denn die Katze läuft mit der konstanten Geschwindigkeit v. Das ergibt . Befindet sich die Katze im Punkt (x,y) so läuft sie momentan stets in Richtung der Tangengente, welche dort den negativen Anstieg hat, denn diese Tangente geht auch durch (0|t). Stellt man die letzte Gleichung nach der Zeit t um und setzt sie in die vorherige Formel ein, ergibt sich

. Ausdifferenzieren liefert . Quadrieren ergibt . Das ist eine inhomogene Dgl. 1.Ordnung für die Variable y'=z, die man mit Trennung der Varialblen und Variation der Konstanten lösen kann:

riwe Auf diesen Beitrag antworten »

zur "grenzgeschwindigkeit" des katers Augenzwinkern
Huggy Auf diesen Beitrag antworten »

Entweder verstehe ich diesen Text falsch oder da wird Unfug behauptet.

Wenn die Katze mit der Geschwindigkeit geradlinig vom Punkt (1, 0) zum Punkt (0, 1) liefe, würde sie diesen zur Zeit t =1 erreichen. Da die Katze aber tatsächlich nicht diesen geraden Weg nimmt, muss sie mit höherer Geschwindigkeit laufen.

Wenn die Katze mit der Geschwindigkeit 2 geradlinig vom Punkt (1, 0) zum Punkt (0, 0) und von dort geradlinig zum Punkt (0, 1) liefe, würde sie diesen auch zur Zeit t =1 erreichen. Tatsächlich nimmt die Katze aber einen kürzeren Weg. Ihre Geschwindigkeit muss also kleiner 2 sein.

Die Grenzgeschwindigkeit der Katze beträgt:

Riemannson Auf diesen Beitrag antworten »

@ Huggy Freude

so sehe ich das auch...!
Heinzelmann3 Auf diesen Beitrag antworten »

Die Aufgabe soll numerisch mit Matlab gelöst werden.

Danke für eure Mühe, aber ich komme immernoch nicht weiter unglücklich
Ich weiß einfach nicht, womit ich Matlab füttern soll! Margarita90 hat ja oben schon eine DGL aufgestellt - aber wie soll man die lösen?
Ich soll v_0 rausbekommen. Dafür will ich lösen:
, denn es müsste ja reichen, die x-Komponente der Katze zu betrahcten, da sie sich zu jeder Zeit direkt auf die Maus zubewegt und somit bei x_K=0 folgt y_K=1.
Damit ich das Gleichungssystem lösen kann, muss ich die DGL lösen.
Die lautet wie oben. Hier habe ich aber wieder kein v_0... ?! Irgendwie beweg ich mich nur im Kreis...
Und selbst wenn ich mal ein v_0 vorgebe, dann weiß ich nicht, was mir die Lösung sagt. Dann kann ich die x- bzw. y-Komponente über t plotten, oder auch x über y. Bei letzterem müsste doch dann die Bahn der Katze rauskommen? Startend in (1|0) auf dem Weg zu (0|1), oder? Wenn ich ersteres mache, müsste ich für ein bestimmtes t doch an der einen Kurve die x-Koordinate und an der anderen die y-Koordinate zu diesem Zeitpunkt ablesen können?! Aber wenn ich zB eure Grenzgeschwindigkeit für v_0 einsetze, komme ich nicht auf (0|1) bei t=1... traurig
Huggy Auf diesen Beitrag antworten »

Das ist doch nicht so schwer.

(1) Zunächst musst du ein Lösungsverfahren für das DGL-System programmieren. Die Geschwindigkeit v der Katze ist dabei ein Parameter, also eine Variable, der am Anfang des Programms ein Wert zugewiesen wird, z. B. per Eingabe.

Die beiden DGL kannst du nicht getrennt lösen. Sie sind ja gekoppelt. Du musst sie also gemeinsam lösen.

(2) Jetzt baust du eine Abfrage ein, die den Zeitpunkt liefert, zu dem die Maus gefangen wird und die Position auf der y-Achse, wo sie gefangen wird. Der Zeitpunkt ist gegeben durch



Nun wäre es ein gewaltiger Zufall, wenn das zu einem der diskreten Zeitpunkte in dem Programm exakt erfüllt wäre. Der Fang wird numerisch in dem Zeitintervall stattfinden mit



Und liegt dann zwischen und

hängt natürlich von dem Parameter v ab.

(3) Die Programmteile (1) und (2) kannst du z. B. in eine Funktion verpacken:



Nun schreibst du einen Programmteil, der die Gleichung



numerisch nach v auflöst. Zur Not tut es die Intervallhalbierung. Aus den vorigen Beiträgen weißt du ja, in welchem Bereich die Lösung liegt.
Heinzelmann3 Auf diesen Beitrag antworten »

Ja, mir wärs auch lieber, wenn ich es könnte... erstmal danke für die Anleitung.

Die DGL ist gelöst, mein Problem war vor allem ein Schreibfehler. jetzt habe ich also den Vektor t mit den dazugehörigen Koordinaten der Katze. Um mit zu finden, habe ich die Event-Funktion (value=) benutzt. Die Integration wird also bei gestoppt, also ist mein die letzte Komponente des Lösungsvektors t, der sich beim Lösen der DGL ergibt, oder?
Aber dann habe ich ja auch kein , ich höre ja bei auf..?
Und ich weiß auch immernoch nicht, wie ich mir jetzt diese von abhängige Funktion basteln kann... ich musste mir doch erst ein bestimmtes vorgeben. Wie soll y da jetzt wieder von abhängen???
Heinzelmann3 Auf diesen Beitrag antworten »

edit: also um es nochmal klar zu sagen: ich muss mir eine Funktion YFANG(v0) definieren, aber mein YFANG entspricht der letzten Komponente des t-Lösungsvektors meiner DGL... welche ja aber mit vorgegebenem (also festen) v0 berechnet wurde. Sorry, wenn ich mich doof anstelle... verwirrt
Huggy Auf diesen Beitrag antworten »

Bei der Umsetzung in ein Matlab-Programm kann ich dir nicht helfen, weil ich Matlab nur dem Namen nach kenne.

Um den kritischen Wert für v zu finden, sollst du ja einen Programmteil schreiben, der die Funktion YFANG(v) mit verschieden Werten für v aufruft, bis ein Wert für v gefunden ist, der

bzw.

mit ausreichender Genauigkeit erfüllt. Das ist eine ganz gewöhnliche Nullstellensuche. Möglicherweise ist so etwas in Matlab schon implementiert und du musst es nur aufrufen.
Heinzelmann3 Auf diesen Beitrag antworten »

Ja, so etwas gibt es auch. Aber dafür brauch ich ja diese Funktion YFANG(v), welche sich bei der Integration ergibt. Aber für die Integration hab ich ja wiederum ein festes v0 vorgegeben.
Naja gut, auf jeden Fall vielen Dank für deine Geduld!
HM3
Huggy Auf diesen Beitrag antworten »

Na, die Integration kannst du doch auch mit verschiedenen Werten von v aufrufen. Und die Integration sollte ein Teil der Funktion YFANG sein oder von dieser aufgerufen werden. Das kann man natürlich auch anders machen.
Riemannson Auf diesen Beitrag antworten »

also zu matlab:

zur integration verwendest du einen "matlab-integrierer" -> Stichwort ode. Nutze die hilfe! ode78 ist sicher bestens geeignet.

Dein eigentliches DGL-System schreibst du als eigene function (siehe beispiel in der hilfe)

Mit ode kannst du dann diese function lösen lassen (bei ode-aufruf musst du noch startwerte und das intevall eingeben)

wenn du jetzt in der function die geschwindigkeit fest wählst bspw. 1.6 und dann ode startest wird dir ode 2 vektoren liefern wenn du diese plottest sollte der weg der katze entstehen.

um die maximale geschwindigkeit zu berechnen musst du die geschwindigkeit in der function variabel übergeben (also hängt die function dann von 3 variablen ab)

Bei lösen mit ode musst du aber beachten, dass nur nach 2 variablen integriert wird und die 3. nur übergeben wird.

jetzt nimmst du fsolve und rufst in fsolve ode auf. fsolve hängt von der 3. variable ab. Damit fsolve funktioniert musst du bspw nur x(t) betrachten oder y(t)-1.....

dann sollte es klappen....
Heinzelmann3 Auf diesen Beitrag antworten »

so hatte ichs:

function dp=ful(t,y)
dp=zeros(2,1);
dp(1)=-v0/sqrt(y(1)^2+(t-y(2))^2)*y(1);
dp(2)=v0/sqrt(y(1)^2+(t-y(2))^2)*(t-y(2));
end

Lösen:
[t,y]=ode45(@ful, [ta te],y0,opts)

ich bekomme die Lösungsvektoren t, y(1) und y(2)
(habs mit ode45 gemacht)

jetzt soll ich v0 mit übergeben, also sieht mein funktionskopf so aus:
function dp=ful(t,y,v0)

jetzt in fsolve ode aufrufen...? wie? und wie du schon sagtest: wie mach ich dem klar, dass ich nur xK (bei mir y(1)) betrachten will?
Ehos Auf diesen Beitrag antworten »

Ich habe mal den Graphen der Funktion berechnet, entlang der die Katze läuft:




Die Katze startet bei x=1. Dort hat diese Funktion und deren 1.Ableitung die Werte y(1)=0 bzw. y'(1)=0, wie es sein muss. Wenn man wissen will, bei welcher Grenzgeschwindigkeit v die Katze genau am Mauseloch (0;1) eintrifft, muss man oben einsetzen x=0 und y=1. Dann entfallen die ersten beiden Summanden und man erhält folgende Gleichung für v



Das ergibt genau die Grenzgeschwindigkeit , die Huggy bereits angegeben hat.
Riemannson Auf diesen Beitrag antworten »

also zurück zu matlab:

function dp=ful(t,y,v0')
v0=v0';
...(wie in deiner funktion)
end

das ist das dgl system.
jetzt fehlt dir noch eine funktion die von v0' abhängt und nur ein parameter zurück liefert. so zb.

function fun=f(v0')

[t,y]=ode45(@(t,y)ful(t,y,v0'), [ta te]...);
f=y(end,1) % sollte nur x(1) zurückgeben und soll 0 sein

end

und jetzt rufst du fun mit fsolve auf (startwert zb. 1.618 s.o.)

dann sollte fsolve dir dein gewünschtes ergebnis liefern....
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »