FB/AT 4-jan-2006


Matlab - fminsearch


Matlabfunktionen fminsearch används för att söka lokala minima för en funktion med flera variabler. Nedan visas exempel 4.9 i AT-kompendiet löst under antagande att gasen är ideal med konstant cp.

En fil kallad compressorpower.m (visad nedan) innehåller en funktion med samma namn som beräknar den axeleffekt som behövs när tre kompressorer med mellankylning komprimerar gasen. Funktionen fminsearch kallar på denna funktion när den minimerar kompressoreffekten i avseende på de gastrycket mellan kompressorerna.


>> p = fminsearch('compressorpower',[300,1500])

p =

   1.0e+03 *

    0.3893    1.5155

Svaret är p2 = 389,3 kPa och p2 = 1515,5 kPa. Värdena 300 och 1500 som ges till fminsearch är startgissningar på p1 och p2.


compressor.m ser ut som följer

% compressorpower.m
% Axeleffekt som krävs för kompression av metangas i tre steg
% med mellankylning till inloppstemperaturen som funktion av 
% trycket mellan kompressorstegen.

function P = compressorpower (p)

p0 = 100;   % inloppstryck (kPa)
p1 = p(1);  % mellantryck  (kPa)
p2 = p(2);  % mellantryck  (kPa)
p3 = 5900;  % sluttryck    (kPa)

T0 = 25 + 273.15;  % temperatur in, ut och mellan kompressorer (K)

V_punkt = 300;     % volymström gas in till kompressorn (m^3/h)
R = 8.3143;        % gaskonstanten (kJ/kmol K)
M = 16;            % gasens molär massa (kg/kmol)
Cp = 39;           % gasens molära entalpi (kJ/kmol K)
eta_ad = 0.8;      % kompressorernas adiabatiska verkningsgrad
eta_mek = 0.98;    % kompressoerenas mekaniska verkningsgrad

cp = Cp/M;         % gasens specifika enalpi (kJ/kg K)

% massaström gas (kg/s)
m_punkt = p0*V_punkt*M/R/T0/3600;

% axeleffekt till kompressorer (kW)
P = (p1/p0)^(R/cp/M);
P = P + (p2/p1)^(R/cp/M);
P = P + (p3/p2)^(R/cp/M);
P = m_punkt*cp*T0/eta_ad/eta_mek*(P - 3);

matlabs hjälp för användning av fminsearch

>> help fminsearch

 FMINSEARCH Multidimensional unconstrained nonlinear minimization (Nelder-Mead).
    X = FMINSEARCH(FUN,X0) starts at X0 and finds a local minimizer X of the
    function FUN. FUN accepts input X and returns a scalar function value 
    F evaluated at X. X0 can be a scalar, vector or matrix. 
 
    X = FMINSEARCH(FUN,X0,OPTIONS)  minimizes with the default optimization
    parameters replaced by values in the structure OPTIONS, created
    with the OPTIMSET function.  See OPTIMSET for details.  FMINSEARCH uses
    these options: Display, TolX, TolFun, MaxFunEvals, and MaxIter. 
 
    X = FMINSEARCH(FUN,X0,OPTIONS,P1,P2,...) provides for additional
    arguments which are passed to the objective function, F=feval(FUN,X,P1,P2,...).
    Pass an empty matrix for OPTIONS to use the default values.
    (Use OPTIONS = [] as a place holder if no options are set.)
 
    [X,FVAL]= FMINSEARCH(...) returns the value of the objective function,
    described in FUN, at X.
 
    [X,FVAL,EXITFLAG] = FMINSEARCH(...) returns a string EXITFLAG that 
    describes the exit condition of FMINSEARCH.  
    If EXITFLAG is:
      1 then FMINSEARCH converged with a solution X.
      0 then the maximum number of iterations was reached.
    
    [X,FVAL,EXITFLAG,OUTPUT] = FMINSEARCH(...) returns a structure
    OUTPUT with the number of iterations taken in OUTPUT.iterations.
 
    Examples
      FUN can be specified using @:
         X = fminsearch(@sin,3)
      finds a minimum of the SIN function near 3.
      In this case, SIN is a function that returns a scalar function value 
      SIN evaluated at X.
 
      FUN can also be an inline object:
         X = fminsearch(inline('norm(x)'),[1;2;3])
      returns a minimum near [0;0;0].
 
    FMINSEARCH uses the Nelder-Mead simplex (direct search) method.
 
    See also OPTIMSET, FMINBND, @, INLINE.