Hi ! I would like to minimize a linear function F(x)=f1(x)+f2(x)+...+fn(x)(each of f(x) is linear) under linear constraintes gi(x)=bi i=1,..m and nonlinear constraint norm(x)=1 where x is a vector with k-components and norm(x)^2=x(1)^2+...+x(k)^2 is the L-2 norm I don't know which function in matlab I can use for that program. I can't use [fmincon] since fmincon requires the objective function F(x) to be twice differentiable to compute the hessian, neither I can't use linear programing optimization since I have a non linear constraint. Can anyone help me please. Now I use the 2008b matlab version, I don't know if the 2011 version of matlab can do the job [with fmincon]
Any comment will be very helpfull

1 Kommentar

Paresh kumar Panigrahi
Paresh kumar Panigrahi am 7 Apr. 2021
how to calculate weight optimal solution given 10 asset

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Andrew Newell
Andrew Newell am 18 Jan. 2012

0 Stimmen

A linear function is twice differentiable - the second derivative is zero! So go ahead and use fmincon.

Weitere Antworten (2)

Teja Muppirala
Teja Muppirala am 18 Jan. 2012

0 Stimmen

This type of problem can be easily set up in FMINCON, by employing the nonlinear constraint input parameter.
As a concrete example
Minimize: -2*x1 + 5*x2 + 10*x3
Subject to linear constraint: x1+x2+x3 = 1
And nonlinear constraint: norm([x1 x2 x3]) = 1
This can be solved by:
f = [-2; 5; 10];
x0 = [0; 0; 0];
Aeq = [1 1 1];
beq = 1;
nlcon = @(x) deal([], norm(x)-1)
fmincon(@(x) f'*x, x0, [],[],Aeq,beq,[],[],nlcon)
Which yields:
ans =
0.9400
0.2695
-0.2094
Which appears to be a valid solution.
Vincent
Vincent am 18 Jan. 2012

0 Stimmen

Thanks to both of you Teja and Andrew! Before sending my first message I tried to resolve this problem that I know the result
min f(x)=x(1)+x(2)
subject to :
-1<=x(i)<=1 for i=1,2
x(1)^2+x(2)^2=1
I know that the answer is x=(0,1) or x=(1,0) and fval=1 When I use [Fmincon] i get this result only for x0=[1,0] or x0=[0,1]. For any other starting point x0 like x0=[1,1] or x0=[0.5, 0.5] the solution I get is x=(0.74, 0.74) and fval=1.4 that is not the right answer.
So the solution is very sensitive to how far the starting point is from the right solution , that is my problem

Community Treasure Hunt

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

Start Hunting!

Translated by