How to solve this problem? Error using == Quadratic constraints not supported

10 次查看(过去 30 天)
Hi everyone
I have a optimazation problem using "optimproblem". The problem is constraint. The constraint I need is x*x + y*y ==1.
x = optimvar('x');
y = optimvar('y');
prob = optimproblem;
prob.Objective = (((x*((K*x)+(K*y)))+(y*((K*x)+(K*y)))) - ((2*F*x))+((2*F*y)));
prob.Constraints.cons1 = x*x + y*y == 1;
sol = solve(prob);
The error messages as follows
Error using ==
Quadratic constraints not supported.
error in ..... (Line 237)
prob.Constraints.cons1=x*x + y*y ==1;
could you help me to fix this problem?
Thanks! Intho

采纳的回答

Abdolkarim Mohammadi
编辑:Abdolkarim Mohammadi 2020-9-17
QP = Quadradic Programming = Quadradic objective function and linear constraints.
QCQP = Quadratically Constrained Quadratic Programming = Quadradic objective function and quadradic constraints.
quadprog() solves QP problems, but you are defining a QCQP problem. QCQP can be solved using the combination of quadprog() and fmincon() as described in the following:

更多回答(1 个)

Walter Roberson
Walter Roberson 2020-9-19
x*x + y*y == 1
Reduce the number of variables by replacing y with +/- sqrt(1-x^2) . Run twice, once with y being the positive root, and once with y being the negative root, and choose the best of the two.
If K and F are independent of x and y, then you can use calculus: differentiate with respect to x and solve for the zeros.
The roots for the + and - branch come out nearly exactly the same. Both of the branches have roots
(-F +/- sqrt(-F^2 + 2*K^2))/(2*K)
The + branch has root -1/sqrt(2) and the - branch has root +1/sqrt(2)
You would want to verify that these roots are indeed minima and not maxima.

类别

Help CenterFile Exchange 中查找有关 Quadratic Programming and Cone Programming 的更多信息

产品


版本

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by