Квадратичное программирование
Решатель для квадратичных целевых функций с линейными ограничениями.
quadprog находит минимум для проблемы заданным
H, A и Aeq являются матрицами, и f, b, beq, lb, ub, и x является векторами.
Можно передать f, lb и ub как векторы или матрицы; смотрите Матричные аргументы.
quadprog
применяется только к основанному на решателе подходу. Для обсуждения двух подходов оптимизации смотрите, Сначала Выбирают Problem-Based or Solver-Based Approach.
решает предыдущую задачу, удовлетворяющую дополнительным ограничениям x
= quadprog(H
,f
,A
,b
,Aeq
,beq
,lb
,ub
)lb
≤ x
≤ ub
. Входные параметры lb
и ub
векторы, удваивается, и ограничения содержат для каждого x
компонент. Если никакие равенства не существуют, устанавливают Aeq = []
и beq = []
.
Если заданные входные границы для проблемы противоречивы, выход x
x0
и выход fval
[]
.
quadprog
компоненты сброса x0
это нарушает границы lb
≤ x
≤ ub
к внутренней части поля, заданного границами. quadprog
не изменяет компоненты, которые уважают границы.
возвращает минимум для x
= quadprog(problem
)problem
, где problem
структура, описанная в Описании. Создайте problem
путем экспорта проблемы с помощью приложения Оптимизации; смотрите Экспорт Вашей работы. В качестве альтернативы создайте problem
структура от OptimizationProblem
объект при помощи prob2struct
.
Найдите минимум
удовлетворяющее ограничениям
В quadprog
синтаксис, эта проблема состоит в том, чтобы минимизировать
,
где
подвергните линейным ограничениям.
Чтобы решить эту задачу, сначала введите содействующие матрицы.
H = [1 -1; -1 2]; f = [-2; -6]; A = [1 1; -1 2; 2 1]; b = [2; 2; 3];
Вызовите quadprog
.
[x,fval,exitflag,output,lambda] = ...
quadprog(H,f,A,b);
Minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
Исследуйте конечную точку, значение функции и выходной флаг.
x,fval,exitflag
x = 2×1
0.6667
1.3333
fval = -8.2222
exitflag = 1
Выходной флаг 1
означает, что результатом является локальный минимум. Поскольку H
положительная определенная матрица, эта проблема выпукла, таким образом, минимум является глобальным минимумом.
Подтвердите тот H
положителен определенный путем проверки его собственных значений.
eig(H)
ans = 2×1
0.3820
2.6180
Найдите минимум
подвергните ограничению
В quadprog
синтаксис, эта проблема состоит в том, чтобы минимизировать
,
где
подвергните линейному ограничению.
Чтобы решить эту задачу, сначала введите содействующие матрицы.
H = [1 -1; -1 2]; f = [-2; -6]; Aeq = [1 1]; beq = 0;
Вызовите quadprog
, ввод []
для входных параметров A
и b
.
[x,fval,exitflag,output,lambda] = ...
quadprog(H,f,[],[],Aeq,beq);
Minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
Исследуйте конечную точку, значение функции и выходной флаг.
x,fval,exitflag
x = 2×1
-0.8000
0.8000
fval = -1.6000
exitflag = 1
Выходной флаг 1
означает, что результатом является локальный минимум. Поскольку H
положительная определенная матрица, эта проблема выпукла, таким образом, минимум является глобальным минимумом.
Подтвердите тот H
положителен определенный путем проверки его собственных значений.
eig(H)
ans = 2×1
0.3820
2.6180
Найдите x, который минимизирует квадратичное выражение
где
, ,
удовлетворяющее ограничениям
, .
Чтобы решить эту задачу, сначала введите коэффициенты.
H = [1,-1,1 -1,2,-2 1,-2,4]; f = [2;-3;1]; lb = zeros(3,1); ub = ones(size(lb)); Aeq = ones(1,3); beq = 1/2;
Вызовите quadprog
, ввод []
для входных параметров A
и b
.
x = quadprog(H,f,[],[],Aeq,beq,lb,ub)
Minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 3×1
0.0000
0.5000
0.0000
Установите опции контролировать прогресс quadprog
.
options = optimoptions('quadprog','Display','iter');
Опишите задачу с квадратичные объективные и линейные ограничения неравенства.
H = [1 -1; -1 2]; f = [-2; -6]; A = [1 1; -1 2; 2 1]; b = [2; 2; 3];
Помочь записать quadprog
вызов функции, набор ненужные входные параметры к []
.
Aeq = []; beq = []; lb = []; ub = []; x0 = [];
Вызовите quadprog
решать задачу.
x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)
Iter Fval Primal Infeas Dual Infeas Complementarity 0 -8.884885e+00 3.214286e+00 1.071429e-01 1.000000e+00 1 -8.331868e+00 1.321041e-01 4.403472e-03 1.910489e-01 2 -8.212804e+00 1.676295e-03 5.587652e-05 1.009601e-02 3 -8.222204e+00 8.381476e-07 2.793826e-08 1.809485e-05 4 -8.222222e+00 3.064216e-14 1.352696e-12 7.525735e-13 Minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 2×1
0.6667
1.3333
prob2struct
Создайте problem
структура с помощью Основанного на проблеме Рабочего процесса Оптимизации. Создайте задачу оптимизации, эквивалентную Квадратичной Программе с Линейными Ограничениями.
x = optimvar('x',2); objec = x(1)^2/2 + x(2)^2 - x(1)*x(2) - 2*x(1) - 6*x(2); prob = optimproblem('Objective',objec); prob.Constraints.cons1 = sum(x) <= 2; prob.Constraints.cons2 = -x(1) + 2*x(2) <= 2; prob.Constraints.cons3 = 2*x(1) + x(2) <= 3;
Преобразуйте prob
к problem
структура.
problem = prob2struct(prob);
Решите задачу с помощью quadprog
.
[x,fval] = quadprog(problem)
Warning: Your Hessian is not symmetric. Resetting H=(H+H')/2.
Minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 2×1
0.6667
1.3333
fval = -8.2222
quadprog
Значение целевой функцииРешите квадратичную программу и возвратите и решение и значение целевой функции.
H = [1,-1,1 -1,2,-2 1,-2,4]; f = [-7;-12;-15]; A = [1,1,1]; b = 3; [x,fval] = quadprog(H,f,A,b)
Minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 3×1
-3.5714
2.9286
3.6429
fval = -47.1786
Проверяйте, что возвращенное значение целевой функции совпадает со значением, вычисленным из quadprog
определение целевой функции.
fval2 = 1/2*x'*H*x + f'*x
fval2 = -47.1786
quadprog
Процесс оптимизацииВидеть процесс оптимизации для quadprog
, установите опции показывать итеративное отображение и возвращать четыре выходных параметра. Проблема состоит в том, чтобы минимизировать
при ограничениях
,
где
, .
Введите проблемные коэффициенты.
H = [2 1 -1 1 3 1/2 -1 1/2 5]; f = [4;-7;12]; lb = zeros(3,1); ub = ones(3,1);
Установите опции отображать итеративный прогресс решателя.
options = optimoptions('quadprog','Display','iter');
Вызовите quadprog
с четырьмя выходными параметрами.
[x fval,exitflag,output] = quadprog(H,f,[],[],[],[],lb,ub,[],options)
Iter Fval Primal Infeas Dual Infeas Complementarity 0 2.691769e+01 1.582123e+00 1.712849e+01 1.680447e+00 1 -3.889430e+00 0.000000e+00 8.564246e-03 9.971731e-01 2 -5.451769e+00 0.000000e+00 4.282123e-06 2.710131e-02 3 -5.499997e+00 0.000000e+00 1.221903e-10 6.939689e-07 4 -5.500000e+00 0.000000e+00 5.842173e-14 3.469847e-10 Minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 3×1
0.0000
1.0000
0.0000
fval = -5.5000
exitflag = 1
output = struct with fields:
message: '...'
algorithm: 'interior-point-convex'
firstorderopt: 1.5921e-09
constrviolation: 0
iterations: 4
linearsolver: 'dense'
cgiterations: []
quadprog
Множители ЛагранжаРешите задачу квадратичного программирования и возвратите множители Лагранжа.
H = [1,-1,1 -1,2,-2 1,-2,4]; f = [-7;-12;-15]; A = [1,1,1]; b = 3; lb = zeros(3,1); [x,fval,exitflag,output,lambda] = quadprog(H,f,A,b,[],[],lb);
Minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
Исследуйте структуру множителя Лагранжа lambda
.
disp(lambda)
ineqlin: 12.0000 eqlin: [0x1 double] lower: [3x1 double] upper: [3x1 double]
Линейное ограничение неравенства имеет связанный множитель Лагранжа 12
.
Отобразите множители, сопоставленные с нижней границей.
disp(lambda.lower)
5.0000 0.0000 0.0000
Только первый компонент lambda.lower
имеет ненулевой множитель. Это обычно означает что только первый компонент x
в нижней границе нуля. Подтвердите путем отображения компонентов x
.
disp(x)
0.0000 1.5000 1.5000
H
— Квадратичный объективный терминКвадратичный объективный термин в виде симметричной действительной матрицы. H
представляет квадратичное в выражении 1/2*x'*H*x + f'*x
. Если H
не симметрично, quadprog
выдает предупреждение и использует симметрированную версию (H + H')/2
вместо этого.
Если квадратичный матричный H
разреженно, затем по умолчанию, 'interior-point-convex'
алгоритм использует немного отличающийся алгоритм чем тогда, когда H
является плотным. Обычно разреженный алгоритм быстрее на больших, разреженных проблемах, и плотный алгоритм быстрее на плотных или небольших проблемах. Для получения дополнительной информации смотрите LinearSolver
описание опции и выпуклый внутренней точкой quadprog Алгоритм.
Пример: [2,1;1,3]
Типы данных: double
f
— Линейный объективный терминЛинейный объективный термин в виде вектора действительных чисел. f
представляет линейный член в выражении 1/2*x'*H*x + f'*x
.
Пример: [1;3;2]
Типы данных: double
A
— Линейные ограничения неравенстваЛинейные ограничения неравенства в виде действительной матрицы. A
M
- N
матрица, где M
количество неравенств и N
количество переменных (число элементов в x0
). Для больших проблем передайте A
как разреженная матрица.
A
кодирует M
линейные неравенства
A*x <= b
,
где x
вектор-столбец N
переменные x(:)
, и b
вектор-столбец с M
элементы.
Например, чтобы задать
x 1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
введите эти ограничения:
A = [1,2;3,4;5,6]; b = [10;20;30];
Пример: Чтобы указать что x сумма компонентов к 1 или меньше, используйте A = ones(1,N)
и b = 1
.
Типы данных: double
b
— Линейные ограничения неравенстваЛинейные ограничения неравенства в виде вектора действительных чисел. b
M
- вектор элемента связан с A
матрица. Если вы передаете b
как вектор-строка, решатели внутренне преобразуют b
к вектор-столбцу b(:)
. Для больших проблем передайте b
как разреженный вектор.
b
кодирует M
линейные неравенства
A*x <= b
,
где x
вектор-столбец N
переменные x(:)
, и A
матрица размера M
- N
.
Например, чтобы задать
x 1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
введите эти ограничения:
A = [1,2;3,4;5,6]; b = [10;20;30];
Пример: Чтобы указать что x сумма компонентов к 1 или меньше, используйте A = ones(1,N)
и b = 1
.
Типы данных: double
Aeq
— Линейные ограничения равенстваЛинейные ограничения равенства в виде действительной матрицы. Aeq
Me
- N
матрица, где Me
количество равенств и N
количество переменных (число элементов в x0
). Для больших проблем передайте Aeq
как разреженная матрица.
Aeq
кодирует Me
линейные равенства
Aeq*x = beq
,
где x
вектор-столбец N
переменные x(:)
, и beq
вектор-столбец с Me
элементы.
Например, чтобы задать
x 1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x 3 = 20,
введите эти ограничения:
Aeq = [1,2,3;2,4,1]; beq = [10;20];
Пример: Чтобы указать что x сумма компонентов к 1, используйте Aeq = ones(1,N)
и beq = 1
.
Типы данных: double
beq
— Линейные ограничения равенстваЛинейные ограничения равенства в виде вектора действительных чисел. beq
Me
- вектор элемента связан с Aeq
матрица. Если вы передаете beq
как вектор-строка, решатели внутренне преобразуют beq
к вектор-столбцу beq(:)
. Для больших проблем передайте beq
как разреженный вектор.
beq
кодирует Me
линейные равенства
Aeq*x = beq
,
где x
вектор-столбец N
переменные x(:)
, и Aeq
матрица размера Me
- N
.
Например, чтобы задать
x 1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x 3 = 20,
введите эти ограничения:
Aeq = [1,2,3;2,4,1]; beq = [10;20];
Пример: Чтобы указать что x сумма компонентов к 1, используйте Aeq = ones(1,N)
и beq = 1
.
Типы данных: double
lb
— Нижние границыНижние границы в виде вектора действительных чисел или действительного массива. Если число элементов в x0
равно числу элементов в lb
, затем lb
задает это
x(i) >= lb(i)
для всех i
.
Если numel(lb) < numel(x0)
, затем lb
задает это
x(i) >= lb(i)
для 1 <= i <= numel(lb)
.
Если существует меньше элементов в lb
чем в x0
, решатели выдают предупреждение.
Пример: Чтобы указать, что все x компоненты положительны, используйте lb = zeros(size(x0))
.
Типы данных: double
ub
— Верхние границыВерхние границы в виде вектора действительных чисел или действительного массива. Если число элементов в x0
равно числу элементов в ub
, затем ub
задает это
x(i) <= ub(i)
для всех i
.
Если numel(ub) < numel(x0)
, затем ub
задает это
x(i) <= ub(i)
для 1 <= i <= numel(ub)
.
Если существует меньше элементов в ub
чем в x0
, решатели выдают предупреждение.
Пример: Чтобы указать, что все x компоненты меньше 1, используйте ub = ones(size(x0))
.
Типы данных: double
x0
— Начальная точкаНачальная точка в виде вектора действительных чисел. Длина x0
количество строк или столбцы H
.
x0
применяется к 'trust-region-reflective'
алгоритм, когда проблема только связала ограничения. x0
также применяется к 'active-set'
алгоритм.
x0
обязательный аргумент для 'active-set'
алгоритм.
Если вы не задаете x0
, quadprog
наборы все компоненты x0
к точке во внутренней части поля, заданного границами. quadprog
игнорирует x0
для 'interior-point-convex'
алгоритм и для 'trust-region-reflective'
алгоритм с ограничениями равенства.
Пример: [1;2;1]
Типы данных: double
options
— Опции оптимизацииoptimoptions
| структура, такая как optimset
возвращаетсяОпции оптимизации в виде выхода optimoptions
или структура, такая как optimset
возвращается.
Некоторые опции отсутствуют в optimoptions
отображение. Эти опции появляются курсивом в следующей таблице. Для получения дополнительной информации, Опции вида на море.
Все алгоритмы
Algorithm | Выберите алгоритм:
|
Диагностика | Отобразите диагностическую информацию о функции, которая будет минимизирована или решена. Выбором является |
Display | Level of display (см. Итеративное Отображение):
|
MaxIterations | Максимальное количество итераций позволено; положительное целое число.
Для |
OptimalityTolerance | Допуск завершения на оптимальности первого порядка; положительная скалярная величина.
Смотрите допуски и критерий остановки. Для |
StepTolerance | Допуск завершения на
Для |
'trust-region-reflective'
Алгоритм только
FunctionTolerance | Допуск завершения на значении функции; положительная скалярная величина. Значение по умолчанию зависит от проблемного типа: связано ограниченные проблемы используют Для |
| Функция умножения Гессиана в виде указателя на функцию. Для крупномасштабных структурированных проблем эта функция вычисляет матричное произведение Гессиана W = hmfun(Hinfo,Y) где Смотрите Квадратичную Минимизацию с Плотным, Структурированным Гессианом для примера, который использует эту опцию. Для |
MaxPCGIter | Максимальное количество PCG (предобусловленный метод сопряженных градиентов) итерации; положительная скалярная величина. Значением по умолчанию является |
PrecondBandWidth | Верхняя пропускная способность предварительного формирователя для PCG; неотрицательное целое число. По умолчанию, |
SubproblemAlgorithm | Определяет, как шаг итерации вычисляется. Значение по умолчанию, |
TolPCG | Допуск завершения на итерации PCG; положительная скалярная величина. Значением по умолчанию является |
TypicalX | Типичный |
'interior-point-convex'
Алгоритм только
ConstraintTolerance | Допуск на нарушении ограничений; положительная скалярная величина. Значением по умолчанию является Для |
LinearSolver | Тип внутреннего линейного решателя в алгоритме:
|
'active-set'
Алгоритм только
ConstraintTolerance | Допуск на нарушении ограничений; положительная скалярная величина. Значением по умолчанию является Для |
ObjectiveLimit | Допуск (останавливающий критерий), который является скаляром. Если значение целевой функции понижается |
problem
— Структура задачиСтруктура задачи в виде структуры с этими полями:
| Симметрическая матрица в 1/2*x'*H*x |
| Вектор в линейном члене f'*x |
| Матрица в линейных ограничениях неравенства Aineq*x ≤ bineq |
| Вектор в линейных ограничениях неравенства Aineq*x ≤ bineq |
| Матрица в линейных ограничениях равенства Aeq*x = beq |
| Вектор в линейных ограничениях равенства Aeq*x = beq |
lb | Вектор нижних границ |
ub | Вектор верхних границ |
| Начальная точка для x |
| 'quadprog' |
| Опции, созданные с помощью optimoptions или приложение Оптимизации |
Обязательными полями является H
F
, solver
, и options
. При решении, quadprog
игнорирует любые поля в problem
кроме перечисленных.
Типы данных: struct
x
РешениеРешение, возвращенное как вектор действительных чисел. x
вектор, который минимизирует 1/2*x'*H*x + f'*x
подвергните всем границам и линейным ограничениям. x
может быть локальный минимум для невыпуклых проблем. Для выпуклых проблем, x
глобальный минимум. Для получения дополнительной информации смотрите Локальный по сравнению с Глобальными оптимумами.
fval
— Значение целевой функции в решенииЗначение целевой функции в решении, возвращенном как действительный скаляр. fval
значение 1/2*x'*H*x + f'*x
в решении x
.
exitflag
— Обоснуйте quadprog
остановленныйОбоснуйте quadprog
остановленный, возвращенный как целое число, описанное в этой таблице.
Все алгоритмы | |
1 | Функция сходилась к решению |
0 | Количество итераций превысило |
-2 | Проблема неосуществима. Или, для |
-3 | Проблема неограниченна. |
| |
2 | Размер шага был меньшим, чем |
-6 | Невыпуклая проблема обнаруживается. |
-8 | Не мог вычислить направление шага. |
| |
4 | Локальный минимум найден; минимум не уникален. |
3 | Изменение в значении целевой функции было меньшим, чем |
-4 | Текущее поисковое направление не было направлением спуска. Никакие дальнейшие успехи не могли быть сделаны. |
| |
-6 | Невыпуклая проблема обнаруживается; проекция |
Иногда, 'active-set'
алгоритм останавливается с выходным флагом 0
когда проблема, на самом деле, неограниченна. Установление более высокого предела итерации также приводит к выходному флагу 0
.
output
— Информация о процессе оптимизацииИнформация о процессе оптимизации, возвращенном как структура с этими полями:
| Количество проделанных итераций |
| Алгоритм оптимизации используется |
| Общее количество итераций PCG ( |
constrviolation | Максимум ограничительных функций |
firstorderopt | Мера оптимальности первого порядка |
linearsolver | Тип внутреннего линейного решателя, |
message | Выходное сообщение |
lambda
— Множители Лагранжа в решенииМножители Лагранжа в решении, возвращенном как структура с этими полями:
| Нижние границы |
| Верхние границы |
| Линейные неравенства |
| Линейные равенства |
Для получения дополнительной информации смотрите Структуры множителя Лагранжа.
'interior-point-convex'
'interior-point-convex'
алгоритм пытается следовать за путем, который является строго в ограничениях. Это использует предварительно решить модуль, чтобы удалить сокращение и упростить проблему путем решения для компонентов, которые являются прямыми.
Алгоритм имеет различные реализации для разреженной матрицы Гессиана H
и для плотной матрицы. Обычно разреженная реализация быстрее на больших, разреженных проблемах, и плотная реализация быстрее на плотных или небольших проблемах. Для получения дополнительной информации см. выпуклый внутренней точкой quadprog Алгоритм.
'trust-region-reflective'
'trust-region-reflective'
алгоритм является методом доверительной области подпространства на основе внутреннего отражающего метода Ньютона, описанного в [1]. Каждая итерация включает приближенное решение большой линейной системы с помощью метода предобусловленных методов сопряженных градиентов (PCG). Для получения дополнительной информации см. "доверительную область, отражающую" quadprog Алгоритм.
'active-set'
'active-set'
алгоритм является методом проекции, похожим на тот, описанный в [2]. Алгоритм не является крупномасштабным; смотрите Крупномасштабный по сравнению с Алгоритмами Средней шкалы. Для получения дополнительной информации смотрите активный набор quadprog Алгоритм.
Можно использовать приложение Оптимизации в квадратичном программировании. Введите optimtool
в командной строке MATLAB®, и выбирают quadprog - Quadratic programming
решатель. Для получения дополнительной информации см. Приложение Оптимизации.
Можно решить задачи квадратичного программирования с помощью Основанного на проблеме Setup Оптимизации. Для примеров смотрите Квадратичное программирование.
[1] Коулман, T. F. и И. Ли. “Отражающий Метод Ньютона для Минимизации Квадратичной Функции Согласно Границам на Некоторых Переменных”. SIAM Journal на Оптимизации. Издание 6, Номер 4, 1996, стр 1040–1058.
[2] Жабры, P. E. В. Мюррей и М. Х. Райт. Практическая оптимизация. Лондон: Academic Press, 1981.
[3] Гулд, N. и П. Л. Тойнт. “Предварительно обрабатывая для квадратичного программирования”. Математическое программирование. Серии B, Издание 100, 2004, стр 95–132.
Указания и ограничения по применению:
quadprog
генерация кода поддержек, использующая любого codegen
функционируйте или приложение MATLAB Coder™. У вас должна быть лицензия MATLAB Coder, чтобы сгенерировать код.
Целевой компьютер должен поддержать стандартные расчеты с плавающей точкой с двойной точностью. Вы не можете сгенерировать код для расчетов или фиксированной точки с одинарной точностью.
quadprog
не поддерживает problem
аргумент для генерации кода.
[x,fval] = quadprog(problem) % Not supported
Весь quadprog
введите матрицы, такие как A
, Aeq
, lb
, и ub
должно быть полным, не разреженным. Можно преобразовать разреженные матрицы в полный при помощи full
функция.
lb
и ub
аргументы должны иметь то же количество записей как количество столбцов в H
или должен быть пустой []
.
Для усовершенствованной оптимизации кода, включающей встраиваемые процессоры, вам также нужна лицензия Embedded Coder®.
Необходимо включать опции для quadprog
и задайте их использующий optimoptions
. Опции должны включать Algorithm
опция, набор к 'active-set'
.
options = optimoptions('quadprog','Algorithm','active-set'); [x,fval,exitflag] = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options);
Генерация кода поддерживает эти опции:
Algorithm
— Должен быть 'active-set'
ConstraintTolerance
MaxIterations
ObjectiveLimit
OptimalityTolerance
StepTolerance
Сгенерированный код ограничил проверку ошибок на опции. Рекомендуемый способ обновить опцию состоит в том, чтобы использовать optimoptions
, не запись через точку.
opts = optimoptions('quadprog','Algorithm','active-set'); opts = optimoptions(opts,'MaxIterations',1e4); % Recommended opts.MaxIterations = 1e4; % Not recommended
Не загружайте опции из файла. Выполнение так может заставить генерацию кода перестать работать. Вместо этого создайте опции в своем коде.
Если вы задаете опцию, которая не поддержана, опция обычно игнорируется во время генерации кода. Для надежных результатов задайте только поддерживаемые опции.
linprog
| lsqlin
| optimoptions
| prob2struct
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.