Problema con la funcion fmincon
Publicado por mark (1 intervención) el 22/05/2020 13:59:31
Hola,
Estoy intentando minimizar una funcion no lineal (myfun_ro1_canonica2_v3) con restricciones mediante el comando fmincon pero me sale error,pego el codigo por si alguien puede ayudarme. Gracias!
Estoy intentando minimizar una funcion no lineal (myfun_ro1_canonica2_v3) con restricciones mediante el comando fmincon pero me sale error,pego el codigo por si alguien puede ayudarme. Gracias!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
myfun_ro1_canonica2_v3 <- function(x,par) { ## funcion del momento 1 en forma canonica
# Valores empiricos:
tau = par[1]; ro1emp = par[2]; mu1emp = par[3]; mu2emp = par[4]; mu3emp = par[5];
f = (1/x[3]/x[1]*x[2]*x[4]*(x[3]^3*x[1]+2*x[4]*x[3]^2*x[1]+x[4]^2*x[3]*x[1]-3*x[1]*x[3]^2*x[2]-5*x[1]*x[3]*x[2]*x[4]-3*x[1]^2*x[3]*x[4]+x[3]^3*x[2]+x[1]^3*x[4]-x[4]^2*x[1]^2+2*x[2]*x[1]^2*x[4]-2*x[2]*x[4]^2*x[1]-2*x[2]^2*x[4]*x[3]-x[2]^2*x[3]^2+x[4]^2*x[3]*x[2]+2*x[4]*x[3]^2*x[2]+x[2]^2*x[1]*x[3]+2*x[2]*x[1]^2*x[3]+x[2]^2*x[1]*x[4]+x[1]^3*x[3]-2*x[1]^2*x[3]^2-x[2]^2*x[4]^2)/(2*x[4]*x[3]^2*x[2]+2*x[4]^2*x[3]*x[2]+x[4]^2*x[3]*x[1]-2*x[2]^2*x[4]*x[3]-2*x[2]^2*x[4]^2-2*x[2]*x[4]^2*x[1]+x[2]^2*x[1]*x[3]+2*x[2]^2*x[1]*x[4]+2*x[2]*x[1]^2*x[4]-2*x[1]*x[3]*x[2]*x[4])-ro1emp)^2 + tau*(((-(x[4]+x[2])/(x[3]*x[2]+x[2]*x[4]+x[4]*x[1])-mu1emp)/mu1emp)^2 + ((2/x[1]/x[3]*(x[4]*x[3]-x[2]*x[4]+x[2]*x[1])/(x[3]*x[2]+x[2]*x[4]+x[4]*x[1])-mu2emp)/mu2emp)^2 + ((-6/x[1]^2/x[3]^2*(x[4]*x[3]^2-x[2]*x[4]*x[3]-x[2]*x[4]*x[1]+x[2]*x[1]^2)/(x[3]*x[2]+x[2]*x[4]+x[4]*x[1])-mu3emp)/mu3emp)^2);
}
# datos de entrada
tau=1;
ro1emp=0.1660;
mu1emp=4;
mu2emp=28.4250;
mu3emp=255.2875;
par=c(tau,ro1emp,mu1emp,mu2emp,mu3emp)
# Matriz de restricciones
A=matrix(c(1,1,0,0,0,0,1,1),nrow=2,ncol=4,byrow= TRUE);
b=c(0,0);
num=100; # numero de puntos iniciales aleatorios
R=matrix(rep(0), nrow=num, ncol=14)
for (i in 1:num){
x = -runif(1,0,100);
y = runif(1,0,-x);
u = -runif(1,0,100);
v = runif(1,0,-u);
x0=c(x,y,u,v);
# Acotaciones de las variables
lb=matrix(c(-1000,0.001,-1000,0.0001),nrow=4,ncol=1,byrow=TRUE)
epsilon=2.225e-308;
ub=matrix(c(-epsilon,Inf,-epsilon,Inf),nrow=4,ncol=1,byrow=TRUE)
library(pracma)
library(NlcOptim)
library(MASS)
# Resolvemos el primer problema de optimizacion
res=fmincon(x0,myfun_ro1_canonica2_v3(x,par),A,b,lb,ub)
}
Valora esta pregunta


0