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.