Gradientenverfahren in Matlab

  • Hallo liebe Informatiker,


    mein Name ist Chris und ich studiere Wirtschaftsingenieurwesen-Maschinenbau. Ich und meine Kommilitonen haben ein Problem mit einem Praktikum was wir in der Hochschule absolvieren müssen. Dazu muss ich etwas weiter ausholen. Wir stehen alle kurz vor der Bachelor-Arbeit und hatten wie alle Jahrgänge bei uns enorme Probleme mit unserem Mathe Prof. Der Prof. ist ein Menschenfeind und hat jedes Jahr Durchfallquoten von 95% oder höher. Das liegt zum einen daran das er weder ein Skript hat, keine Übungen verteilt und immer nur auf seine Bücher verweist und zum anderen das er die Leute einfach in Vorlesungen nieder macht, sodass irgendwann auch keiner mehr in die Vorlesung geht. Der Hochschule ist das Problem bewusst und es wurde uns die Möglichkeit gegeben Mathe bei den Informatiker zu schreiben was dann bei uns anerkannt wird. Das hat auch gut funktioniert. Die Profs. waren super und wir haben Mathe 1 und Mathe 2 erfolgreich abschließen können. Allerdings müssen wir auch ein Praktikum machen um das Modul abzuschließen. Das Praktikum bei unserem Prof. ist nahezu unmöglich zu bestehen. Das Prüfungsamt hat uns dann gesagt, dass wir auch das Praktikum bei den Informatikern machen dürfen. Da nun alle Ingenieure aus sämtlichen Jahrgängen zu den Informatiker gerannt sind wurden die Praktika zu Mathe 1 und 2 nach erreichen einer Mindestanzahl für die Ingenieure zu gemacht. Wir können nun das Praktikum zu Mathe 3, was für die Studenten aus dem Masterstudiengang Informatik angesetzt ist, versuchen. Wir haben uns entschlossen dieses zu versuchen. Wir müssen dort den Bergsteigeralgorithmus und das Gradientenverfahren in MatLab programmieren und dürfen dieses Zuhause vorbereiten. Die Aufgabe hänge ich gleich noch unten an. Unser Problem ist, dass wir nur minimal mit Java programmiert haben damals im 2ten Semester und uns MatLab noch völlig fremd ist.


    Wir haben uns nun erst einmal mit der Mathematik beschäftigt und das auch im groben und ganzen verstanden glaube ich. Bei dem Bergsteigeralgortihmus und dem Gradientenverfahren geht es ja im Prinzip um Optimierungsprobleme bei der Untersuchen von Extremstellen. Man versucht dann durch Näherungsverfahren ziemlich exakte Werte zu bekommen auf der Suche nach Min. und Maxima von mehrdimensionalen Funktionen f:R^n-->R.
    Beim Gradientenverfahren nutzt man bei der Lösung des Optimierungsproblems einen Gradienten indem man einfach einen Näherungswert nimmt und in Richtung des Gradienten fortschreitet bis man keine Verbesserungen mehr erzielt. Beim Bergsteigeralgorithmus verwendet man ja das sogenannte DownHill-Simplex-Verfahren. Die einzelnen Schritte des Algoritmus kann ich falsch erwünscht auch gern posten. Also den mathematischen Teil haben wir glaub im groben und ganzen schon verstanden ABER nun kommt der Haken. Wir kriegen das einfach nicht programmiert und verzweifeln langsam da uns programmieren an sich schon sehr sehr schwer fällt und wir das nie wirklich gelernt haben. Ihr seid jetzt unsere letzte Hoffnung :D. Ich poste gleich auch noch ein paar Auszüge aus unserem Skript wo ich 2 mal Code-Ansätze rot umkreist habe. Ich glaube dabei handelt es sich schon um den richtigen Ansatz, falls nicht lassen wir uns da gern belehren.


    Wir wissen das Eigeninitative erwünscht ist und wollen das auch gerne selber schaffen. Aber wir wären schon Dankbar wenn man uns evtl. den vorgedruckten Code etwas erklären würde und ggf. tips gibt was man an welcher Stelle ergänzen müsste.


    Praktikumsaufgabe: http://www.directupload.net/file/d/4149/unsjo6b3_png.htm
    Auszüge aus dem Skript: http://www.directupload.net/file/d/4149/i24rxl8v_png.htm
    http://www.directupload.net/file/d/4149/crttm2nf_png.htm


    Wir sind für jede Hilfestellung dankbar und würden uns über Antwort freuen.


    MfG
    Chris

  • Matlab lässt sich recht flott lernen.
    Es führt aber wohl kein Weg dran vorbei, sich ein bisschen mit der Materie zu beschäftigen.


    Eine gute Website zum Lernen von Matlab Programmierung ist folgende, dort könnt ihr auch gleich online mit Matlab Skripten experimentieren und sehen was dabei rauskommt:
    http://www.tutorialspoint.com/matlab/index.htm



    Ihr macht euch am besten einen neuen Ordner für eure Skripte. Dann erstellt ihr eine für jede geforderte Funktion eine Datei mit dem Funktionsnamen und einem m als Dateityp, also z.B. für function [y] = meineFunktion(x) macht ihr die Datei meineFunktion.m.
    Dann in Matlab die Datei öffnen und den tatsächlichen Code dort reinschreiben. Funktionen beginnen mit function [rückgabewert1, rückgabewert2, ...] = funktionsName(übergabeparameter1, ...), also z.B. function [y] = meineFunktion(x).
    Letzlich weist ihr den Rückgabewerten irgendwas zu, in Eurem Fall also z.B. y=sin(x).
    Insgesamt habt ihr dann:


    function [y]=meineFunktion(x)
    y=sin(x);
    end


    Im Command Fenster von Matlab könnt ihr dann die Funktion aufrufen (davor in Matlab in den entsprechenden Ordner wechseln): x=[1 2 3]; y=meineFunktion(x); Damit übergebt ihr an die Funktion die x Werte und ihr bekommt die y Werte zurück.


    Das sollte reichen für erste Versuche. Und dann darauf aufbauen und immer mehr erweitern.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!