fmin additional variables ( are vector)

2 Ansichten (letzte 30 Tage)
alejandro lopez
alejandro lopez am 17 Mai 2020
Kommentiert: alejandro lopez am 19 Mai 2020
Hello
I am trying to use fmincon but add extra parameters to the function. The function is
function sw = opt(x,g_14,k_4)
sw = ((log(1+x(1))*log(1+x(1)))+log(1+x(1)).*g_14 + k_4)/(1.6806) + ((log(1+x(2))*log(1+x(2))).*g_14 + ((log(1+x(3))*log(1+x(3))).*g_14 ;
end
where g_14 is a numeric vector that change. The system is
x0 = [0,0,0];
A = [1 -1 0;
0 1 -1;
1 0 -1];
b = [0 0 0];
Aeq = [176.9880 179.0538 296.3700];
beq = [1225];
lb = [0 0 0];
up = [Inf Inf Inf];
And finally; [X fval exitflag output lambda grad hessian] = fmincon(@(x) fun(x,g_14,k_4) , x0, A, b, Aeq, beq,lb, up);
When i run the code , MATLAB returns : Supplied objective function must return a scalar value.
So, I try change objetive function and solution by
  • [X fval exitflag output lambda grad hessian] = fmincon(fun, x0, A, b, Aeq, beq,lb, up);
  • function sw = opt(x)
sw = ((log(1+x(1))*log(1+x(1)))+log(1+x(1)).*g_14 + k_4)/(1.6806) ((log(1+x(2))*log(1+x(2))).*g_14 + ((log(1+x(3))*log(1+x(3))).*g_14 ;;
end
So in this case , the problem is ; Undefined function or variable 'g_14'. , even though I had already defined them on the outside
Thanks !!

Akzeptierte Antwort

Thiago Henrique Gomes Lobato
Your first attempt was right
[X fval exitflag output lambda grad hessian] = fmincon(@(x) fun(x,g_14,k_4) , x0, A, b, Aeq, beq,lb, up);
The problem is that your objective function returns a vector, while fmincon expects a scalar to minimize. Either you have some problem with your error definition or you want to get a least squares solution. If the second case, just do:
sw = ((log(1+x(1))*log(1+x(1)))+log(1+x(1)).*g_14 + k_4)/(1.6806) + ((log(1+x(2))*log(1+x(2))).*g_14 + ((log(1+x(3))*log(1+x(3))).*g_14 ;
sw = norm(sw);
  1 Kommentar
alejandro lopez
alejandro lopez am 19 Mai 2020
Hi Thiago, I'm very grateful for your answer.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by