Heun-Verfahren zu einer parabolischen Flugbahn

Hallo,

ich habe als Informatikaufgabe meines Physikstudiums folgendes Problem gestellt bekommen:

_Integrieren Sie unten stehendes Problem nach dem Heun Verfahren mit konstanten Zeitschritten delta_t.

Realisieren Sie ein Programm, welches numerisch die Bahn einer Kanonenkugel in einem 2-dimensionalen Problem (x,y) berechnet welche mit einer Anfangsgeschwindigkeit v0 unter einem Winkel a abgeschossen wird und welche einen Luftwiderstand welcher eine Konstante F(LW) = -k*v(t) (negativ da entgegen der Flugrichtung und k ist eine Konstante) erfährt._

Das Programm (Sourcecode hier: http://pastebin.com/JEi82T6r )
habe ich so weit, dass ich ein Array, in das gekoppelte x und y Werte geschrieben worden sind, auf der Komamndozeile ausgeben kann.

Folgende Probleme habe ich allerdings noch:

-wie implementiere ich den Luftwiderstand, der sich ja mit der Geschw. verändert?
-wie übergebe ich das Array einer „Heun-Funktion“, die mir das numerische Integral berechnet?

Als Physikstudent habe ich leider nur wenig Ahnung von Programmieren und ich habe die analytische Lösungsweise einfach zu sehr in mir drin, als dass hier etwas Vernünftiges herauskommen würde :frowning:

Kann mir hiuer jemand weiterhelfen?

MfG und schönen Abend
Kabelbrand

Schleife statt Array
Ich glaube, Dein Problem liegt darin, diese Heun-Methode noch nicht durchdrungen zu haben.

Das Ding selbst ist mir auch fremd, aber was Wikipedia mit „Einschrittverfahren“ meint, ist mir klar:

Hier braucht es kein Array, sondern um ein Näherungsverfahren, welches schrittweise eine Ausgangslösung verbessert, ohne dass man auf Informationen in vorherigen Schritten zurückgreifen muss.

Also brauchst Du quasi eine Schleife, die die Lösung mit der Rekursionsformel immer weiter verbessert, bis man abbricht.

Überlege Dir, was sinnvolle Abbruchbedingungen sind, dann ist die Codierung nur noch Fingerarbeit.

Ciao, Allesquatsch

Ich sehe deine Worte, aber verstehe genau 5% davon, leider. Vielleicht hätte ich erwähnen sollen, dass mein Code Hilfe von einem Freund hatte, der aber auch nicht so perfekt mit C umgehen kann.

Hi,

wenn mich nicht alles täuscht, lautet die Bewegungsgleichung

a=F(x,v)/m=-g-k/m*|v|*v,

wobei a die Beschleunigung, also die Ableitung der Geschwindigkeit ist, und -g als (nach unten zeigender) Vektor zu interpretieren ist. |v| ist die euklidische Norm des Vektors v, in dieser Schreibweise wäre der Widerstandsfaktor k*|v|.

Als System erster Ordnung, welches dann in ein Einschrittverfahren gefüttert werden kann, ergibt sich ein vierdimensionales Problem.

x’(t)=v
v’(t)=a

x,v,a jeweils zweidimensionional.

Gruß, Lutz

PS: Der Pastebin-Link ist tot.

PPS: Es würde helfen, wenn Du die Aufgabe wirklich im Wortlaut wiedergeben würdest. Ich glaube nicht, dass das Ende mit dem Luftwiderstand so formuliert wurde.

Ich sehe deine Worte, aber verstehe genau 5% davon, leider.
Vielleicht hätte ich erwähnen sollen, dass mein Code Hilfe von
einem Freund hatte, der aber auch nicht so perfekt mit C
umgehen kann.

Das Problem haben Du und wohl auch Dein Freund nicht mit C, sondern dass Du offenkundig nicht programmieren könnt. Dazu braucht es eine Weile pauken und immer wieder Praxis.

So wie man Autofahren, Klavierspielen oder Englisch auch nicht in zehn Stunden lernt. Zumindest nicht in der Reife, dass man nicht mehr über das Werkzeug nachdenkt, sondern über die Aufgabe.

Gleich mit solchen Aufgaben zu starten, bringt auch nicht viel, obwohl es eigentlich eine Aufgabe ist, die man nach einem Semester Programmieren schon umsetzen können sollte.

Oder habt Ihr bloß Iterationsverfahren nicht verstanden?

Ciao, Allesquatsch