Решение связанных линейных задач наименьших квадратов
Линейный решатель наименьших квадратов с границами или линейными ограничениями.
Решает задачи аппроксимации кривой методом наименьших квадратов формы
Примечание
lsqlin применяется только к подходу, основанному на решателе. Обсуждение двух подходов к оптимизации см. в разделе Первый выбор подхода на основе проблем или подхода на основе решателей.
добавляет линейные ограничения равенства x = lsqlin(C,d,A,b,Aeq,beq,lb,ub)Aeq*x = beq и границы lb ≤ x ≤ ub. Если вам не нужны определенные ограничения, такие как Aeq и beq, задайте для них значение []. Если x(i) не ограничен ниже, набор lb(i) = -Inf, и если x(i) не ограничен выше, набор ub(i) = Inf.
находит минимальное значение для x = lsqlin(problem)problem, структура, описанная в problem. Создать problem структура с использованием точечной нотации или struct функция. Или создать problem структура из OptimizationProblem объект с помощью prob2struct.
[, для любых входных аргументов, описанных выше, возвращает:x,resnorm,residual,exitflag,output,lambda] = lsqlin(___)
Квадрат 2-нормы остатка resnorm =
Остаток residual = C*x - d
Стоимость exitflag описание условия выхода
Структура output содержит информацию о процессе оптимизации
Структура lambda содержащий множители Лагранжа
Коэффициент ½ в определении задачи влияет на значения в lambda структура.
[ запуски wsout,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b,Aeq,beq,lb,ub,ws)lsqlin из данных в теплом начальном объекте ws, используя опции в ws. Возвращенный аргумент wsout содержит точку решения в wsout.X. С помощью wsout в качестве начального объекта теплого начала в последующем вызове решателя, lsqlin может работать быстрее.
Найти x что сводит к минимуму норму C*x - d для переопределенной проблемы с линейными ограничениями неравенства.
Укажите проблему и ограничения.
C = [0.9501 0.7620 0.6153 0.4057
0.2311 0.4564 0.7919 0.9354
0.6068 0.0185 0.9218 0.9169
0.4859 0.8214 0.7382 0.4102
0.8912 0.4447 0.1762 0.8936];
d = [0.0578
0.3528
0.8131
0.0098
0.1388];
A = [0.2027 0.2721 0.7467 0.4659
0.1987 0.1988 0.4450 0.4186
0.6037 0.0152 0.9318 0.8462];
b = [0.5251
0.2026
0.6721];Звонить lsqlin для решения проблемы.
x = lsqlin(C,d,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 = 4×1
0.1299
-0.5757
0.4251
0.2438
Найти x что сводит к минимуму норму C*x - d для переопределенной проблемы с линейным равенством и ограничениями и границами неравенства.
Укажите проблему и ограничения.
C = [0.9501 0.7620 0.6153 0.4057
0.2311 0.4564 0.7919 0.9354
0.6068 0.0185 0.9218 0.9169
0.4859 0.8214 0.7382 0.4102
0.8912 0.4447 0.1762 0.8936];
d = [0.0578
0.3528
0.8131
0.0098
0.1388];
A =[0.2027 0.2721 0.7467 0.4659
0.1987 0.1988 0.4450 0.4186
0.6037 0.0152 0.9318 0.8462];
b =[0.5251
0.2026
0.6721];
Aeq = [3 5 7 9];
beq = 4;
lb = -0.1*ones(4,1);
ub = 2*ones(4,1);Звонить lsqlin для решения проблемы.
x = lsqlin(C,d,A,b,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 = 4×1
-0.1000
-0.1000
0.1599
0.4090
В этом примере показано, как использовать опции, не заданные по умолчанию, для линейных наименьших квадратов.
Задайте параметры для использования 'interior-point' и для обеспечения итеративного отображения.
options = optimoptions('lsqlin','Algorithm','interior-point','Display','iter');
Настройка линейной задачи наименьших квадратов.
C = [0.9501 0.7620 0.6153 0.4057
0.2311 0.4564 0.7919 0.9354
0.6068 0.0185 0.9218 0.9169
0.4859 0.8214 0.7382 0.4102
0.8912 0.4447 0.1762 0.8936];
d = [0.0578
0.3528
0.8131
0.0098
0.1388];
A = [0.2027 0.2721 0.7467 0.4659
0.1987 0.1988 0.4450 0.4186
0.6037 0.0152 0.9318 0.8462];
b = [0.5251
0.2026
0.6721];Запустите проблему.
x = lsqlin(C,d,A,b,[],[],[],[],[],options)
Iter Fval Primal Infeas Dual Infeas Complementarity
0 -7.687420e-02 1.600492e+00 6.150431e-01 1.000000e+00
1 -7.687419e-02 8.002458e-04 3.075216e-04 2.430833e-01
2 -3.162837e-01 4.001229e-07 1.537608e-07 5.945636e-02
3 -3.760545e-01 2.000617e-10 2.036997e-08 1.370933e-02
4 -3.912129e-01 9.997558e-14 1.006816e-08 2.548273e-03
5 -3.948062e-01 1.665335e-16 2.955102e-09 4.295807e-04
6 -3.953277e-01 2.775558e-17 1.237758e-09 3.102850e-05
7 -3.953581e-01 1.110223e-16 1.645862e-10 1.138719e-07
8 -3.953582e-01 1.387779e-16 2.401829e-13 5.693290e-11
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 = 4×1
0.1299
-0.5757
0.4251
0.2438
Получить и интерпретировать все lsqlin выходы.
Определите проблему с линейными ограничениями неравенства и границами. Проблема переопределена, так как в ней четыре столбца C матрица, но пять строк. Это означает, что задача имеет четыре неизвестных и пять условий, даже до включения линейных ограничений и границ.
C = [0.9501 0.7620 0.6153 0.4057
0.2311 0.4564 0.7919 0.9354
0.6068 0.0185 0.9218 0.9169
0.4859 0.8214 0.7382 0.4102
0.8912 0.4447 0.1762 0.8936];
d = [0.0578
0.3528
0.8131
0.0098
0.1388];
A = [0.2027 0.2721 0.7467 0.4659
0.1987 0.1988 0.4450 0.4186
0.6037 0.0152 0.9318 0.8462];
b = [0.5251
0.2026
0.6721];
lb = -0.1*ones(4,1);
ub = 2*ones(4,1);Задайте параметры для использования 'interior-point' алгоритм.
options = optimoptions('lsqlin','Algorithm','interior-point');
'interior-point' алгоритм не использует начальную точку, поэтому установите x0 кому [].
x0 = [];
Звонить lsqlin со всеми выходами.
[x,resnorm,residual,exitflag,output,lambda] = ...
lsqlin(C,d,A,b,[],[],lb,ub,x0,options)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 = 4×1
-0.1000
-0.1000
0.2152
0.3502
resnorm = 0.1672
residual = 5×1
0.0455
0.0764
-0.3562
0.1620
0.0784
exitflag = 1
output = struct with fields:
message: '...'
algorithm: 'interior-point'
firstorderopt: 4.3374e-11
constrviolation: 0
iterations: 6
linearsolver: 'dense'
cgiterations: []
lambda = struct with fields:
ineqlin: [3x1 double]
eqlin: [0x1 double]
lower: [4x1 double]
upper: [4x1 double]
Подробнее изучите ненулевые поля множителя Лагранжа. Сначала изучите множители Лагранжа для ограничения линейного неравенства.
lambda.ineqlin
ans = 3×1
0.0000
0.2392
0.0000
Множители лагранжа ненулевые точно, когда решение находится на соответствующей границе ограничения. Другими словами, множители Лагранжа ненулевые, когда соответствующее ограничение активно. lambda.ineqlin(2) ненулевое. Это означает, что второй элемент в A*x должен равняться второму элементу в b, поскольку ограничение активно.
[A(2,:)*x,b(2)]
ans = 1×2
0.2026 0.2026
Теперь изучите множители Лагранжа на предмет ограничений нижней и верхней границы.
lambda.lower
ans = 4×1
0.0409
0.2784
0.0000
0.0000
lambda.upper
ans = 4×1
0
0
0
0
Первые два элемента lambda.lower ненулевые. Вы видите, что x(1) и x(2) находятся на своих нижних границах, -0.1. Все элементы lambda.upper по существу равны нулю, и вы видите, что все компоненты x меньше их верхней границы, 2.
Создайте теплый начальный объект, чтобы быстро решить измененную проблему. Настройка параметров отключения итеративного отображения для поддержки теплого запуска.
rng default % For reproducibility options = optimoptions('lsqlin','Algorithm','active-set','Display','off'); n = 15; x0 = 5*rand(n,1); ws = optimwarmstart(x0,options);
Создайте и решите первую проблему. Найдите время решения.
r = 1:n-1; % Index for making vectors v(n) = (-1)^(n+1)/n; % Allocating the vector v v(r) =( -1).^(r+1)./r; C = gallery('circul',v); C = [C;C]; r = 1:2*n; d(r) = n-r; lb = -5*ones(1,n); ub = 5*ones(1,n); tic [ws,fval,~,exitflag,output] = lsqlin(C,d,[],[],[],[],lb,ub,ws) toc
Elapsed time is 0.005117 seconds.
Добавьте линейную зависимость и повторите решение.
A = ones(1,n); b = -10; tic [ws,fval,~,exitflag,output] = lsqlin(C,d,A,b,[],[],lb,ub,ws) toc
Elapsed time is 0.001491 seconds.
C - Матрица множителейМатрица множителя, заданная как матрица двойников. C представляет множитель решения x в выражении C*x - d. C является Mоколо-N, где M - количество уравнений, и N - количество элементов x.
Пример: C = [1,4;2,5;7,8]
Типы данных: double
d - Постоянный векторВектор константы, заданный как вектор двойников. d представляет член аддитивной константы в выражении C*x - d. d является Mоколо-1, где M - количество уравнений.
Пример: d = [5;0;-12]
Типы данных: double
A - Линейные ограничения неравенстваЛинейные ограничения неравенства, заданные как вещественная матрица. A является Mоколо-N матрица, где M - количество неравенств, и N - количество переменных (количество элементов в x0). По большим проблемам проходите A в виде разреженной матрицы.
A кодирует M линейные неравенства
A*x <= b,
где x - вектор столбца N переменные x(:), и b - вектор столбца с M элементы.
Например, для указания
x1 + 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.
Например, рассмотрим эти неравенства:
x1 + 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 элементы.
Например, для указания
x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 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.
Например, рассмотрим следующие равенства:
x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20.
Задайте равенства, введя следующие ограничения.
Aeq = [1,2,3;2,4,1]; beq = [10;20];
Пример: Чтобы указать, что компоненты x суммируются до 1, используйте Aeq = ones(1,N) и beq = 1.
Типы данных: double
lb - Нижние границы[] (по умолчанию) | вещественный вектор или массивНижние границы, указанные как вектор или массив двойников. lb представляет нижние границы элементарно в lb ≤ x ≤ ub.
Внутри, lsqlin преобразует массив lb к вектору lb(:).
Пример: lb = [0;-Inf;4] средства x(1) ≥ 0, x(3) ≥ 4.
Типы данных: double
ub - Верхние границы[] (по умолчанию) | вещественный вектор или массивВерхние границы, заданные как вектор или массив двойников. ub представляет верхние границы элементарно в lb ≤ x ≤ ub.
Внутри, lsqlin преобразует массив ub к вектору ub(:).
Пример: ub = [Inf;4;10] средства x(2) ≤ 4, x(3) ≤ 10.
Типы данных: double
x0 - Начальная точка[] (по умолчанию) | вещественный вектор или массивНачальная точка для процесса решения, заданная как действительный вектор или массив. 'trust-region-reflective' и 'active-set' использование алгоритмов x0 (необязательно).
Если не указать x0 для 'trust-region-reflective' или 'active-set' алгоритм, lsqlin наборы x0 к нулевому вектору. Если какой-либо компонент этого нулевого вектора x0 нарушает границы, lsqlin наборы x0 до точки во внутренней части рамки, определяемой границами.
Пример: x0 = [4;-3]
Типы данных: double
options - Опции для lsqlinoptimoptions | структура, например, созданная optimsetОпции для lsqlin, указанный в качестве выходного сигнала optimoptions функция или как структура, например, созданная optimset.
Некоторые опции отсутствуют в optimoptions дисплей. Эти параметры выделены курсивом в следующей таблице. Дополнительные сведения см. в разделе Параметры просмотра.
Все алгоритмы
| Выберите алгоритм:
Когда проблема не имеет ограничений, Если имеется большое количество линейных ограничений, а не большое количество переменных, попробуйте Дополнительные сведения о выборе алгоритма см. в разделе Выбор алгоритма. |
| Диагностика | Отображение диагностической информации о функции, которая должна быть свернута или решена. Выбор: |
Display | Уровень отображения, возвращенный в командную строку.
|
MaxIterations | Максимальное допустимое число итераций, положительное целое число. Значение по умолчанию: Для |
trust-region-reflective Параметры алгоритма
FunctionTolerance | Допуск окончания для значения функции, положительный скаляр. Значение по умолчанию: Для |
JacobianMultiplyFcn | Функция умножения якобиана, заданная как дескриптор функции. Для крупномасштабных структурированных задач эта функция должна вычислять матричный продукт Якобиана W = jmfun(Jinfo,Y,flag) где
В каждом случае Пример см. в разделе Функция умножения Якобиана с линейными наименьшими квадратами. Для |
| MaxPCGIter | Максимальное число итераций PCG (предварительно кондиционированный сопряженный градиент), положительный скаляр. Значение по умолчанию: |
OptimalityTolerance | Допуск окончания для оптимальности первого порядка, положительный скаляр. Значение по умолчанию: Для |
| PrecondBandWidth | Верхняя полоса пропускания устройства предварительного кондиционирования для ПХГ (предварительно кондиционированный сопряженный градиент). По умолчанию используется диагональное предварительное кондиционирование (верхняя полоса пропускания 0). При некоторых проблемах увеличение полосы пропускания уменьшает количество итераций PCG. Настройка |
SubproblemAlgorithm | Определяет способ вычисления шага итерации. Значение по умолчанию, |
| TolPCG | Допуск окончания для итерации PCG (предварительно кондиционированный сопряженный градиент), положительный скаляр. Значение по умолчанию: |
TypicalX | Типичный |
interior-point Параметры алгоритма
ConstraintTolerance | Допуск для нарушения ограничения, положительный скаляр. Значение по умолчанию: Для |
LinearSolver | Тип внутреннего линейного решателя в алгоритме:
|
OptimalityTolerance | Допуск окончания для оптимальности первого порядка, положительный скаляр. Значение по умолчанию: Для |
StepTolerance | Допуск окончания на Для |
'active-set' Параметры алгоритма
ConstraintTolerance | Допуск для нарушения ограничения, положительный скаляр. Значение по умолчанию: Для |
ObjectiveLimit | Допуск (критерий остановки), являющийся скаляром. Если значение целевой функции ниже |
OptimalityTolerance | Допуск окончания для оптимальности первого порядка, положительный скаляр. Значение по умолчанию: Для |
StepTolerance | Допуск окончания на Для |
problem - Проблема оптимизацииЗадача оптимизации, заданная как структура со следующими полями.
| Матричный множитель в термине C*x - d |
| Аддитивная константа в термине C*x - d |
| Матрица для линейных ограничений неравенства |
| Вектор для линейных ограничений неравенства |
| Матрица для линейных ограничений равенства |
| Вектор для линейных ограничений равенства |
lb | Вектор нижних границ |
ub | Вектор верхних границ |
| Начальная точка для x |
| 'lsqlin' |
| Параметры, созданные с помощью optimoptions |
Примечание
Нельзя использовать теплое начало с problem аргумент.
Типы данных: struct
ws - Теплый стартовый объектoptimwarmstartТеплый начальный объект, заданный как объект, созданный с помощью optimwarmstart. Объект теплого начала содержит начальную точку и параметры, а также дополнительные данные для размера памяти при создании кода. См. раздел Передовые практики «Теплый старт».
Пример: ws = optimwarmstart(x0,options)
x - РешениеРешение, возвращаемое как вектор, минимизирующий норму C*x-d со всеми границами и линейными ограничениями.
wsout - Теплый стартовый объект раствораLsqlinWarmStart объектТеплый начальный объект решения, возвращенный как LsqlinWarmStart объект. Точка решения: wsout.X.
Вы можете использовать wsout в качестве входного теплого стартового объекта в последующем lsqlin звоните.
resnorm - Целевое значениеОбъективное значение, возвращаемое как скалярное значение norm(C*x-d)^2.
residual - Остатки раствораОстатки решения, возвращенные в виде вектора C*x-d.
exitflag - Условие остановки алгоритмаУсловие остановки алгоритма, возвращаемое как целое число, определяющее причину остановки алгоритма. Ниже перечислены значения exitflag и соответствующие причины lsqlin остановлено.
| Изменение остатка было меньше указанного допуска |
| Размер шага меньше |
| Функция, сходящаяся к решению |
| Превышено число итераций |
| Проблема неосуществима. Или, для |
-3 | Проблема безгранична. |
| Неправильное кондиционирование предотвращает дальнейшую оптимизацию. |
| Не удалось вычислить направление шага. |
Сообщение о выходе для interior-point алгоритм может дать более подробную информацию о причине lsqlin остановлено, например превышение допуска. См. разделы Флаги выхода и Сообщения выхода.
output - Краткое описание процесса решенияСводка процесса решения, возвращенная в виде структуры, содержащей информацию о процессе оптимизации.
| Число итераций, выполненных решателем. |
| Один из этих алгоритмов:
Для неограниченной проблемы, |
| Нарушение ограничения, положительное для нарушенных ограничений (не возвращено для
|
| Выйти из сообщения. |
| Оптимальность первого порядка в решении. См. раздел Измерение оптимальности первого порядка. |
linearsolver | Тип внутреннего линейного решателя, |
| Число итераций сопряженного градиента, выполненных решателем. Непустые только для |
См. раздел Структуры вывода.
lambda - множители лагранжаМножители лагранжа, возвращаемые как структура со следующими полями.
| Нижние границы |
| Верхние границы |
| Линейные неравенства |
| Линейные равенства |
См. раздел Структуры множителей Лагранжа.
Для проблем без ограничений можно использовать mldivide (матричное левое деление). При отсутствии ограничений lsqlin прибыль x = C\d.
Потому что решаемая проблема всегда выпуклая, lsqlin находит глобальное, хотя и не обязательно уникальное решение.
Если проблема имеет много линейных ограничений и несколько переменных, попробуйте использовать 'active-set' алгоритм. См. раздел Квадратичное программирование с множеством линейных ограничений.
Лучшие числовые результаты, вероятно, если явно указать равенства, используя Aeq и beq, вместо неявного использования lb и ub.
trust-region-reflective алгоритм не допускает равных верхних и нижних границ. Используйте другой алгоритм для этого случая.
Если указанные входные границы для проблемы противоречивы, вывод x является x0 и выходные данные resnorm и residual являются [].
Вы можете решить некоторые крупные структурированные задачи, в том числе те, где C матрица слишком велика, чтобы поместиться в память, используя trust-region-reflective алгоритм с функцией умножения Якобиана. Дополнительные сведения см. в разделе Параметры алгоритма, отражающего область доверия.
Этот способ является методом области доверия подпространства, основанным на способе Ньютона с внутренним отражением, описанном в [1]. Каждая итерация включает в себя приблизительное решение большой линейной системы методом предварительно кондиционированных сопряженных градиентов (PCG). См. раздел Доверенные области - отражающие наименьшие квадраты и, в частности, масштабные линейные наименьшие квадраты.
'interior-point' алгоритм основан на quadprog
'interior-point-convex' алгоритм. См. раздел Линейные наименьшие квадраты: внутренняя точка или активный набор.
'active-set' алгоритм основан на quadprog
'active-set' алгоритм. Дополнительные сведения см. в разделах Линейные наименьшие квадраты: внутренние точки или активный набор и алгоритм квадрограмм активного набора.
[1] Коулман, Т. Ф. и Я. Ли. «Отражающий метод Ньютона для минимизации квадратичной функции, подверженной ограничениям по некоторым переменным», SIAM Journal on Optimization, Vol. 6, Number 4, pp. 1040-1058, 1996.
[2] Жабры, P. E., В. Мюррей и М. Х. Райт. Практическая оптимизация, Академическая пресса, Лондон, Великобритания, 1981.
Объект теплого начала сохраняет список активных ограничений из предыдущей решенной задачи. Решатель переносит как можно больше информации об активных ограничениях для решения текущей задачи. Если предыдущая проблема слишком отличается от текущей, информация об активном наборе не используется повторно. В этом случае решатель эффективно выполняет холодный запуск, чтобы перестроить список активных ограничений.
Задача «Оптимизировать интерактивный редактор» обеспечивает визуальный интерфейс для lsqlin.
Примечания и ограничения по использованию:
lsqlin поддерживает генерацию кода с помощью codegen (MATLAB Coder) или MATLAB ® Coder™ app. Для создания кода необходимо иметь лицензию MATLAB Coder.
Целевое оборудование должно поддерживать стандартные вычисления с плавающей запятой с двойной точностью. Невозможно создать код для вычислений с одной точностью или фиксированной точкой.
Цели создания кода не используют те же библиотеки математических ядер, что и решатели MATLAB. Поэтому решения для генерации кода могут отличаться от решений для решающих устройств, особенно для плохо оговоренных задач.
При решении неограниченных и недоопределённых задач в MATLAB, lsqlin требования mldivide, что возвращает базовое решение. При генерации кода возвращаемое решение имеет минимальную норму, которая обычно отличается.
lsqlin не поддерживает problem аргумент для создания кода.
[x,fval] = lsqlin(problem) % Not supportedВсе lsqlin входные матрицы, такие как A, Aeq, lb, и ub должно быть полным, а не разреженным. Можно преобразовать разреженные матрицы в полные с помощью full функция.
lb и ub аргументы должны иметь то же количество записей, что и число столбцов в C или должны быть пустыми [].
Для оптимизации кода с использованием встраиваемых процессоров также требуется лицензия Embedded Coder ®.
Необходимо включить параметры для lsqlin и укажите их с помощью optimoptions. Опции должны включать Algorithm опция, значение 'active-set'.
options = optimoptions('lsqlin','Algorithm','active-set'); [x,fval,exitflag] = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options);
Создание кода поддерживает следующие опции:
Algorithm - Должно быть 'active-set'
ConstraintTolerance
MaxIterations
ObjectiveLimit
OptimalityTolerance
StepTolerance
В созданном коде ограничена проверка параметров на наличие ошибок. Рекомендуемый способ обновления опции - использовать optimoptions, не точечная нотация.
opts = optimoptions('lsqlin','Algorithm','active-set'); opts = optimoptions(opts,'MaxIterations',1e4); % Recommended opts.MaxIterations = 1e4; % Not recommended
Не загружать параметры из файла. Это может привести к сбою при создании кода. Вместо этого создайте параметры в коде.
Если указать неподдерживаемый параметр, он обычно игнорируется при создании кода. Для получения надежных результатов укажите только поддерживаемые параметры.
lsqnonneg | mldivide | Оптимизировать | optimwarmstart | quadprog
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.