Решите ограниченные проблемы линейного метода наименьших квадратов
Решатель линейного метода наименьших квадратов с границами или линейными ограничениями.
Решает проблемы аппроксимирования кривыми наименьших квадратов формы
lsqlin
применяется только к основанному на решателе подходу. Для обсуждения двух подходов оптимизации смотрите, Сначала Выбирают Problem-Based or Solver-Based Approach.
x = lsqlin(C,d,A,b)
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub)
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options)
x = lsqlin(problem)
[x,resnorm,residual,exitflag,output,lambda]
= 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
путем экспорта проблемы из приложения Оптимизации, как описано в Экспорте работы. Или создайте структуру problem
из объекта OptimizationProblem
при помощи prob2struct
.
[
, для любых входных параметров, описанных выше, возвращается:x
,resnorm
,residual
,exitflag
,output
,lambda
]
= lsqlin(___)
Квадратичная норма остаточного resnorm =
Остаточный residual = C*x - d
Значение exitflag
, описывающий выходное условие
Структура output
, содержащий информацию о процессе оптимизации
Структура lambda
, содержащий множители Лагранжа
Фактор ½ в определении проблемы влияет на значения в структуре lambda
.
Найдите 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.000616e-10 2.036997e-08 1.370933e-02 4 -3.912129e-01 1.000866e-13 1.006816e-08 2.548273e-03 5 -3.948062e-01 2.220446e-16 2.955102e-09 4.295807e-04 6 -3.953277e-01 2.775558e-17 1.237758e-09 3.102850e-05 7 -3.953581e-01 2.775558e-17 1.645862e-10 1.138719e-07 8 -3.953582e-01 2.775558e-17 2.399608e-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
.
C
Матрица множителяМатрица множителя, заданная как матрица, удваивается. C
представляет множитель решения x
в выражении C*x - d
. C
является M
-by-N
, где M
является количеством уравнений, и N
является числом элементов x
.
Пример: C = [1,4;2,5;7,8]
Типы данных: double
d
Постоянный векторПостоянный вектор, заданный как вектор, удваивается. d
представляет термин аддитивной постоянной в выражении C*x - d
. d
является M
-by-1
, где M
является количеством уравнений.
Пример: d = [5;0;-12]
Типы данных: double
A
Линейная матрица ограничения неравенстваЛинейная матрица ограничения неравенства, заданная как матрица, удваивается. A
представляет линейные коэффициенты в ограничениях A*x
≤ b
. A
имеет размер Mineq
-by-N
, где Mineq
является количеством ограничений, и N
является числом элементов x
. Чтобы сохранить память, передайте A
как разреженную матрицу.
Пример: A = [4,3;2,0;4,-1];
означает три линейных неравенства (три строки) для двух переменных решения (два столбца).
Типы данных: double
b
Линейный вектор ограничения неравенстваЛинейный вектор ограничения неравенства, заданный как вектор, удваивается. b
представляет постоянный вектор в ограничениях A*x
≤ b
. b
имеет длину Mineq
, где A
является Mineq
-by-N
.
Пример: [4,0]
Типы данных: double
Aeq
— Линейная матрица ограничений равенства[]
(значение по умолчанию) | действительная матрицаЛинейная матрица ограничений равенства, заданная как матрица, удваивается. Aeq
представляет линейные коэффициенты в ограничениях Aeq*x
= beq
. Aeq
имеет размер Meq
-by-N
, где Meq
является количеством ограничений, и N
является числом элементов x
. Чтобы сохранить память, передайте Aeq
как разреженную матрицу.
Пример: A = [4,3;2,0;4,-1];
означает три линейных неравенства (три строки) для двух переменных решения (два столбца).
Типы данных: double
beq
— Линейный ограничительный вектор равенства[]
(значение по умолчанию) | вектор действительных чиселЛинейный ограничительный вектор равенства, заданный как вектор, удваивается. beq
представляет постоянный вектор в ограничениях Aeq*x
= beq
. beq
имеет длину Meq
, где Aeq
является Meq
-by-N
.
Пример: [4,0]
Типы данных: 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
Начальная точка[]
(значение по умолчанию) | вектор действительных чисел или массивНачальная точка для процесса решения, заданного как вектор или массив, удваивается. x0
используется только алгоритмом 'trust-region-reflective'
. Дополнительный.
Если вы не обеспечиваете x0
для алгоритма 'trust-region-reflective'
, lsqlin
устанавливает x0
на нулевой вектор. Если какой-либо компонент этого нулевого векторного x0
нарушает границы, lsqlin
устанавливает x0
на точку во внутренней части поля, заданного границами.
Пример: x0 = [4;-3]
Типы данных: double
опции
Опции для lsqlin
optimoptions
или приложения ОптимизацииОпции для lsqlin
, заданного как вывод optimoptions
, функционируют или приложение Оптимизации.
Некоторые опции отсутствуют в отображении optimoptions
. Эти опции появляются курсивом в следующей таблице. Для получения дополнительной информации, Опции вида на море.
Все алгоритмы
| Выберите алгоритм:
Алгоритм Алгоритм Для получения дополнительной информации о выборе алгоритма смотрите Выбор Algorithm. |
Диагностика | Отобразите диагностическую информацию о функции, которая будет минимизирована или решена. Выбором является |
Display | Уровень отображения возвращен в командную строку.
Алгоритм
|
MaxIterations | Максимальное количество позволенных итераций, положительное целое число. Значением по умолчанию является Для |
Опции алгоритма trust-region-reflective
FunctionTolerance | Допуск завершения на значении функции, положительной скалярной величине. Значением по умолчанию является Для |
JacobianMultiplyFcn | Якобиан умножает функцию, заданную как указатель на функцию. Для крупномасштабных структурированных проблем эта функция должна вычислить якобиевское матричное произведение W = jmfun(Jinfo,Y,flag) то, где
В каждом случае Смотрите, что якобиан Умножает Функцию с Линейным методом наименьших квадратов для примера. Для |
MaxPCGIter | Максимальное количество PCG (предобусловленный метод сопряженных градиентов) итерации, положительная скалярная величина. Значением по умолчанию является |
OptimalityTolerance | Допуск завершения на оптимальности первого порядка, положительной скалярной величине. Значением по умолчанию является Для |
PrecondBandWidth | Верхняя пропускная способность предварительного формирователя для PCG (предобусловленный метод сопряженных градиентов). По умолчанию диагональное предварительное создание условий используется (верхняя пропускная способность 0). Для некоторых проблем, увеличивая пропускную способность сокращает количество итераций PCG. Установка |
SubproblemAlgorithm | Определяет, как шаг итерации вычисляется. Значение по умолчанию, |
TolPCG | Допуск завершения на PCG (предобусловленный метод сопряженных градиентов) итерация, положительная скалярная величина. Значением по умолчанию является |
TypicalX | Типичные значения |
Опции алгоритма interior-point
ConstraintTolerance | Допуск на ограничительном нарушении, положительной скалярной величине. Значением по умолчанию является Для |
LinearSolver | Тип внутреннего линейного решателя в алгоритме:
|
OptimalityTolerance | Допуск завершения на оптимальности первого порядка, положительной скалярной величине. Значением по умолчанию является Для |
StepTolerance | Допуск завершения на Для |
problem
— Задача оптимизацииЗадача оптимизации, заданная как структура со следующими полями.
| Матричный множитель в термине C*x - d |
| Аддитивная постоянная в термине C*x - d |
| Матрица для линейных ограничений неравенства |
| Вектор для линейных ограничений неравенства |
| Матрица для линейных ограничений равенства |
| Вектор для линейных ограничений равенства |
lb | Вектор нижних границ |
ub | Вектор верхних границ |
| Начальная точка для x |
| 'lsqlin' |
| Опции создаются с optimoptions |
Создайте структуру problem
путем экспорта проблемы из приложения Оптимизации, как описано в Экспорте работы.
Типы данных: struct
x
РешениеРешение, возвращенное как вектор, который минимизирует норму C*x-d
, подвергающегося всем границам и линейным ограничениям.
resnorm
Объективное значениеОбъективное значение, возвращенное как скалярное значение norm(C*x-d)^2
.
residual
— Невязки решенияНевязки решения, возвращенные как векторный C*x-d
.
exitflag
Алгоритм, останавливающий условиеАлгоритм, останавливающий условие, возвращенное как целое число, идентифицирующее причину остановленный алгоритм. Следующие списки значения exitflag
и соответствующих причин остановленный lsqlin
.
3 | Изменение в невязке было меньшим, чем заданный допуск |
2 | Размер шага, меньший, чем |
1 | Функция сходилась к решению |
0 | Количество итераций превысило |
-2 | Проблема неосуществима. Или для алгоритма |
-3 | Проблема неограниченна. |
-4 | Плохо создание условий предотвращает дальнейшую оптимизацию. |
-8 | Не мог вычислить направление шага. |
Выходное сообщение для алгоритма interior-point
может предоставить больше подробную информацию на причине остановленный lsqlin
, такую как превышение допуска. Смотрите Выходные Флаги и Выходные сообщения.
вывод
Сводные данные процесса решенияСводные данные процесса решения, возвращенные как структура, содержащая информацию о процессе оптимизации.
| Количество итераций решатель взяло. |
| Один из этих алгоритмов:
|
| Ограничительное нарушение, которое положительно для нарушенных ограничений (не возвращенный для алгоритма
|
| Выходное сообщение. |
| Оптимальность первого порядка в решении. Смотрите Меру по Оптимальности Первого порядка. |
linearsolver | Тип внутреннего линейного решателя, |
| Количество итераций метода сопряженных градиентов решатель выполняется. Непустой только для алгоритма |
Смотрите Выходные структуры.
\lambda
Множители ЛагранжаМножители Лагранжа, возвращенные как структура со следующими полями.
| Нижние границы |
| Верхние границы |
| Линейные неравенства |
| Линейные равенства |
Смотрите структуры множителя Лагранжа.
Для проблем без ограничений можно использовать mldivide
(матрица, оставленная деление). Когда у вас нет ограничений, lsqlin
возвращает x = C\d
.
Поскольку решаемая проблема всегда выпукла, lsqlin
находит глобальную переменную, несмотря на то, что не обязательно уникальной, решение.
Лучше числовые результаты вероятны, если вы задаете равенства явным образом, с помощью Aeq
и beq
, вместо неявно, с помощью lb
и ub
.
Алгоритм trust-region-reflective
не позволяет равные верхние и нижние границы. Используйте другой алгоритм для этого случая.
Если заданные входные границы для проблемы противоречивы, выводом x
является x0
, и выходными параметрами resnorm
и residual
является []
.
Можно решить некоторые большие структурированные проблемы, включая тех, где матрица C
является слишком большой, чтобы уместиться в памяти, использование алгоритма trust-region-reflective
с якобианом умножает функцию. Для получения информации смотрите доверительную область отражающие Опции Алгоритма.
Этот метод является методом доверительной области подпространства на основе внутреннего отражающего метода Ньютона, описанного в [1]. Каждая итерация включает приближенное решение большой линейной системы с помощью метода предобусловленных методов сопряженных градиентов (PCG). Смотрите Доверительную область Отражающие Наименьшие квадраты, и в конкретном Крупномасштабном Линейном методе наименьших квадратов.
Алгоритм 'interior-point'
основан на алгоритме 'interior-point-convex'
quadprog
. Смотрите Линейный метод наименьших квадратов Внутренней точки.
[1] Коулман, T. F. и И. Ли. “Отражающий Метод Ньютона для Минимизации Квадратичной Функции Согласно Границам на Некоторых Переменных”, SIAM Journal на Оптимизации, Издании 6, Номере 4, стр 1040–1058, 1996.
[2] Жабры, P. E. В. Мюррей и М. Х. Райт. Практическая оптимизация, Academic Press, Лондон, Великобритания, 1981.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.