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

Optimierung einer Gleichung mit 2 Variablen

 

slinshady
Themenstarter

Forum-Century

Forum-Century


Beiträge: 115
Anmeldedatum: 12.01.16
Wohnort: ---
Version: R2012b+
     Beitrag Verfasst am: 08.02.2016, 20:42     Titel:
  Antworten mit Zitat      
ahh ja, dein Link hat mir geholfen. Danke, diese Möglichkeit habe ich gesucht.
Private Nachricht senden Benutzer-Profile anzeigen


slinshady
Themenstarter

Forum-Century

Forum-Century


Beiträge: 115
Anmeldedatum: 12.01.16
Wohnort: ---
Version: R2012b+
     Beitrag Verfasst am: 09.02.2016, 12:25     Titel:
  Antworten mit Zitat      
function  F  = root2d( s0, xpoly, ypoly, xy_m, normalv )
% UNTITLED2 Summary of this function goes here
%   Detailed explanation goes here
    ax=xpoly(4);
    bx=xpoly(3);
    cx=xpoly(2);
    dx=xpoly(1);
    ay=ypoly(4);
    by=ypoly(3);
    cy=ypoly(2);
    dy=ypoly(1);  
   
    F(1)=ax-xy_m(1)-x(1)*normalv(1)+bx*(x(2)-s0)+cx*(x(2)-s0)^2+dx*(x(2)-s0)^3;
    F(2)=ay-xy_m(2)-x(1)*normalv(2)+by*(x(2)-s0)+cy*(x(2)-s0)^2+dy*(x(2)-s0)^3;
end
 


ich habe mir jetzt folgende Funktion geschrieben, die ich folgendermaßen aufrufe:

Code:
fun=@(x)root2d(s0i,Pix,Piy,pxy_m(i,:),n(i,:));
    x0=[1,px_innen.breaks(iki(i))];
    f=fminunc(fun,x0);



führt zu folgendem Fehler:

Undefined function 'x' for input arguments of type 'double'.

Error in root2d (line 13)
F(1)=ax-xy_m(1)-x(1)*normalv(1)+bx*(x(2)-s0)+cx*(x(2)-s0)^2+dx*(x(2)-s0)^3;

Error in @(x)root2d(s0i,Pix,Piy,pxy_m(i,: ),n(i,: ))


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

Error in test1 (line 174)
f=fminunc(fun,x0);

Caused by:
Failure in initial user-supplied objective function evaluation. FMINUNC cannot continue.


Wenn ich das richtig verstehe liegt der Fehler aktuell darin, dass x bei mir ein Vektor ist oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 09.02.2016, 12:31     Titel:
  Antworten mit Zitat      
x gibt es in der funktion root2d nicht und du versuchst trotzdem auf ein element davon zuzugreifen.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
slinshady
Themenstarter

Forum-Century

Forum-Century


Beiträge: 115
Anmeldedatum: 12.01.16
Wohnort: ---
Version: R2012b+
     Beitrag Verfasst am: 09.02.2016, 12:37     Titel:
  Antworten mit Zitat      
Code:
   fun=@(x)root2d(x,s0i,Pix,Piy,pxy_m(i,:),n(i,:));
    x0=[1,px_innen.breaks(iki(i))];
    f=fminunc(fun,x0);


Code:
function  F  = root2d(x, s0, xpoly, ypoly, xy_m, normalv )
%UNTITLED2 Summary of this function goes here
%   Detailed explanation goes here
    ax=xpoly(4);
    bx=xpoly(3);
    cx=xpoly(2);
    dx=xpoly(1);
    ay=ypoly(4);
    by=ypoly(3);
    cy=ypoly(2);
    dy=ypoly(1);  
   
    F(1)=ax-xy_m(1)-x(1)*normalv(1)+bx*(x(2)-s0)+cx*(x(2)-s0)^2+dx*(x(2)-s0)^3;
    F(2)=ay-xy_m(2)-x(1)*normalv(2)+by*(x(2)-s0)+cy*(x(2)-s0)^2+dy*(x(2)-s0)^3;
end


Error using fminunc (line 330)
User supplied objective function must return a scalar value.

Error in test1 (line 174)
f=fminunc(fun,x0);

hab es soweit geändert, wenn ich dich richtig verstehe und die doku hierzu http://de.mathworks.com/help/optim/.....ing-extra-parameters.html, hatte das gefehlt...
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.02.2016, 12:39     Titel:
  Antworten mit Zitat      
Hallo,

was soll denn mit root2d gemacht werden?
Wenn das als zu lösende Gleichungen aufgefasst werden soll, warum verwendest du dann nicht fsolve ?

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

Forum-Century

Forum-Century


Beiträge: 115
Anmeldedatum: 12.01.16
Wohnort: ---
Version: R2012b+
     Beitrag Verfasst am: 09.02.2016, 12:50     Titel:
  Antworten mit Zitat      
ja stimmt. Das sollte die richtige sein.

Habe mir mit den Lamdas jetzt die Kurve plotten lassen.
die schwarzen Punkte sind die berechneten Schnittpunkte:

http://www.bilder-upload.eu/show.php?file=9cf1e2-1455016230.jpg


habe hier mal mein lamda plotten lassen. es gibt 117 werte, die normalerweise zwische 2 und 12 liegen sollten.

http://www.bilder-upload.eu/show.php?file=cdfd3b-1455016449.jpg

außerdem sollten sie alle positiv sein. Ich fange an zu glauben, dass die Funktion nicht funktioniert, obwohl sie das von der Überlegung her müsste!

ich habe mir dazu auch mal die Wurzeln angeschaut, die mir fsolve liefert. diese sind weitestgehen ok, allerdings leider nicht immer. Sie sollten idealerweise im Bereich zwischen dem aktuellen break des Polynoms und dem nächsten liegen.
Wie kann ich so etwas als Einschränkung geben?
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.