Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Fachkräfte:
Ingenieur (m/w) für den Bereich modellbasierte Embedded-Softwareentwicklung
Integration von Simulink-Modellen auf die Ziel-Hardware (mit TargetLink) sowie Durchführung von Softwaretests
cbb-Software GmbH - Stuttgart

Softwareentwickler (m/w) automatische Codegenerierung
Umsetzung, Neuprogrammierung und Weiterentwicklung in Simulink, TargetLink und C
EFS - Ingolstadt, Wolfsburg

Informatiker (m/w) für den Bereich Toolkette Embedded Software
Weiterentwicklung einer MATLAB- / Simulink-Toolkette
cbb-Software GmbH - Stuttgart

Entwicklungsingenieur (m/w) Windturbinenregelung
Entwicklung von Regelungsalgorithmen für Windturbinenregler, Einbindung von modernen Sensorsystemen
Enercon GmbH - Aurich, Magdeburg, Kiel, Bremen

Entwicklungsingenieur (m/w) HiL Modellierung Automotive mit Expertenfunktion
Mitwirkung in der Entwicklung von Fahrzeugsystemen in den Bereichen Fahrerassistenzsysteme, eMobility und Komfort
Bertrandt Technikum GmbH - Ehningen

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Hilfe zur Anwendung von fmincon in Verbindung mit ODE

 

Dreampeace
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 02.03.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2018, 13:08     Titel: Hilfe zur Anwendung von fmincon in Verbindung mit ODE
  Antworten mit Zitat      
Hallo alle zusammen,
ich bin noch recht neu in dem Bereich der Matlab-Anwendung und würde mich sehr freuen, wenn ihr mir helfen könntet.

Ich würde gerne die Verwendung von fmincon etwas besser verstehen, bzw. den dargestellten Code optimieren. Nach meinem Verständnis darf "fmincon" bei linearen und nicht linearen Systemen angewendet werden um ein Maximum (initial_values * -1) bzw. Minimum herausfinden zu können.

Allgemeiner Aufbau zu fmincon lautet:
fmincon(Funktion, Startparameter, A,b,untere Grenze, obere Grenze)

In meinem System würde ich gerne die Temperatur optimieren, bin mir aber leider nicht ganz sicher wie ich das anstellen soll. Die Temperatur T würde ich gerne so lange optimieren/anpassen, bis NR.7 maximal wird (solange, bis Nr.1 oder Nr.2 aufgebraucht wurde etc.)

Derzeit bekomme ich leidedr noch immer den folgenden Fehler:

Code:

Not enough input arguments.

Error in Function_1 (line 41)
[X,Y] = ode15s(@(X,Y)Function_2(Y,P),tspan,Y0,x);

Error in fmincon_Opti (line 21)
   [results, fval] =fmincon(...
 
Trial>> Function_1
Not enough input arguments.

Error in Function_1 (line 41)
[X,Y] = ode15s(@(X,Y)Function_2(Y,P),tspan,Y0,x);
 


Leider sind mir die Ideen ausgegangen, wodran es liegen kann dass "iput arguments" fehlen.

Ich wäre euch sehr dankbar, wenn ihr mir helfen könntet. Falls die herangehensweise mit der fmincon-Funktion vom Syntax her falsch ist, würde ich mich auch über belehrende Informationen sehr freuen.
Vielen Dank für eure Zeit und Hilfe.
Mit freundlichen Grüßen,
Dreampeace


Code:

function fmincon_Opti

% Initial_guess
x0(1) = 5;           % temperature
             
% Constraints Aeq*x=Beq (ONLY linear)
Aeq = [];            % Part1: A
Beq = [];            % Part2: B

% Borders (NOT linear)
lbnds = 1;         % lower
ubnds = 10;      % upper

options = optimset(...
    'Display', 'off', ...                    
    'Algorithm','interior-point', ...    
    'TolFun', 1e-20) ;                    
    %'MaxFunEvals', 50000, ...      

% Call fmincon
   [results, fval] =fmincon(...
    Function_1,...
    x0, ...
    [],...
    [],...
    Aeq,...
    Beq,...
    lbnds,...
    ubnds,...
    options)
end



Code:

% Urspruenglich
% function  [X,Y] = Function_1
function  [X,Y] = Function_1(x)

   
   t0         = 0;                 % initial time in min
   tend     = 4;                 % final time in min
        dt        = 0.01;             % Stepsize
   tspan   = t0:dt:tend;      % time span

%% specify the initial values for the state variables
    Y0(1) = 0.5;          % NR_1
    Y0(2) = 0;            % NR_2
    Y0(3) = 0.04;    % NR_3
    Y0(4) = 0;            % NR_4
    Y0(5) = 2;            % NR_5
    Y0(6) = 0;            % NR_6
    Y0(7) = 0;            % NR_7
    Y0(08) = 1.5;         % NR_8
    Y0(9) = 0.19;  % NR_9
    Y0(10) = 0;          % NR_10

% declare parameters
   P(1) = 0.2;            %  r1_1
   P(2) = 0.3;            %  r1_2
   P(3) = 2 ;          %  r2_1
   P(4) = 50;             %  r2_2
   P(5) = 0.5;             %  r3_1
   P(6) = 0.001;       %  r3_2
   P(7) = 5;           %  r4_1
   P(8) = 0.02;       %  r4_2
   P(9) = 20;           %  Topt1  
   P(10) = 5;         %  Twidth1  
   P(11) = 40;         %  Topt2
   P(12) = 9.1;       %  Twidth2

%% Simulate
% Urspruenglich
% [X,Y] = ode15s(@(X,Y)Function_2(Y,P),tspan,Y0);
   
[X,Y] = ode15s(@(X,Y)Function_2(Y,P),tspan,Y0,x);
end

% Urspruenglich
% function [DYDX] = Function_2(Y,PAR)

function [DYDX] = Function_2(Y,PAR,x)

    k1        = PAR(1);            %
    k1_2    = PAR(2);             %
    k2        = PAR(3);      %
    k2_2    = PAR(4);      %
    k3        = PAR(5);      %
    k3_2     = PAR(6);     %
    k4        = PAR(7);      %
    k4_2    = PAR(8);      %

    Topt1     =   PAR(9);    %
    Twidth1  = PAR(10);     %
    Topt2     = PAR(11);     %
    Twidth2  = PAR(12);   %


    %  Urspruenglich T = 10
    T = x(1);                       % parameter temperature
   
    NR_1       = Y(1);          % NR_1
    NR_2       = Y(2);          % NR_2
    NR_3       = Y(3);          % NR_3
    NR_4       = Y(4);          % NR_4
    NR_5       = Y(5);          % NR_5
    NR_6       = Y(6);          % NR_6
    NR_7       = Y(7);          % NR_7
    NR_8       = Y(8);          % NR_8
    NR_9       = Y(9);          % NR_9
    NR_10     = Y(10);        % NR_10

%Urspruenglich    
%     kT1     =   k1*exp(-(x(1)-Topt1)^2/(2*(Twidth1))^2);
%     kT1_2   =   k1_2*exp(-(x(1)-Topt1)^2/(2*(Twidth1))^2);
%     kT2     =   k2*exp(-(x(1)-Topt1)^2/(2*(Twidth1))^2);  
%     kT2_2   =   k2_2*exp(-(x(1)-Topt1)^2/(2*(Twidth1))^2);
%     kT3     =   k3*exp(-(x(1)-Topt2)^2/(2*(Twidth2))^2);
%     kT3_2   =   k3_2*exp(-(x(1)-Topt2)^2/(2*(Twidth2))^2);
%     kT4     =   k4*exp(-(x(1)-Topt2)^2/(2*(Twidth2))^2);
%     kT4_2   =   k4_2*exp(-(x(1)-Topt2)^2/(2*(Twidth2))^2);


% Angepasst T --> x(1)
    kT1      =   k1*exp(-(x(1)-Topt1)^2/(2*(Twidth1))^2);
    kT1_2   =   k1_2*exp(-(x(1)-Topt1)^2/(2*(Twidth1))^2);
    kT2      =   k2*exp(-(x(1)-Topt1)^2/(2*(Twidth1))^2);  
    kT2_2   =   k2_2*exp(-(x(1)-Topt1)^2/(2*(Twidth1))^2);
    kT3      =   k3*exp(-(x(1)-Topt2)^2/(2*(Twidth2))^2);
    kT3_2   =   k3_2*exp(-(x(1)-Topt2)^2/(2*(Twidth2))^2);
    kT4     =   k4*exp(-(x(1)-Topt2)^2/(2*(Twidth2))^2);
    kT4_2   =   k4_2*exp(-(x(1)-Topt2)^2/(2*(Twidth2))^2);
   
    %
    r1      = kT1*NR_1*NR_3*NR_5;  
    r1_2    = kT1_2*NR_4;
    r2      = kT2*NR_4;  
    r2_2    = kT2_2*NR_2*NR_3*NR_6;    
    r3      = kT3*NR_8*NR_9*NR_6;
    r3_2    = kT3_2*NR_10;
    r4      = kT4*NR_10;
    r4_2    = kT4_2*NR_7*NR_9*NR_5;
   
    %
    d_NR_1     = - r1 + r1_2;                      
    d_NR_2     = + r2 - r2_2;                      
    d_NR_3     = - r1 + r1_2 + r2 - r2_2;    
    d_NR_4     = + r1 - r1_2 - r2 + r2_2;  
    d_NR_5     = - r1 + r1_2 - r4_2 + r4;    
    d_NR_6     = + r2 - r2_2 - r3 + r3_2;  
    d_NR_7     = - r4_2 + r4;            
    d_NR_8     = + r3_2 - r3;            
    d_NR_9     = - r4_2 + r4 + r3_2 - r3;    
    d_NR_10   = + r4_2 - r4 - r3_2 + r3;  
   
  %% The ODE Vector.  
  DYDX = [
        d_NR_1;                
        d_NR_2;                
        d_NR_3;              
        d_NR_4;          
        d_NR_5;              
        d_NR_6;                
        d_NR_7;              
        d_NR_8;          
        d_NR_9;          
        d_NR_10;        
        ];
end
 


Zuletzt bearbeitet von Dreampeace am 05.03.2018, 14:34, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 18.520
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 05.03.2018, 13:46     Titel:
  Antworten mit Zitat      
Hallo,

ein Problem dürfte hier sein:

Code:
 [results, fval] =fmincon(...
    @Function_1,... % das @ fehlte


Folgendes könnte auch von Interesse sein:
https://www.mathworks.com/help/opti.....ifferential-equation.html

Grüße,
Harald
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2018 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.