/* minimize x1^2 + (1/3)x2^2 subject to -x1 <= 0 -x2 <= 0 -x1 -x2 +1 = 0 answer: (x1,x2) = (1/4,3/4) f(x1,x2)=1/4 */ #include #include #include #include "opt.h" #define Debug 0 #define Static static Static dbl obj(int n, dbl *x) { dbl x1, x2; x1 = x[0]; x2 = x[1]; return x1*x1 + x2*x2/3.00; } Static dbl *ineq(int n, dbl *x, int m, dbl *d) { dbl x1, x2; x1 = x[0]; x2 = x[1]; d[0] = -x1; d[1] = -x2; } Static dbl *cond(int n, dbl *x, int l, dbl *d) { dbl x1, x2; x1 = x[0]; x2 = x[1]; d[0] = - x1 - x2 + 1; } #define NVAR 2 #define NINQ 2 #define NCND 1 main() { dbl x[NVAR], y; dbl length = 1.00; enum status stat; x[0] = 100.00001; x[1] = 100.00001; matrixprintformat(" %l20.15f "); MultiplierMethodSimplexSetConsts(1000, 1.0e-20); stat = MultiplierMethodSimplex(NVAR, obj, NINQ, ineq, NCND, cond, x, length, 100, 1.0e-4); if (stat == success) { fprintf(stderr, "----- solution -----\n"); vectorfprint(stderr, NVAR, x); } else { fprintf(stderr, "status = %d\n", stat); } }