Matlab - Optimización de funciones.

 
Vista:

Optimización de funciones.

Publicado por MiguelMC (1 intervención) el 27/07/2015 14:33:22
Buenas,

Necesito ayuda con la optimización (minimización) de una función en matlab.

La función es la siguiente:

1
func=@(N,Sigma,x) sum((log(N)-x(1)-x(2)./(log(Sigma)-x(3))).^2);

Donde N y Sigma son dos vectores de datos conocidos y la variable a optimizar es "x" (x(1), x(2), x(3) para ser más preciso). Hasta ahora lo he intentado con las siguientes funciones:
---------------------------------------------------------------------------------------------------
func=@(N,Sigma,x) sum((log(N)-x(1)-x(2)./(log(Sigma)-x(3))).^2);
x0=[-57.4174,142.27,−2.62708];
options=optimset('LargeScale','off');%,'maxFunEvals',1000);
ub=[inf, maxNN, maxCC];
[xsol]=fmincon(@(x) func(N_exp,G_exp,x),x0,[],[],[],[],[],ub,[],options);
---------------------------------------------------------------------------------------------------
func=@(N,Sigma,x) sum((log(N)-x(1)-x(2)./(log(Sigma)-x(3))).^2);
x0=[-57.4174,142.27,−2.62708];
options=optimset('MaxFunEvals',5000,'MaxIter',1000,'TolX', 1e-5,'Disp','off');
minimo=[-1e-100, -Inf, -1e-100]; %B,C,K
maximo=[min(log(N_exp))*0.99, min(log(G_exp))*0.9999, Inf];
[xsol,fmin]=lsqnonlin(@(x) func(N_exp,G_exp,x),x0,minimo,maximo,options);
------------------------------------------------------------------------------------------------------------
func=@(N,Sigma,x) sum((log(N)-x(1)-x(2)./(log(Sigma)-x(3))).^2);
options=optimset('MaxFunEvals',5000,'MaxIter',1000,'TolX', 1e-5,'Disp','off');
minimo=[-1e-100, -Inf, -1e-100]; %B,C,K
maximo=[min(log(N_exp))*0.99, min(log(G_exp))*0.9999, Inf];
[xsol]=fminsearch(@(x) func(N_exp,G_exp,x),minimo,maximo)
------------------------------------------------------------------------------------------------------------

Mis datos son los siguientes:

N(1,:)=[ 0.257 0.217 0.206 0.203 0.143 0.123 0.120 0.109 0.105 0.085 0.083 0.076 0.074 0.072 0.037];
N(2,:)=[ 1.129 0.680 0.540 0.509 0.457 0.451 0.356 0.342 0.311 0.295 0.257 0.252 0.226 0.216 0.201];
N(3,:)=[ 5.598 5.560 4.820 4.110 3.847 3.590 3.330 2.903 2.590 2.410 2.400 1.492 1.460 1.258 1.246];
N(4,:)=[ 67.340 50.090 48.420 36.350 27.940 26.260 24.900 20.300 18.620 17.280 16.190 15.580 12.600 9.930 6.710];
N(5,:)=[ 11748 11748 3295 1459 1400 1330 1250 1242 896 659 486 367 340 280 103];

N_exp=N(:);

S(1,:)=ones(1,length(N(1,:)))*0.95;
S(2,:)=ones(1,length(N(2,:)))*0.90;
S(3,:)=ones(1,length(N(3,:)))*0.825;
S(4,:)=ones(1,length(N(4,:)))*0.75;
S(5,:)=ones(1,length(N(5,:)))*0.675;

G_exp=S(:);

Y se que la solución debe ser la siguiente, puesto que estoy trabajando con un ejemplo de un libro del que conozco la solución.

x0_obj=[-20.7843 19.731 -1.10607]

Pero todavía no he conseguido obtenerla. ¿Alguno de vosotros sería capaz de llegar a la solución correcta desde el punto de partida x0 dado?

Gracias por vuestra ayuda de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder