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:
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
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


0