WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Programmieren Algorithmus

 

kamatlab
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 06.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.06.2011, 10:42     Titel: Programmieren Algorithmus
  Antworten mit Zitat      
Hi,
ich bin ein absoluter Matlab - Anfänger , muss aber leider in kurzer Zeit einen für mich recht komplizierten Trust Region Algorithmus in Matlab programmieren. Ich weiß noch nicht einmal wie ich das mit den Iterationen angehen soll. Habt ihr irgendwie Tipps, woran ich mich orientieren kann. Kennt jemand vll sogar solche bereits programmierten Algorithmen im Netz oder hat jemand sonst einen Ratschlag?
Bin etwas verzeifelt gerade Confused
Bin über jede Hilfe dankbar.
gruß kamatlab
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.06.2011, 11:14     Titel:
  Antworten mit Zitat      
Hallo,

falls es um Optimierung geht:
Der Trust-Region-Algorithmus ist in MATLAB schon verfügbar, z.B. in fmincon (Optimization Toolbox).

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
kamatlab
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 06.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.06.2011, 10:12     Titel:
  Antworten mit Zitat      
hi, ja es geht um Optimierung.

Matlab macht einfach nicht , was ich will Confused . Hat jemand von euch vielleicht einen Algorithmus mal in Matlab programmiert woran ich mich orientieren kann? Ich weiß sonst echt nicht wie ich das zeitlich machen soll .
Das wäre wirklich eine große Hilfe.

Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.06.2011, 10:46     Titel:
  Antworten mit Zitat      
Hallo,

am einfachsten ist natürlich immer, den fertig implementierten Algorithmus zu verwenden.

Wenn du das wirklich selber programmieren musst, dann kann man dir sicher Hilfestellungen anbieten, wenn du irgendwo konkrete Probleme hast. Dazu müsstest du aber das konkrete Problem benennen, am besten mit einem Code-Beispiel.

Ansonsten hilft Google und spuckt z.B. das aus:
http://www.optimization-online.org/DB_HTML/2009/04/2274.html

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
kamatlab
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 06.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.06.2011, 12:20     Titel:
  Antworten mit Zitat      
Ja, ich muss den selber schreiben.. leider Smile.

Da es ja ein Algorithmus werden soll, muss ich ja functions definieren, wo ich immer andere neue Werte einstetzen kann.

Also hab ich für die Zielfunktion , die ich minimieren will so angefagen.

Code:
function f(x1,x2)
f=x1^2+x2^2
end


und für die Gleichungsnebenbedinugen
Code:
function c(x1,x2)
c=[2x1;x2+x1]
end


Ich hab diese beiden Funktionen gespeichert unter dem jeweilgen Namen c und f.
Dann öffne ich eine Skript datei und versuche jacobian zu verwenden.

jacobian(c) Wie mache ich das aber nun? Ich möchte halt , dass Matlab mir die Jakobimatrix bestimmt und dass ich dort auch Iterationswerte einstetzen kann. Ich brauch ja halt nicht die allgemeine Jacobimatrix , sonder die Jacobimatrix an den Iterationsstellen.

Ist das verständlich wo mein Problem liegt? Ist vermutlich halt keine schwiergie Sachen, nur ich kenn mich halt gar nicht aus und Matlab meckert immer .
Private Nachricht senden Benutzer-Profile anzeigen
 
kamatlab
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 06.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.06.2011, 12:28     Titel:
  Antworten mit Zitat      
Also wenn ich das so eingebe in ein Fenster
Code:

syms x1 x2

f=x1^2+x2^2;        % Zielfunktion


g=jacobian(f)

c=[x1+x2;2*x1];     % Gleichungsnebenbedingungen

A=jacobian(c);
 


dann klappt der Befehl. So nützt es mir aber nichts, da ich ja so nicht die verschiedenen Iterationswerte einsetzten kann ,oder?


Am liebsten würde ich den ganzen Algorithmus in eine Datei , sprich in ein Fenster schreiben. Wenn ich da aber functions definieren will, dann erlaubt Matlab das nicht. Geht das irgendwie? Wie muss man das dann schreiben?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.06.2011, 12:54     Titel:
  Antworten mit Zitat      
Hallo,

deine Funktionen geben ja auch nichts zurück.
Ich nehme mal das Beispiel der Zielfunktion - ich würde sie so definieren:
Code:
function zielfunWert = zielfun(x1,x2)
zielfun=x1^2+x2^2;
end

und dann z.B. so aufrufen
Code:
zielfun34 = zielfun(3,4)


Es sieht wirklich so aus, als ob du dich zunächst in die Konzepte von MATLAB einarbeiten solltest. Ein Startpunkt dafür könnte hier sein:
http://www.mathworks.com/help/relea.....matlab_prog/f7-38012.html

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
kamatlab
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 06.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.06.2011, 13:17     Titel:
  Antworten mit Zitat      
Meinst du man kann den Algorithmus auch ganz ohne Functions schreiben?

Also einfach mit einer Schleife z.B. so

Code:

syms y z
x=[0,1];
eta1=0.01;
eta2=0.75;
gamma1=1/2;
gamma2=1/2;
xiN=1;
xiT=0.8;
nu=0.0001;
tau1=2;
tau2=1;

for i=0:2
   
    f=x(1)^2+x(2)^2
   
    c=[y+z^2;2*y];
   
    A=jacobian(c)
   
   
   
    x=[x(1)+i,x(2)+1]
end
 


Jetzt steht in A die Jakobimatrix von c . Kann ich da nun irgendwie was einsetzen? Der Befehl jacobian klappt ja nur , wenn man vorher die Variablen nicht festgelegt hat.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.06.2011, 14:01     Titel:
  Antworten mit Zitat      
Hallo,

es ist wenig sinnvoll, einen Trust-Region-Algorithmus mit symbolischen Variablen zu rechnen.
Statt mit jacobian musst du die Jacobi-Matrix dann über finite Differenzen annähern - oder du gibst die Formel explizit an, bei so einfachen Funktionen sind die Ableitungen ja kein Problem.
Natürlich kannst du das so schreiben, aber der Algorithmus soll ja sicher auch mal für andere Zielfunktionen und Nebenbedingungen eingesetzt werden können - und diese Möglichkeit nimmst du dir auf diese Weise.

Zum Verständnis habe ich mal ein einfaches Programm zur Nullstellensuche geschrieben:
Code:
function x = searchzero(f, x)

fx = f(x);
while abs(fx) > 1e-10
    df = (f(x+0.0001) - f(x-0.0001))/(0.0002); % Annäherung der Ableitung
    h = -fx / df;                              % Löse f(x) + h*f'(x) = 0
    x = x + h;
    fx = f(x);
end


Beispielaufruf:
Code:
f = @(x) exp(x) - 10*x
z = searchzero(f, 1)
f(z)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
kamatlab
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 06.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.06.2011, 17:22     Titel:
  Antworten mit Zitat      
Hi Harald

vielen Dank für dein Beispiel. Ich versuch es mal weiter Smile . Sollten Fragen auftauchen werde ich mich nochmal melden .. bestimmt Very Happy
Danke
Gruß Thorsten
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.