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

Matheproblem / Parameterfindung mit dem Befehl fminunc

 

luep
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 11.07.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2014, 17:16     Titel: Matheproblem / Parameterfindung mit dem Befehl fminunc
  Antworten mit Zitat      
Hallo zsm,

ich bekomm immer wieder ne blöde Fehlermeldung, dass mein Problem unbegrenzt sei, aber ich weiss nicht so genau warum.
Vermutlich ist es ein Matheproblem, aber ich komme selber nicht so recht drauf und wollte hier mal mein ansatz schildern. Vllt kann ja einer helfen.

Ich habe eine Gleichung, die wiefolgt aussieht:

y=p(1)*y_1+p(2)*y_2+p(3)*u_2+p(4)*u_3;

dabei sind meine y_1, y_2, u_2 und u_3 bekannt. Das y wäre eigentlich auch bekannt(nutze ich im Programm aber nicht).

Nun möchte ich aus den Bekannten Größen optimale Parameter bestimmen und hatte dabei folgende Überlegung:

--> mein Hauptprogrämmchen:

options = optimset()

options.Display='iter'

%Bekannte Daten
y_1=[zeros(3,1); 0.0774;0.1998;0.3018;0.3738;0.4213];
y_2=[zeros(4,1);0.0774;0.1998;0.3018;0.3738];
u_2=[zeros(2,1);ones(6,1)];
u_3=[zeros(3,1);ones(5,1)];
%Startwerte fuer die Iteration
startWert=[1,2,1,2];

paraOpt=fminunc(@paraMinimum,startWert,options)


--> meine Funktion,welche aufgerufen wird:

function y=paraMinimum(p)
y=p(1)*y_1+p(2)*y_2+p(3)*u_2+p(4)*u_3;


Wie schon gesagt, möchte ich aus den gegebenen Daten, optimale Parameter für eine "allgemeingültige" Gleichung berechnen.

Sprich, es soll ein Näherungsweise gutes Ergebnis für alle Daten herauskommen.

Lass ich nun das Programm laufen, kommt folgende Bemerkung:

Iteration Func-count f(x) Step-size optimality
0 5 1.8012 1
1 115 -2.62319e+20 1.23096e+20 1

Problem appears unbounded.

fminunc stopped because the objective function value is less than
or equal to the default value of the objective function limit.

<stopping criteria details>


paraOpt =

1.0e+20 *

-0.3715 0.2459 1.2310 -1.2310

(Dabei sind die Parameter in keinster weise richtig)

Die Frage ist, ob ich das Mathematisch überhaupt so lösen kann?

Ich hoffe man kann verstehen, in welche Richtung mein Problem zielt.

meine gegebenen Daten nochmal übersichlicher:

y_1 =

0
0
0
0.0774
0.1998
0.3018
0.3738
0.4213
y_2 =

0
0
0
0
0.0774
0.1998
0.3018
0.3738
u_2 =

0
0
1
1
1
1
1
1

u_3=

0
0
1
1
1
1
1
1
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

mich wundert, dass das überhaupt durchläuft, da die y_1, y_2, u_2 und u_3 ja an sich in der anderen Funktion nicht verfügbar sind.

Zitat:
Das y wäre eigentlich auch bekannt(nutze ich im Programm aber nicht).

Solltest du aber, wenn du die rechte Seite so wählen willst, dass sie gleich der linken ist.

Ich würde hierfür statt fminunc die Funktion fitlm verwenden - die ist für lineare Regressionsprobleme wie dieses bestens geeignet.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 11.07.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2014, 08:12     Titel:
  Antworten mit Zitat      
Hallo Harald,

Danke erstmal für die antwort.

in der tat hat matlab iwas ausgespuckt, aber nicht wirklich was berechnet.

Laut Aufgabenstellung soll ich den befehl fminunc nutzen.

Dann würde ich jetzt die y werte implementieren, meine frage ist nur,
Wie kann ich der funktion die werte bzw die vektoren zuweisen, muss ich das in die funktionsdatei schreiben?
Wäre nochmal dankbar, wenn du mir da ein tip geben könntest.

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

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.07.2014, 08:50     Titel:
  Antworten mit Zitat      
Hallo,

ich finde es immer schade, wenn Aufgabenstellungen so formuliert sind, dass man ein Tool verwenden soll, aber nicht das bestmögliche. Das ist in etwa, als ob ich mit einem kleinen Löffel eine Suppe essen soll oder mit einem großen Löffel ein Frühstücksei.

Wenn unbedingt fminunc verwendet werden soll, muss es so umformuliert werden, dass die Abweichungen zwischen rechter und linker Seite minimiert werden, also:

Code:
function fehlerNorm = paraMinimum(p)
fehler = p(1)*y_1+p(2)*y_2+p(3)*u_2+p(4)*u_3 - y;
fehlerNorm = norm(fehler);


Es wundert mich wie gesagt, dass du keine Probleme bei der Übergabe y_1, y_2, u_2 und u_3 hast. Falls doch, siehe
http://www.mathworks.de/de/help/opt.....ing-extra-parameters.html

Dann wäre die Zielfunktion:
Code:
function fehlerNorm = paraMinimum(p, _1, y_2, u_2, u_3, y)
fehler = p(1)*y_1+p(2)*y_2+p(3)*u_2+p(4)*u_3 - y;
fehlerNorm = norm(fehler);


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 11.07.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2014, 10:28     Titel:
  Antworten mit Zitat      
Hallo harald,

Super, danke dass du so hilfsbereit bist.
Werde heute Abend sofort gucken und mmich nochmal mit beschäftigen.

Ja wie oben schon erwähnt, hat matlab nur iwas berechnet.

Vielen vielen dank nochmals!!!!!

Einen schönen tag.
Private Nachricht senden Benutzer-Profile anzeigen
 
luep
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 11.07.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2014, 18:25     Titel:
  Antworten mit Zitat      
Hallo nochmals Sad ,

ich habe das Programm jetzt nochmal verändert, allerdings sagt matlab mir jetzt:

Error using paraMinimum_test_mit_vektor (line 2)
Not enough input arguments.

(fehler = p(1)*y_1+p(2)*y_2+p(3)*u_2+p(4)*u_3 - y; )
--> y_1;y_2;u_2;u_3; und y sind doch bekannt und p(1)-p(4) geb ich doch 4 startWerte an.
Warum sollte ich nicht genügend Argumente haben?


Error in fminunc (line 254)
f = feval(funfcn{3},x,varargin{:});

Error in paraMinimum (line 13)
paraOpt=fminunc(@paraMinimum_test_mit_vektor,startWert,options);
Caused by:
Failure in initial user-supplied objective function evaluation. FMINUNC cannot continue.


--> diese Fehlermeldung wird vermutlich durch den Fehler in Line 2 hervorgerufen (meine Vermutung)


mein Programm sieht nun folgendermassen aus:

Hauptprogramm ( paraMinimum):

options = optimset();

options.Display='iter';

y_1=[zeros(3,1); 0.0774;0.1998;0.3018;0.3738;0.4213];
y_2=[zeros(4,1);0.0774;0.1998;0.3018;0.3738];
u_2=[zeros(2,1);ones(6,1)];
u_3=[zeros(3,1);ones(5,1)];
y=[zeros(2,1); 0.0774; 0.1998; 0.3018; 0.3738; 0.4213; 0.4515];
startWert=[1,1,1,1];

paraOpt=fminunc(@paraMinimum_test_mit_vektor,startWert,options)

und Funktion (paraMinimum_test_mit_vektor):

function fehlerNorm = paraMinimum_test_mit_vektor(p, y_1, y_2, u_2, u_3, y)
fehler = p(1)*y_1+p(2)*y_2+p(3)*u_2+p(4)*u_3 - y;
fehlerNorm = norm(fehler);


Danke für jegliche Hilfe!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

bitte den heute morgen zur Verfügung gestellten Link lesen. Dort findest du die Lösung dieses Problems.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 11.07.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2014, 16:04     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke nochmals für deine Hilfe, es hat geklappt Smile

Danke für deine Bemühung und Zeit Exclamation

Jetzt muss ich das "nur" noch auf meine Aufgabenstellung anpassen.


Gruß
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.