En aquest tema, explorarem les tècniques d'optimització en MATLAB, que són fonamentals per resoldre problemes en els quals es busca minimitzar o maximitzar una funció objectiu subjecta a certes restriccions. Aquestes tècniques són àmpliament utilitzades en camps com l'enginyeria, l'economia, la investigació operativa i la ciència de dades.
Objectius d'Aprenentatge
Al final d'aquest tema, hauràs de ser capaç de:
- Comprendre els conceptes bàsics d'optimització.
- Utilitzar funcions d'optimització en MATLAB.
- Aplicar tècniques d'optimització a problemes pràctics.
- Interpretar els resultats obtinguts de les funcions d'optimització.
- Introducció a l'Optimització
Conceptes Bàsics
- Funció Objectiu: La funció que es vol minimitzar o maximitzar.
- Variables de Decisió: Les variables que es poden ajustar per optimitzar la funció objectiu.
- Restriccions: Condicions que les variables de decisió han de complir.
Tipus d'Optimització
- Optimització No Lineal: Quan la funció objectiu o les restriccions no són lineals.
- Optimització Lineal: Quan tant la funció objectiu com les restriccions són lineals.
- Optimització Conjunta: Quan es vol optimitzar més d'una funció objectiu simultàniament.
- Funcions d'Optimització en MATLAB
MATLAB ofereix diverses funcions per a l'optimització. A continuació, es presenten algunes de les més utilitzades:
fminunc
Optimització no restringida per a funcions no lineals.
% Definició de la funció objectiu fun = @(x) x(1)^2 + x(2)^2; % Punt inicial x0 = [1, 2]; % Crida a la funció d'optimització [x, fval] = fminunc(fun, x0); % Resultats disp(['Punt òptim: ', num2str(x)]); disp(['Valor de la funció objectiu: ', num2str(fval)]);
fmincon
Optimització restringida per a funcions no lineals.
% Definició de la funció objectiu fun = @(x) x(1)^2 + x(2)^2; % Punt inicial x0 = [1, 2]; % Restriccions lineals A = [1, 1]; b = 1; % Crida a la funció d'optimització [x, fval] = fmincon(fun, x0, A, b); % Resultats disp(['Punt òptim: ', num2str(x)]); disp(['Valor de la funció objectiu: ', num2str(fval)]);
linprog
Optimització lineal.
% Coeficients de la funció objectiu f = [-1, -2]; % Restriccions lineals A = [1, 1; -1, 2; 2, 1]; b = [2; 2; 3]; % Crida a la funció d'optimització [x, fval] = linprog(f, A, b); % Resultats disp(['Punt òptim: ', num2str(x)]); disp(['Valor de la funció objectiu: ', num2str(fval)]);
- Aplicació Pràctica
Exemple: Optimització d'una Funció Quadràtica
Suposem que volem minimitzar la funció \( f(x) = x_1^2 + x_2^2 \) subjecta a la restricció \( x_1 + x_2 \leq 1 \).
% Definició de la funció objectiu fun = @(x) x(1)^2 + x(2)^2; % Punt inicial x0 = [0.5, 0.5]; % Restriccions lineals A = [1, 1]; b = 1; % Crida a la funció d'optimització [x, fval] = fmincon(fun, x0, A, b); % Resultats disp(['Punt òptim: ', num2str(x)]); disp(['Valor de la funció objectiu: ', num2str(fval)]);
Exercici Pràctic
Minimitza la funció \( f(x) = (x_1 - 1)^2 + (x_2 - 2)^2 \) subjecta a les restriccions \( x_1 + x_2 \leq 3 \) i \( x_1 \geq 0 \).
Solució
% Definició de la funció objectiu fun = @(x) (x(1) - 1)^2 + (x(2) - 2)^2; % Punt inicial x0 = [0, 0]; % Restriccions lineals A = [1, 1; -1, 0]; b = [3; 0]; % Crida a la funció d'optimització [x, fval] = fmincon(fun, x0, A, b); % Resultats disp(['Punt òptim: ', num2str(x)]); disp(['Valor de la funció objectiu: ', num2str(fval)]);
- Errors Comuns i Consells
Errors Comuns
- Punts Inicials Poc Adequats: Triar punts inicials lluny de la solució pot dificultar la convergència.
- Restriccions Mal Definides: Assegura't que les restriccions estiguin ben formulades.
- Funcions Objectiu No Suavitzades: Les funcions amb discontinuïtats poden causar problemes en l'optimització.
Consells
- Normalitza les Variables: Això pot ajudar a millorar la convergència.
- Utilitza Opcions d'Optimització: MATLAB permet ajustar opcions com la tolerància i el nombre màxim d'iteracions.
Conclusió
En aquest tema, hem explorat les tècniques d'optimització en MATLAB, incloent-hi les funcions més utilitzades i com aplicar-les a problemes pràctics. Amb aquesta base, estaràs preparat per abordar problemes d'optimització més complexos i interpretar els resultats de manera efectiva.
Curs de Programació en MATLAB
Mòdul 1: Introducció a MATLAB
- Començant amb MATLAB
- Interfície i Entorn de MATLAB
- Comandes i Sintaxi Bàsiques
- Variables i Tipus de Dades
- Operacions i Funcions Bàsiques
Mòdul 2: Vectors i Matrius
- Creació de Vectors i Matrius
- Operacions amb Matrius
- Indexació i Segmentació
- Funcions de Matrius
- Àlgebra Lineal en MATLAB
Mòdul 3: Estructures de Programació
- Flux de Control: if, else, switch
- Bucles: for, while
- Funcions: Definició i Abast
- Scripts vs. Funcions
- Depuració i Gestió d'Errors
Mòdul 4: Visualització de Dades
- Conceptes Bàsics de Gràfics
- Gràfics 2D
- Gràfics 3D
- Personalització de Gràfics
- Tècniques Avançades de Gràfics
Mòdul 5: Anàlisi de Dades i Estadística
- Importació i Exportació de Dades
- Estadístiques Descriptives
- Preprocessament de Dades
- Anàlisi de Regressió
- Proves Estadístiques
Mòdul 6: Temes Avançats
- Entrada/Sortida de Fitxers
- Gestió de Grans Conjunts de Dades
- Tècniques d'Optimització
- Conceptes Bàsics de Simulink
- Computació Paral·lela