Подход, основанный на проблеме к оптимизации включает переменные оптимизации создания и выражение цели и ограничений в терминах тех переменных.
Рациональная функция является частным полиномов. Когда целевая функция является рациональной функцией переменных оптимизации или другой поддерживаемой функции, можно создать выражение целевой функции непосредственно из переменных. В отличие от этого, когда ваша целевая функция не является поддерживаемой функцией, необходимо создать функцию MATLAB®, которая представляет цель, и затем преобразуйте функцию в выражение при помощи fcn2optimexpr
. Смотрите поддерживаемые операции для переменных и выражений оптимизации и преобразуйте нелинейную функцию в выражение оптимизации.
Например, запишите целевую функцию
в терминах двух переменных x
оптимизации и
y
.
x = optimvar('x'); y = optimvar('y'); f = (x-y)^2/(4+(x+y)^4)*(x+y^2)/(1+y^2);
Чтобы найти минимум этой целевой функции, создайте задачу оптимизации с f
как цель, набор начальная точка и вызов solve
.
prob = optimproblem('Objective',f);
x0.x = -1;
x0.y = 1;
[sol,fval,exitflag,output] = solve(prob,x0)
Solving problem using fminunc. Local minimum found. Optimization completed because the size of the gradient is less than the value of the optimality tolerance.
sol = struct with fields:
x: -2.1423
y: 0.7937
fval = -1.0945
exitflag = OptimalSolution
output = struct with fields:
iterations: 9
funcCount: 10
stepsize: 1.7073e-06
lssteplength: 1
firstorderopt: 1.4999e-07
algorithm: 'quasi-newton'
message: '...'
objectivederivative: "reverse-AD"
solver: 'fminunc'
Выходной флаг показывает, что решение, о котором сообщают, является локальным минимумом. Структура output показывает, что решатель взял всего 30 вычислений функции, чтобы достигнуть минимума.