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

Frage zu for-Schleifen

 

_Andi_
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 08.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2013, 19:52     Titel: Frage zu for-Schleifen
  Antworten mit Zitat      
meine function gibt folgendes aus:

Operation terminated by user during min/g (line 17)

In min (line 24)
if g(x_1,x_2,x_3,x_4,x_5) < dist

kann mir jemand helfen, ich bin blutiger Anfänger und seh meinen Denkfehler nicht.

Danke,
_Andi_

min.m
 Beschreibung:

Download
 Dateiname:  min.m
 Dateigröße:  1.02 KB
 Heruntergeladen:  246 mal
Private Nachricht senden Benutzer-Profile anzeigen


Bluesmaster
Forum-Century

Forum-Century



Beiträge: 203
Anmeldedatum: 13.11.11
Wohnort: Gera
Version: 2012a
     Beitrag Verfasst am: 08.05.2013, 20:29     Titel:
  Antworten mit Zitat      
Da gibts kein Problem.

Die Schleife funktion g wird 200.000.000.000 mal aufgerufen,
wenn du viel Zeit hast kommt der Fehler nicht Wink


im Ernst: abborted by user bedeuted, dass du "ctrl+c"
gedrückt hast um die Berechnung abzubrechen.


Übrigens
x_4 = x_4 + step

musst du nicht extra ausführen, das passiert durch den
Schleifenkopf von alleine und wird einfach ignoriert.



Gruß

Blues
Private Nachricht senden Benutzer-Profile anzeigen
 
_Andi_
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 08.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2013, 20:46     Titel:
  Antworten mit Zitat      
OK,

Würde das wie es dasteht funktioneren? Das heißt irgendwann etwas ausgeben? Wenn ja was genau?

Ich habe hiermit versucht ein Minimalproblem zu lösen, wozu g die Funktion ist. Die for Schleifen sind sozusagen die Eingrenzungen der Variablen.

Da g sich aus mehreren eukl. Metriken zusammensetzt, weiß ich nicht wie ich das in die Form Ax=b bringen kann.

Eigentlich sollten wir fmincon benutzen, aber ich weiß nicht wie das funktioniert.

Wenn du mir weiterhelfen kannst, wäre echt super.

Danke aber für deine Antwort.

_Andi_
Private Nachricht senden Benutzer-Profile anzeigen
 
Bluesmaster
Forum-Century

Forum-Century



Beiträge: 203
Anmeldedatum: 13.11.11
Wohnort: Gera
Version: 2012a
     Beitrag Verfasst am: 08.05.2013, 21:28     Titel:
  Antworten mit Zitat      
die Frage des Codeerstellers an einen Fremden, was denn der Code ausgeben würde lässt mich leicht schmunzeln Smile


Die Antwort: Nichts!

Du rasterst deine Funktion zwar richtig ab, merkst dir aber die
Ausgaben nicht. Dementsprechend kannst du sie nicht vergleichen.
Daher auch kein Minimum herausfinden.
Und zweihundertmilliarden Rechnungen würden Jahre dauern.

Aber der Grundgedanke war schon richtig. Es gibt aber effektivere Methoden
wie fmincon. Allein das es zwei Toolboxen für Optimierung gibt zeigt aber
schon dass die Antwort sehr umfangreich ausfallen könnte.

Für deinen speziellen Fall gehts auch ohne Toolboxen:


Code:
function min

clc

fHandle = @( x ) g( x(1) , x(2) , x(3) , x(4) , x(5) );

[ x_min y_min ] = fminsearch( fHandle , [ 0 0 0 0 0 ] , ...
                  optimset( 'TolX' ,1e-8 , 'MaxFunEvals' , 10^6 , 'MaxIter' ,  10^6 ) )


function [y] = g( x_1 , x_2 , x_3 , x_4 , x_5 )
 y = sqrt([(x_1-2) 10]*[(x_1-2) 10]')+sqrt([(x_2-x_1) (x_2-24)]*[(x_2-x_1) (x_2-24)]') ...
     +sqrt([(x_3-x_2) (24-x_2)]*[(x_3-x_2) (24-x_2)]')+sqrt([-x_3 (x_4-12)]*[-x_3 (x_4-12)]')...
     +sqrt([x_5 -x_4]*[x_5 -x_4]')+sqrt([(12-x_5) 4]*[(12-x_5) 4]');
end


end
 




Ergebniss wäre:

x_min =

-4.3018 8.9249 1.2056 0.0000 -0.0000


y_min =

73.5211


Gruß

Blues
Private Nachricht senden Benutzer-Profile anzeigen
 
_Andi_
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 08.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2013, 22:49     Titel:
  Antworten mit Zitat      
Wie gesagt, ich bin nen Anfänger: Meines Erachtens nach sollte es ja x_min und y_min ausgeben, aber ich war mir nicht sicher was ich da zusammenprogrammiert habe.

Bis du dir sicher, dass das das Minimum ist?

Ich habe durch ausprobieren für x = 10 16 7 6 7 einen geringeren Wert rausbekommen nämlich y = 59,6...

Außerdem passt deine Lösung nicht, denn sie verstößt gegen die Nebenbedingungen:

0<=x_1<=24
12<=x_2<=24
0<=x_3<=24
0<=x_4<=12
0<=x_5<=12

Kannst du mir sagen, wo ich mich über diese Toolboxen informieren kann, denn ich finde wenig über google.

Danke,

_Andi_
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die beste Hilfe ist die Dokumentation. Dort findest du ausführliche Informationen, beispielsweise zu fminsearch und fmincon.

Dass die Lösung gegen die Nebenbedingungen verstößt sollte nicht verwundern, da sie nirgends berücksichtigt wurden.

Die Funktionen aus der Optimization Toolbox liefern lokale Minima, d.h. sie sind auf einen ausreichend guten Startwert angewiesen, um zum globalen Minimum zu konvergieren.

Für globale Minimierung sind die Methoden aus der Global Optimization Toolbox besser geeignet, wie ga oder patternsearch. Natürlich kann man auch mal über verschiedene Startwerte iterieren.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 08.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2013, 23:44     Titel:
  Antworten mit Zitat      
Danke,

Ich bin jetzt mal nach der Dokumentation gegangen:

Kannst du mal drüber schauen, warum es nicht funktioniert?

Danke,

_Andi_

m.m
 Beschreibung:

Download
 Dateiname:  m.m
 Dateigröße:  389 Bytes
 Heruntergeladen:  243 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.05.2013, 00:26     Titel:
  Antworten mit Zitat      
Hallo,

was heißt "es funktioniert nicht"?
Bekommst du eine Fehlermeldung? Welche?
Abweichende Ergebnisse? Welche Ergebnisse erwartest du dann?

Obere und untere Schranken sollten nicht als lineare Ungleichungen, sondern als Schranken (lb und ub) angegeben werden.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 08.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.05.2013, 00:37     Titel:
  Antworten mit Zitat      
Es wird keine Lösung ausgegeben, sondern:

"Undefined operation for the given operands"

Wenn ich die Grenzen in lb und ub angeben soll, was trage ich für A,b,Aeq,beq ein? (ich weiß wofür sie stehen, aber ich sie nicht gegeben).

Ich muss dann ja aufrufen:

x = fmincon(@g,x_0,A,b,Aeq,beq,lb,ub)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

das verwundert mich, denn bei mir läuft dein Code durch. Ich finde lediglich die Positionierung der Funktion g merkwürdig, aber das ist Geschmackssache.
Zudem sollte die äußere Funktion auch die Ergebnisse zurückgeben.

Nicht benötigte Argumente kannst du mit [] überspringen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 08.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.05.2013, 13:24     Titel:
  Antworten mit Zitat      
Also ich habe Matlab nur an der Uni, zuhause versuche ichs mit Scilab, aber es will nicht funktionieren. Vielleicht deswegen die Fehlermeldung. Ich werde den Code am nächsten Dienstag an der Uni testen.

Harald hat Folgendes geschrieben:

1) Zudem sollte die äußere Funktion auch die Ergebnisse zurückgeben.

2) Nicht benötigte Argumente kannst du mit [] überspringen.


1) Was meinst du genau damit? Ich habs verändert, meinst du es so? (Ich habe den Startwert x_0 in den Input getan)

2) Ich dachte in eckige Klammern schreibt man Vektoren und Matrizen. Welche Argumente werden nicht benötigt?

Wenn funktioniert was gibt es dir denn aus? Ich meine, welche Lösung?

Kannst du mir auch damit helfen?:

_Andi_ hat Folgendes geschrieben:

Wenn ich die Grenzen in lb und ub angeben soll, was trage ich für A,b,Aeq,beq ein? (ich weiß wofür sie stehen, aber ich sie nicht gegeben).

Ich muss dann ja aufrufen:

x = fmincon(@g,x_0,A,b,Aeq,beq,lb,ub)


Danke,
_Andi_

min.m
 Beschreibung:

Download
 Dateiname:  min.m
 Dateigröße:  388 Bytes
 Heruntergeladen:  239 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.05.2013, 19:07     Titel:
  Antworten mit Zitat      
Hallo,

zu 1)
Genau, vor allem die Ausgabeargumente zurückgeben, sonst siehst du sie ja nicht.

zu 2)
Die nicht benötigten Argumente sind A, b, Aeq und beq.
[] ist auch ein leeres Array, und es ist eine Art Konvention, dass man die zuvor genannten Parameter auf [] setzt, wenn keine Nebenbedingungen dieser Art vorhanden sind.

In deinem Beispiel so:
Code:
lb=[0; 12; 0; 0; 0];
ub=[24; 24; 24; 12; 12];

[x_min,y_min] = fmincon(@g,x_0,[],[], [], [], lb, ub);



Zitat:
Kannst du mir auch damit helfen?

Das war ja 2).

Grüße,
harald
Private Nachricht senden Benutzer-Profile anzeigen
 
_Andi_
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 08.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.05.2013, 23:15     Titel:
  Antworten mit Zitat      
Danke erstmal. Ich werde das nächste Woche dann ausprobieren. Falls noch Fragen sind, werde ich mich melden. Ihr habt mir sehr geholfen.

_Andi_
Private Nachricht senden Benutzer-Profile anzeigen
 
_Andi_
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 08.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2013, 19:20     Titel:
  Antworten mit Zitat      
Also, hat wunderbar geklappt, außer Matlab gibt eine Warnung wieder:

Irgendwas mit: "trust-region-reflective" und:

A gradient to be supplied in the objective function

GradObj to be set to 'on'

Was bedeutet das? Fehlt irgendetwas?

_Andi_
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.05.2013, 20:45     Titel:
  Antworten mit Zitat      
Hallo,

der Lückentext ist schwierig zu interpretieren.
Ich würde aber vermuten, dass es lediglich eine Warnung ist, dass MATLAB aufgrund der Problemklasse einen anderen Algorithmus verwendet als den standardmäßig eingestellten.
Für genaueres müsstest du zumindest die vollständige Meldung hier reinkopieren.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.