Вам нужно использовать fcn2optimexpr из-за cos (sigma) в confn2. Начиная с выпуска R2019a, для выражений optimvars разрешены только отношения полиномов.
k1 = optimvar('k1', 'LowerBound', -3, 'UpperBound', 3);
k2 = optimvar('k2', 'LowerBound', -3, 'UpperBound', 3);
f = optimvar('f', 'LowerBound', -3, 'UpperBound', 3);
sigma = optimvar('sigma', 'LowerBound', 0, 'UpperBound', 6.28318530718);
obj = fcn2optimexpr(@eq1, k1, k2, f, sigma);
c2 = fcn2optimexpr(@conexpr2, k1, k2, f, sigma);
confn1 = obj == 0;
confn2 = c2 <= 0;
prob = optimproblem('Objective', obj);
prob.Constraints.confn1 = confn1;
prob.Constraints.confn2 = confn2;
k0.k1 = 0;
k0.k2 = 0;
k0.f = 0;
k0.sigma = 0;
options = optimoptions(prob,'Display','iter', 'ConstraintTolerance', 1e-12);
[sol, fval, exitflag, output] = solve(prob, k0, 'Options',options)
objval = evaluate(obj,sol)
c2val = evaluate(c2,sol)
function f1 = eq1(k1, k2, f, sigma)
f1 = 0.01308996938995749 - 0.3642198710296203*k1 - 0.6784053942919677*k2 + 0.37064001373367156*f*sin((1/2)*(-0.372795 + 2*sigma));
end
function c2 = conexpr2(k1, k2, f, sigma)
c2 = -0.9313129901097519*k1 - 1.4693755421886672*k2 - 0.18532000686683578*f*cos((1/2)*(-0.372795 + 2*sigma)) + 0.9826782255931369*f*sin((1/2)*(-0.372795 + 2*sigma));
end
Как заметил @rinkert, вы используете цель дважды. Нет необходимости иметь объективную функцию. Вы можете столкнуться с проблемой оптимизации только с ограничениями.
k1 = optimvar('k1', 'LowerBound', -3, 'UpperBound', 3);
k2 = optimvar('k2', 'LowerBound', -3, 'UpperBound', 3);
f = optimvar('f', 'LowerBound', -3, 'UpperBound', 3);
sigma = optimvar('sigma', 'LowerBound', 0, 'UpperBound', 6.28318530718);
c1 = fcn2optimexpr(@eq1, k1, k2, f, sigma);
c2 = fcn2optimexpr(@conexpr2, k1, k2, f, sigma);
confn1 = c1 == 0;
confn2 = c2 <= 0;
prob = optimproblem();
prob.Constraints.confn1 = confn1;
prob.Constraints.confn2 = confn2;
k0.k1 = 0;
k0.k2 = 0;
k0.f = 0;
k0.sigma = 0;
options = optimoptions(prob,'Display','iter', 'ConstraintTolerance', 1e-12);
[sol, fval, exitflag, output] = solve(prob, k0, 'Options',options)
c1val = evaluate(c1,sol)
c2val = evaluate(c2,sol)
function f1 = eq1(k1, k2, f, sigma)
f1 = 0.01308996938995749 - 0.3642198710296203*k1 - 0.6784053942919677*k2 + 0.37064001373367156*f*sin((1/2)*(-0.372795 + 2*sigma));
end
function c2 = conexpr2(k1, k2, f, sigma)
c2 = -0.9313129901097519*k1 - 1.4693755421886672*k2 - 0.18532000686683578*f*cos((1/2)*(-0.372795 + 2*sigma)) + 0.9826782255931369*f*sin((1/2)*(-0.372795 + 2*sigma));
end