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

fmincon Nebenbedingung

 

hansemiel

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.10.2011, 17:10     Titel: fmincon Nebenbedingung
  Antworten mit Zitat      
Hallo,

ich möchte gemessene Werte mit einem Polynom 3. Grades regressieren, mit der Nebenbedingung, dass der Funktionswert an der Stelle x=0 y=0 sein muss und an der Stelle x=1 y=1 sein muss.

Dazu habe ich mir eine Funktion zum minimieren geschrieben

Code:

function f = Zielfunktion (p)

xdata=[0,....,1];
ydata=[0,...,1];

yregr=p(1).*xdata.^3+p(2).*xdata.^2+p(3).*xdata+p(4);

fehlersumme=0;

for i=1:length(xdata)
    fehler=(yregr(i)-ydata(i))^2;
    fehlersumme=fehlersumme+fehler;
end

f= fehlersumme;
 


Ich verstehe jetzt die fmincon Hilfe nicht wirklich, wie bzw. wo kann ich jetzt die Bedingung
0=p(1).*xdata(1).^3+p(2).*xdata(1).^2+p(3).*xdata(1)+p(4);
bzw
1=p(1).*xdata(letzte element).^3+p(2).*xdata(letzte element).^2+p(3).*xdata(letzte element)+p(4);

rein schieben?

Besten Dank


Harald
Forum-Meister

Forum-Meister


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

mach dir das Leben doch einfacher.
p(4) kannst du weglassen, wenn bei x = 0 auch y = 0 sein soll.
Wenn x=1, sieht die Gleichung y = 0 so aus:
0=p(1) +p(2) +p(3) ; % p(4) ist schon weg

Das heißt, du kannst das Problem vereinfachen, indem du p(3) = -(p(1) + p(2)) setzt und dann FMINUNC nimmst.

Alternativ kannst du das als lineare Gleichungsnebenbedingung angeben:
Aeq = [1 1 1]
beq = 0;

Aber an sich ist der Berechnungsaufwand ohnehin übertrieben; du kannst das Problem nämlich wie oben reduzieren auf:
y = p(1)*x^3 + p(2)*x^2 -(p(1) + p(2))*x
oder
y = p(1) * (x^3 - x) + p(2) * (x^2 - x)

Das ist dann ein lineares Regressionsproblem. Die Lösung dieses Problems wäre (für Spaltenvektoren x und y) :
[x.^3 - x, x.^2 - x] * p = y bzw.
Code:
p = [x.^3 - x, x.^2 - x] \ y


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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.10.2011, 21:28     Titel:
  Antworten mit Zitat      
Hallo Harald,

Vielen Vielen Dank für die Lösung, manchmal sieht man den Wald vor lauter Bäumen nicht und will gleich mit der größten numerischen Keule auf das Problem hauen Laughing .

Danke auch für den Tip mit Aeq und beq damit funktioniert es auch mit fmincon ganz wunderbar und ich fange an die Optionen für die Nebenbedingung zu verstehen.

Also nochmals Danke und schönen Abend
 
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.