|
|
Matheproblem / Parameterfindung mit dem Befehl fminunc |
|
luep |
Forum-Anfänger
|
|
Beiträge: 25
|
|
|
|
Anmeldedatum: 11.07.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 25.07.2014, 17:16
Titel: Matheproblem / Parameterfindung mit dem Befehl fminunc
|
|
|
|
|
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
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 25.07.2014, 18:31
Titel:
|
|
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
|
|
|
luep |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 25
|
|
|
|
Anmeldedatum: 11.07.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.07.2014, 08:12
Titel:
|
|
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
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 26.07.2014, 08:50
Titel:
|
|
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:
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:
Grüße,
Harald
|
|
|
luep |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 25
|
|
|
|
Anmeldedatum: 11.07.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.07.2014, 10:28
Titel:
|
|
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.
|
|
|
luep |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 25
|
|
|
|
Anmeldedatum: 11.07.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.07.2014, 18:25
Titel:
|
|
|
|
|
Hallo nochmals ,
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!!!
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 26.07.2014, 18:31
Titel:
|
|
Hallo,
bitte den heute morgen zur Verfügung gestellten Link lesen. Dort findest du die Lösung dieses Problems.
Grüße,
Harald
|
|
|
luep |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 25
|
|
|
|
Anmeldedatum: 11.07.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.07.2014, 16:04
Titel:
|
|
Hallo Harald,
danke nochmals für deine Hilfe, es hat geklappt
Danke für deine Bemühung und Zeit
Jetzt muss ich das "nur" noch auf meine Aufgabenstellung anpassen.
Gruß
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|