{"action":"created","issue":{"url":"https://api.github.com/repos/TP1-HHU/hw7/issues/6","labels_url":"https://api.github.com/repos/TP1-HHU/hw7/issues/6/labels{/name}","comments_url":"https://api.github.com/repos/TP1-HHU/hw7/issues/6/comments","events_url":"https://api.github.com/repos/TP1-HHU/hw7/issues/6/events","html_url":"https://github.com/TP1-HHU/hw7/pull/6","id":121886850,"number":6,"title":"This is fine O.O","user":{"login":"Gandhi-uses-nukes","id":15213258,"avatar_url":"https://avatars.githubusercontent.com/u/15213258?v=3","gravatar_id":"","url":"https://api.github.com/users/Gandhi-uses-nukes","html_url":"https://github.com/Gandhi-uses-nukes","followers_url":"https://api.github.com/users/Gandhi-uses-nukes/followers","following_url":"https://api.github.com/users/Gandhi-uses-nukes/following{/other_user}","gists_url":"https://api.github.com/users/Gandhi-uses-nukes/gists{/gist_id}","starred_url":"https://api.github.com/users/Gandhi-uses-nukes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Gandhi-uses-nukes/subscriptions","organizations_url":"https://api.github.com/users/Gandhi-uses-nukes/orgs","repos_url":"https://api.github.com/users/Gandhi-uses-nukes/repos","events_url":"https://api.github.com/users/Gandhi-uses-nukes/events{/privacy}","received_events_url":"https://api.github.com/users/Gandhi-uses-nukes/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2015-12-12T23:17:50Z","updated_at":"2016-01-07T14:39:31Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/TP1-HHU/hw7/pulls/6","html_url":"https://github.com/TP1-HHU/hw7/pull/6","diff_url":"https://github.com/TP1-HHU/hw7/pull/6.diff","patch_url":"https://github.com/TP1-HHU/hw7/pull/6.patch"},"body":"![image](http://i.imgur.com/cTtZzxN.jpg)\r\n\r\nSo, nabend zusammen, gibt einiges zu berichten:\r\nAber zuerst, die Animationen ;)\r\n![image](http://i.imgur.com/Kf5cP10.gif)\r\n![image](http://i.imgur.com/Vhu9Ia2.gif)\r\n\r\nNachdem, ich anfangs vier Arrays mit jeweils 2 Einträgen definiert hatte, entschied ich mich nacher 2 Arrays mit jeweil vier Einträgen zu definieren. Jedes Array speicherte dann die Werte (x, y, x', y') für die jeweilige RK-Methode. Jedoch funktionierte mein Programm immer noch nicht, ich musste es also wohl oder übel debuggen. Da die Fragestellung leider ein paar Kontrollwerte vermissen ließ (:wink:), musste ich mir die von anderen Leuten wohl oder übel besorgen.\r\n\r\nDa @NOP-slide zuerst die halbe Lineare Algebra definierte, fiel wohl sein Programmcode raus. Der Quellcode von @Arzneimittel entsprach schon eher meiner Struktur, auch wenn ich persönlich die Initialisierung der A-Matrix und der k-Vektoren eher unübersichtlich fand. (Außerdem waren da ein paar unnötige Schleifen drin, aber ich bin ja nicht zum meckern hier :stuck_out_tongue:)\r\n\r\nZum debuggen habe ich Code::Blocks verwendet und den Quellcode mit einigen cout's gespickt. Hierbei ist übrigens zu beachten, dass es nicht genügt, in C::B eine leere Datei reinzukopieren. Dann verweigert das Programm das debuggen (ohne natürlich einen Hinweis zu geben warum es das nicht debuggen kann). Man muss erst ein leeres Projekt anlegen, und dann erst den Quellcode reinkopieren. Des Weiteren ist es auch hilfreich, wenn man die \"Watches\" aktiviert, womit man zumindest einfache int/double Variablen nachverfolgen kann. (Bei arrays zeigt er leider nur den Pointer an, jedoch hatte ich keine Lust jedes mal einen Memory Dump zu machen :frowning:)\r\n\r\nDa mein Programm noch nicht lief, habe ich mir die Zwischenergebnisse über cout angeschaut und mit meinen Zwischenergebnissen verglichen. Hier fiel mir auf, dass bis zum k3 Vektor alles bis zur letzten Nachkommastelle übereinstimmte. Bei dem vierten k Vektor gab es jedoch eine sehr kleine Abweichung. Das könnte man erst vernachlässigen, jedoch ist zu beachten das der aktuelle k-Vektor von allen vorherigen k-Vektoren abhängt. Auch macht man diese Zwischenschritte bei jedem vollen Schritt. Und es kommen, je nach Toleranz, mehrere Tausend volle Schritte zusammen!\r\n\r\n![image](http://i.imgur.com/NcTCDI4.png)\r\n\r\nDaher ging es daran, zu erkunden warum ich denn dort einen leicht anderen Wert rausbekomme. Die Funktionen, die den k-Vektor berechnen, konnten eigentlich nicht betroffen sein, da die ersten Zwischenwerte perfekt berechnet wurden. Es musste also an den Faktor liegen, der zu den Y4[i] Wert hinzu addiert wird. Der Faktor hängt von dt ab (ließ ich die gesamte zeit über in beiden Programmen konstant, um die Ergebnisse besser vergleichen zu können), fiel also raus. Des Weiteren von den vorherigen k-Vektoren (Waren ja alle korrekt) und der A-matrix.\r\n\r\nHier lag der Hase im Pfeffer\r\n![iamge](http://i.imgur.com/CaDgRaA.jpg)\r\nDen Wert  -56/15\r\nhatte ich 56/15 statt -56.0/15 geschrieben. Dadurch wurde der Bruch nicht korrekt durchgeführt.\r\n\r\nNachdem ich das korrigiert hatte, lief mein Programm jedoch immer noch nicht :frowning:\r\n\r\nDen k-Vektor hatte ich als static multidimensional array definiert (Da die Maße ja bekannt sind kann man das ja machen), jedoch als double k[4][7].\r\n\r\nNacher habe ich aber in einem loop per\r\n```C\r\nk[i][0] = ...\r\nk[i][1] = ...\r\nk[i][2] = ...\r\nk[i][3] = ...\r\n```\r\ndarauf zugegriffen. Die Dimensionen waren vertauscht, aber C++ fühlte sich natürlich nicht in der Lage, mal einen Speicherzugriffsfehler rauszuhauen o.ä.\r\n\r\nNachdem das auch repariert wurde, habe ich mich daran gesetzt, den recht langen Code (siehe arenstorf2.cxx) kompakter und eleganter hinzuschreiben. Hierfür wurden einige Zeilen entfern dank verschiedener for-Schleifen. Als grundsätzliches Merkmal habe ich die Variable l=0,...,3 genommen, um durch die 4 Werte der jeweiligen Arrays zu schleifen. \r\n\r\nHervorheben möchte ich die gute Implementierung der Matrix A (Github zerschießt ein wenig die Formatierung, wenn man das alte Dokument mit dem neuen Dokument daneben hat). Wenn man oben rechts auf \"View\" geht, gibt es keine Zeilenumbrüche.\r\n\r\nDiese Optimierungen habe ich letztendlich in die Datei \"arenstorf.cxx\" geschrieben. Nach meinen anfänglichen Testen mit festem dt von 1e-4, das immerhin knapp 5 MB große Textdateien produzierte, konnte ich durch das dynamische dt (siehe Animation oben), eine Textdatei mit 7,7 KB produzieren.\r\n\r\nIch bedanke mich für die Aufmerksamkeit, und verbleibe mit:\r\n![image](http://i.imgur.com/VzFbLkd.jpg)"},"comment":{"url":"https://api.github.com/repos/TP1-HHU/hw7/issues/comments/169681804","html_url":"https://github.com/TP1-HHU/hw7/pull/6#issuecomment-169681804","issue_url":"https://api.github.com/repos/TP1-HHU/hw7/issues/6","id":169681804,"user":{"login":"freckhard","id":15197923,"avatar_url":"https://avatars.githubusercontent.com/u/15197923?v=3","gravatar_id":"","url":"https://api.github.com/users/freckhard","html_url":"https://github.com/freckhard","followers_url":"https://api.github.com/users/freckhard/followers","following_url":"https://api.github.com/users/freckhard/following{/other_user}","gists_url":"https://api.github.com/users/freckhard/gists{/gist_id}","starred_url":"https://api.github.com/users/freckhard/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/freckhard/subscriptions","organizations_url":"https://api.github.com/users/freckhard/orgs","repos_url":"https://api.github.com/users/freckhard/repos","events_url":"https://api.github.com/users/freckhard/events{/privacy}","received_events_url":"https://api.github.com/users/freckhard/received_events","type":"User","site_admin":false},"created_at":"2016-01-07T14:39:30Z","updated_at":"2016-01-07T14:39:30Z","body":"tl;dr :joy: \r\nNein, Spaß beiseite - aber wo ist die potatoe? :joy: :grin: \r\n\r\nAlso erstmal vorweg: beides kann man so machen und ist richtig. Du hast allerdings viiiiel zu kompliziert gedacht, mehrdimensionale Arrays und eine Butcher-Matrix sowie mehrere k Funktionen - das kann man wie dir wahrscheinlich bewusst ist ziemlich stark runterkochen. Zum dt würde ich vielleicht noch vorschlagen, es nur dann anzupassen wenn der aktuelle Fehler deine Toleranz überschreitet, und nicht in jedem Schritt - aber so geht es natürlich auch.\r\n\r\nWie dem auch sei, die Musterlösung ist online, da erkennst du deine Gedankengänge hoffentlich wieder :wink: \r\n\r\nP.S. wie hast du die schönen gif's erzeugt? :smiley: *neidisch*"}}