Computerprogramm < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) überfällig | Datum: | 16:42 Fr 17.04.2009 | Autor: | InoX |
Ich muss für Optimierung ein Programm schreiben (in Matlab), welches ein Polynom [mm] f:[0,1]^3\to\IR[/mm] einliest und in jeden Segment, d.h., im inneren den kanten und den 2d Randflächen des Würfels prüft ob es saturiert ist, d.h., dort ein Maximum besitzt.
Das Problem ist nun ich habe keine ahnung von Matlab.
Erstmal möchte ein Polynom einlesen. Ich weiß bereits, dass man da ein .m file erstellen kann und durch
function y=poly(x,y,z)
y=...
end
ein Polynom eingeben kann.
Weiter kann man dann mit jacobian(f,v) wobei v=[x y z] ist den Gradienten berechnen.
Dann hat man eine Matrix mit 3 nichlinearen Gleichungssystemen.
Wie löse ich diese ?
Gehe ich prinzipiell richtig vor?
Sollte ich etwas an der Struktur ändern z.B. auch das eigentliche Programm in ein .m file stecken?
Weiter muss ich ja dann diese lösungen irgendwie in ein dynamisches Array speichern, da ich ja nicht weiß, für wie viele werte in [mm] [0,1]^3 [/mm] grad f=0 eine Lösung hat
Wie geht das?
Oh Gott und dann brauch ich noch eine die für jede Lösung prüft, ob die Hesse Matrix positiv definit ist.
Also, ich arbeite bereits daran, aber ich sehe kein Land.
Wenn sich jemand meinem Problem erbarmen kann und mir bei einigen Fragen helfen kann wäre ich sehr dankbar.
LG,
Martin
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 19:07 Fr 17.04.2009 | Autor: | InoX |
Die Hessematrix habe ich jetzt manuell ausgerechnet.
Das mit den Nullstellen des gradienten löste ich mit dem Befehl solve.
Momentan weiß ich nicht genau, wie ich in einer funktion werte einsetze
bsp
syms x,y,z
[mm] f=x^2+y^2+z^2
[/mm]
g=diff(f,x)
ich will nun g(2,0,0) haben aber wie geht dass genau in matlab?
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 22:39 Fr 17.04.2009 | Autor: | Frasier |
Hallo Martin,
sieh' dir mal den subs Befehl an.
1: | syms x y z
| 2: | f=x^2+y^2+z^2
| 3: | g=diff(f,x)
| 4: | subs(g,2) |
lg
F.
|
|
|
|
|
Status: |
(Frage) überfällig | Datum: | 11:14 Sa 18.04.2009 | Autor: | InoX |
Sitze gerade vor dem Problem, dass ich überprüfen will, ob der gradient Nullstellen in (x,y,z) hat.
Dafür habe ich die Partiellen eines Polynoms p durch:
px=diff(p,x);
py=diff(p,y);
pz=diff(p,z);
berechnet.
Nun will ich das Gleichungssystem auf Nullstellen prüfen, dafür nehme ich
[n1 n2 n3]=solve(px,py,pz)
Das Funktioniert auch gut, sofern keiner der Ableitungen verschwindet oder konstant ist, was mache ich in diesen fällen ?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 16:48 Sa 18.04.2009 | Autor: | ecko |
hallo Martin, ich wollte das Problem zuerst mit c++ lösen, bis ich deinen Beitrag gelesen habe, nun lade ich mir auch matlab runder, kenn mich da auch noch nicht aus, aber zu deinem Problem, schreib doch eine kleine überprüfungs struktur für deine ableitungen, die überprüft ob deine funktion konstant oder 0 ist, ich würde mir einfach 2 beliebige werte angeben lassen und die dann vergleichen, wenn sie ungleich sind, dann ist die funktion auch nicht konstant oder 0! wenn sie gleich sind, würde ich noch 2 andere werde überprüfen lassen, kann ja auch zufaellig gleich sein. Dann würde ich deine Rechenschritte vo oben in eine if bedingung haun, mit bedingung, das p unkonstant sein muss :)
Ich werde dann auch mal ein paar codes von mir rein haun, wenn ich das programm mal habe, aber das dürfte so funktionieren oder?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 20:57 Sa 18.04.2009 | Autor: | ecko |
Ich glaube ich habe ein allgemeines Verständnissproblem mit der Ranngehensweise, muss ich da auf Maixmalstellen untersuchen und dann schaun ob sie auch im Intervall [0,1]³ bzw [0,1]² bei dein Seiten...liegen?
Oder muss ich da Matlab vorab sagen, das x1,..,x3 aus [0,1] sind?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:32 Sa 18.04.2009 | Autor: | InoX |
Nich schlecht mal jemanden zu begegnen, der auch in der Vorlesung sitzt.
Also ich habs bis jetzt so gemacht, dass ich jedes der 19 Segmente einzeln prüfe. Denn dann hat man den Vorteil, dass man nur die Existenz einer Maximalstelle nachweisen muss. Habe inzwischen auch ne Funktion gefunden, die minimas sucht. Der Name fmins oder fminsearch, aber weiß nicht nicht recht wie man damit umgeht.
Hab dir übrigens ne pm geschrieben mit E-Mail Adresse.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 11:20 Mo 20.04.2009 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:20 Mi 22.04.2009 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|