FriconiX
Des milliers de pictogrammes gratuits dessinés avec amour!

Optimisation et recherche du minimum d'une fonction avec Matlab

Cette page est un exemple de minisation de fonction avec la fonction Matlab fminsearch. Cet exemple est composé de trois fichiers :

Minimisation d'une fonction avec MATLAB fminsearch

Script principal

%% Optimization example
% This file is the main script
% Written by Philippe Lucidarme
% https://www.lucidar.me/en/matlab/matlab-optimization-function-minimization-example/
close all;
clear all;
clc;

%% Display the function fct

figure(1);
X=[-4:0.1:4]; %% The X-axis goes from the value of -5 to +5 with a step of 0.1 (100 points)
Y=[-4:0.1:4]; %% like the X-axis
[wx,wy]=meshgrid(X,Y); %% see [MATLAB documentation][1]
% Compute each point of the mesh
for i=1:size(X,2)
    for j=1:size(Y,2)
        %Z=100.*(wy - wx.^2).^2 + (1 - wx).^2;
        Z(j,i)=fct([X(i),Y(j)]);
    end
end
% Display curb
fig=surf(wx,wy,Z); %% make a surface plot with lighting
shading interp; %% optional, try to remove it.
%     hsv        - Hue-saturation-value color map.
%     hot        - Black-red-yellow-white color map.
%     gray       - Linear gray-scale color map.
%     bone       - Gray-scale with tinge of blue color map.
%     copper     - Linear copper-tone color map.
%     pink       - Pastel shades of pink color map.
%     white      - All white color map.
%     flag       - Alternating red, white, blue, and black color map.
%     lines      - Color map with the line colors.
%     colorcube  - Enhanced color-cube color map.
%     vga        - Windows colormap for 16 colors.
%     jet        - Variant of HSV.
%     prism      - Prism color map.
%     cool       - Shades of cyan and magenta color map.
%     autumn     - Shades of red and yellow color map.
%     spring     - Shades of magenta and yellow color map.
%     winter     - Shades of blue and green color map.
%     summer     - Shades of green and yellow color map.      
colormap cool; %% here you decide the colormap: hot is the one going from white to red
view(45,65);
rotate3d;
hold on;
xlabel ('x');
ylabel ('y');
title ('Optimization');

%% Optimization

% Initial point for optimization
x0 = [0,0];

% Set parameters
% optimplotfval, display the function evaluation
% iter, display algorithm status a each interation
% Call outfun at each iteration (for display)
options = optimset('PlotFcns',@optimplotfval,'Display','iter','OutputFcn', @outfun);
% Optimization algorithm
[x,FVAL,EXITFLAG,OUTPUT] = fminsearch(@fct,x0,options);

%% Display results

FVAL
OUTPUT
x
figure(1);
plot3 (x(1),x(2),fct(x),'or','MarkerSize',10,'LineWidth',5);

Fonction à optimisez

Vous pouvez décommenter les fonctions alternatives ou écrire votre propre fonction.

function y = fct( x )
% fct  function to minimize
%   x = [x,y] input vector
%   y = function output (scalar)
% Written by Philippe Lucidarme
% http://www.lucidarme.me

% Rosenbrock's function
%y = 100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;

%y = (x(1)-4).^2 .* (x(2)-1.2).^2;

y = sinc(x(1)).*sinc(0.3*x(2));

end

Fonction appelée à chaque itération

Cette fonction est appelée à chaque itération. Ici, elle affiche les points de recherche sur la figure.

function stop = outfun(x, optimValues, state)
% fct  this function is called at each step of the optimization process
%   x :             the point computed by the algorithm at the current iteration.
%   optimValues :   is a structure containing data from the current iteration.
%   state :         current state of the algorithm.
% Written by Philippe Lucidarme
% http://www.lucidarme.me

figure (1);
plot3 (x(1),x(2),optimValues.fval,'.k','MarkerSize',10);
stop=false;

Voir aussi


Dernière mise à jour : 24/05/2021