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

iteratives Lösen - Zielfunktion

 

Coja
Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 20.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2009, 19:10     Titel: iteratives Lösen - Zielfunktion
  Antworten mit Zitat      
Hallo zusammen,

keine Ahnung ob ich in dieser Rubrik richtig bin, da ich leider noch nicht den Lösungsweg weis.

Ich würde gerne eine Gleichung iterativ lösen.
Code:

x_start=15;% Startwert
x_fl=50; %fixer Wert
x_s=20; %fixer Wert
x_m=x/(log((x_fl+x/2-x_s)/(x_fl-x/2-x_s))) % logarithmischer Mittelwert mit ln-Funktion

%% Zielfunktion:
Ziel=(x(n+1)-x(n))^2 % Ziel soll gegen Null streben
% daraus möchte ich dann das x ermitteln

 

Ich hoffe mal ich konnte das Problem einigermaßen gut darstellen.
Wie löse ich dies nun in Matlab?
Hilft mir die Funktion
Code:
da weiter und wenn ja, wie läuft das mit den Function-Handle?

Vielen Dank im vorraus.
vg
Coja
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.452
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.10.2009, 21:41     Titel:
  Antworten mit Zitat      
Hallo,

ich steige bei dem ganzen nicht so ganz durch.
Was haben denn xs, xm etc. mit x zu tun?
Wie ergibt sich x(n+1) aus x(n) bzw. woraus ergeben sie sich?

Grundsätzlich sind zum Minimieren Funktionen aus der Optimization Toolbox geeignet. Welche am besten ist, hängt von der genauen Problemstellung (Art der Zielfunktion und ggf. Nebenbedingungen) ab.

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

Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 20.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.10.2009, 18:08     Titel:
  Antworten mit Zitat      
Hallo,
ich hab es wirklich sehr unübersichtlich und konfus geschrieben, also vielleicht nochmal:

Code:

% Startwerte
x_w_start=32.5;   % Startwert für x_w also 1. Iterationswert x_w(1)
dx_start=10;        % Startert für dx also 1. Iterationswert dx(1)

% Berechnung für den jeweiligen Iterationsschritt:
dx_m=dx/(log((25l+dx/2)/(25-dx/2))) % logarithmischer Mittelwert mit ln-Funktion
y_1=290*dx_m;

% Ermittlung des ersten Wertes nach dem Startwert:
rr=1000;             % dieser Wert ist ggf auch noch abhängig von x_w (aber erstmal unwichtig)
cc=4000;             % dieser Wert ist ggf auch noch abhängig von x_w
dx(1+1)=y_1/(0.13*rr*cc)
x_w(1+1)=45-y_1*(0.002)

%% Zielfunktion:
Ziel=(dx(n+1)-dx(n))^2 % Ziel soll gegen Null streben
Ziel=(x_w(n+1)-x_w(n))^2 % Ziel soll gegen Null streben (wie Least-Square)
% daraus möchte ich dann das dx ermitteln nach dem letzten Itetationsschritt
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.452
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.10.2009, 18:35     Titel:
  Antworten mit Zitat      
Hallo,

das sieht mir so aus, als ob du eine Folge (x, dx) hast und nah aufeinander folgende Werte haben möchtest.
Das wichtigste bei Optimierung ist, WAS denn eigtl optimiert werden soll. Ist es das n? Oder die Startwerte (x_start, dx_start)?

Auf den ersten Blick würde ich sagen: die ersten 1000 Elemente der Folge ausrechnen, dann min(diff(...)).

Aber wie gesagt... sicher, was du willst, bin ich noch immer nicht.

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

Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 20.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.10.2009, 23:24     Titel:
  Antworten mit Zitat      
Hallo Harald.
Naja ich will das dx und das x_w ausrechnen wobei dx_start bzw x_w_start jeweils den ersten Wert darstellen. von diesm ausgehend sollen dx und x_w solange optimiert werden, bis der Wert der quadratischen Abweichung von einem Interationsschritt zum nächsten gleich null ist.

vg
Coja
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

dann würde ich das so machen:

Code:
x_w = ... % Startwerte
dx = ...
x_w_alt = inf;
dx_alt = inf;
while (x_w - x_w_alt)^2 > tol && (dx - dx_alt)^2 > tol
x_w_alt = x_w;
dx_alt = dx;
x_w = (neuer Wert);
dx = (neuer Wert);
end


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

Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 20.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2009, 20:11     Titel:
  Antworten mit Zitat      
Danke für die Kühe bisher.
Das Problem ist jedoch, dass die Weilschleife nur abbricht wenn beide (!) Toleranzen unterschritten werden. Außerdem wird ja nur in einer Richtung (also absteigend) gesucht. Die Schrittweite wird ja nicht verfeinert in der Formel sondern bleibt fix. Die Verwendung einer Optimerungsfunktion (aus Optimization TB) wäre mir daher lieber.

Grüße
Coja
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.452
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.10.2009, 21:11     Titel:
  Antworten mit Zitat      
Wenn der Abbruch bei beiden Kriterien dein Problem ist, dann verwende eben || statt &&. Ich gehe aber schon davon aus, dass dx und x_w gleichzeitig optimiert werden sollen?

Es ist ja kein Problem, eine solche Funktion zu verwenden. Aber ich muss zugeben, ich habe wohl immer noch nicht verstanden, was du genau willst. Insbesondere habe ich den Eindruck, dass die x_w bzw. dx sich immer aus dem vorherigen Wert errechnen, was für eine Optimierung nicht der Fall sein sollte.

Wenn du eine Optimierungsfunktion verwenden willst, muss das Problem in dieser oder einer ähnlichen Form vorliegen:

Finde x, das f(x) ggf. unter Nebenbedingungen minimiert

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

Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 20.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.10.2009, 18:37     Titel:
  Antworten mit Zitat      
Ja, ok hab ich verstanden. Ich hab die While-Schleife ein wenig verändert ... jetzt klappt es. Danke nochmal
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 - 2024 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.