exponenta event banner

lsqlin

Решение связанных линейных задач наименьших квадратов

Описание

Линейный решатель наименьших квадратов с границами или линейными ограничениями.

Решает задачи аппроксимации кривой методом наименьших квадратов формы

minx12‖C⋅x−d‖22 такое , что {A⋅x≤b,Aeq⋅x=beq,lb≤x≤ub.

Примечание

lsqlin применяется только к подходу, основанному на решателе. Обсуждение двух подходов к оптимизации см. в разделе Первый выбор подхода на основе проблем или подхода на основе решателей.

пример

x = lsqlin(C,d,A,b) решает линейную систему C*x = d в смысле наименьших квадратов, при условии A*x ≤ b.

пример

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(C,d,A,b,Aeq,beq,lb,ub,x0,options) минимизирует с начальной точкой x0 и параметры оптимизации, указанные в options. Использовать optimoptions для установки этих параметров. Если вы не хотите включать начальную точку, установите x0 аргумент для [].

x = lsqlin(problem) находит минимальное значение для problem, структура, описанная в problem. Создать problem структура с использованием точечной нотации или struct функция. Или создать problem структура из OptimizationProblem объект с помощью prob2struct.

пример

[x,resnorm,residual,exitflag,output,lambda] = lsqlin(___), для любых входных аргументов, описанных выше, возвращает:

  • Квадрат 2-нормы остатка resnorm = ‖C⋅x−d‖22

  • Остаток 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 представляет множитель решения x в выражении C*x - d. C является Mоколо-N, где M - количество уравнений, и N - количество элементов x.

Пример: C = [1,4;2,5;7,8]

Типы данных: double

Вектор константы, заданный как вектор двойников. d представляет член аддитивной константы в выражении C*x - d. d является Mоколо-1, где M - количество уравнений.

Пример: d = [5;0;-12]

Типы данных: double

Линейные ограничения неравенства, заданные как вещественная матрица. 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 является 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 является 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 является 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  x  ub.

Внутри, lsqlin преобразует массив lb к вектору lb(:).

Пример: lb = [0;-Inf;4] средства x(1) ≥ 0, x(3) ≥ 4.

Типы данных: double

Верхние границы, заданные как вектор или массив двойников. ub представляет верхние границы элементарно в lb  x  ub.

Внутри, lsqlin преобразует массив ub к вектору ub(:).

Пример: ub = [Inf;4;10] средства x(2) ≤ 4, x(3) ≤ 10.

Типы данных: double

Начальная точка для процесса решения, заданная как действительный вектор или массив. 'trust-region-reflective' и 'active-set' использование алгоритмов x0 (необязательно).

Если не указать x0 для 'trust-region-reflective' или 'active-set' алгоритм, lsqlin наборы x0 к нулевому вектору. Если какой-либо компонент этого нулевого вектора x0 нарушает границы, lsqlin наборы x0 до точки во внутренней части рамки, определяемой границами.

Пример: x0 = [4;-3]

Типы данных: double

Опции для lsqlin, указанный в качестве выходного сигнала optimoptions функция или как структура, например, созданная optimset.

Некоторые опции отсутствуют в optimoptions дисплей. Эти параметры выделены курсивом в следующей таблице. Дополнительные сведения см. в разделе Параметры просмотра.

Все алгоритмы

Algorithm

Выберите алгоритм:

  • 'interior-point' (по умолчанию)

  • 'trust-region-reflective'

  • 'active-set'

'trust-region-reflective' алгоритм допускает только верхние и нижние границы, без линейных неравенств или равенств. При указании обоих 'trust-region-reflective' алгоритм и линейные ограничения, lsqlin использует 'interior-point' алгоритм.

'trust-region-reflective' алгоритм не допускает равных верхних и нижних границ.

Когда проблема не имеет ограничений, lsqlin требования mldivide внутренне.

Если имеется большое количество линейных ограничений, а не большое количество переменных, попробуйте 'active-set' алгоритм.

Дополнительные сведения о выборе алгоритма см. в разделе Выбор алгоритма.

Диагностика

Отображение диагностической информации о функции, которая должна быть свернута или решена. Выбор: 'on' или значение по умолчанию 'off'.

Display

Уровень отображения, возвращенный в командную строку.

  • 'off' или 'none' не отображает выходные данные.

  • 'final' отображает только окончательный вывод (по умолчанию).

'interior-point' алгоритм допускает дополнительные значения:

  • 'iter' обеспечивает итеративное отображение.

  • 'iter-detailed' обеспечивает итеративное отображение с подробным сообщением о выходе.

  • 'final-detailed' отображает только окончательный вывод с подробным сообщением о выходе.

MaxIterations

Максимальное допустимое число итераций, положительное целое число. Значение по умолчанию: 2000 для 'active-set' алгоритм, и 200 для других алгоритмов.

Для optimset, имя опции: MaxIter. См. раздел Имена текущих и устаревших опций.

trust-region-reflective Параметры алгоритма

FunctionTolerance

Допуск окончания для значения функции, положительный скаляр. Значение по умолчанию: 100*epsО нас 2.2204e-14.

Для optimset, имя опции: TolFun. См. раздел Имена текущих и устаревших опций.

JacobianMultiplyFcn

Функция умножения якобиана, заданная как дескриптор функции. Для крупномасштабных структурированных задач эта функция должна вычислять матричный продукт Якобиана C*Y, C'*Y, или C'*(C*Y) без фактического формирования C. Запишите функцию в форму

W = jmfun(Jinfo,Y,flag)

где Jinfo содержит матрицу, используемую для вычисления C*Y (или C'*Y, или C'*(C*Y)).

jmfun должен вычислить один из трех различных продуктов, в зависимости от значения flag это lsqlin проходы:

  • Если flag == 0 тогда W = C'*(C*Y).

  • Если flag > 0 тогда W = C*Y.

  • Если flag < 0 тогда W = C'*Y.

В каждом случае jmfun нет необходимости в форме C явно. lsqlin использование Jinfo для вычисления предварительного условия. Для получения информации о предоставлении дополнительных параметров при необходимости см. раздел Передача дополнительных параметров.

Пример см. в разделе Функция умножения Якобиана с линейными наименьшими квадратами.

Для optimset, имя опции: JacobMult. См. раздел Имена текущих и устаревших опций.

MaxPCGIter

Максимальное число итераций PCG (предварительно кондиционированный сопряженный градиент), положительный скаляр. Значение по умолчанию: max(1,floor(numberOfVariables/2)). Дополнительные сведения см. в разделе Алгоритм, отражающий область доверия.

OptimalityTolerance

Допуск окончания для оптимальности первого порядка, положительный скаляр. Значение по умолчанию: 100*epsО нас 2.2204e-14. См. раздел Измерение оптимальности первого порядка.

Для optimset, имя опции: TolFun. См. раздел Имена текущих и устаревших опций.

PrecondBandWidth

Верхняя полоса пропускания устройства предварительного кондиционирования для ПХГ (предварительно кондиционированный сопряженный градиент). По умолчанию используется диагональное предварительное кондиционирование (верхняя полоса пропускания 0). При некоторых проблемах увеличение полосы пропускания уменьшает количество итераций PCG. Настройка PrecondBandWidth кому Inf использует прямую факторизацию (Cholesky), а не сопряженные градиенты (CG). Прямая факторизация в вычислительном отношении дороже, чем CG, но обеспечивает более качественный шаг к решению. Дополнительные сведения см. в разделе Алгоритм, отражающий область доверия.

SubproblemAlgorithm

Определяет способ вычисления шага итерации. Значение по умолчанию, 'cg', делает более быстрый, но менее точный шаг, чем 'factorization'. См. Доверие - Область - Отражающие наименьшие квадраты.

TolPCG

Допуск окончания для итерации PCG (предварительно кондиционированный сопряженный градиент), положительный скаляр. Значение по умолчанию: 0.1.

TypicalX

Типичный x значения. Количество элементов в TypicalX равно количеству переменных. Значение по умолчанию: ones(numberofvariables,1). lsqlin использование TypicalX внутренне для масштабирования. TypicalX имеет эффект только тогда, когда x имеет неограниченные компоненты, и когда TypicalX значение неограниченного компонента больше, чем 1.

interior-point Параметры алгоритма

ConstraintTolerance

Допуск для нарушения ограничения, положительный скаляр. Значение по умолчанию: 1e-8.

Для optimset, имя опции: TolCon. См. раздел Имена текущих и устаревших опций.

LinearSolver

Тип внутреннего линейного решателя в алгоритме:

  • 'auto' (по умолчанию) - Использовать 'sparse' если C матрица разрежена, 'dense' в противном случае.

  • 'sparse' - Использовать разреженную линейную алгебру. См. раздел Разреженные матрицы.

  • 'dense' - Использовать плотную линейную алгебру.

OptimalityTolerance

Допуск окончания для оптимальности первого порядка, положительный скаляр. Значение по умолчанию: 1e-8. См. раздел Измерение оптимальности первого порядка.

Для optimset, имя опции: TolFun. См. раздел Имена текущих и устаревших опций.

StepTolerance

Допуск окончания на x, положительный скаляр. Значение по умолчанию: 1e-12.

Для optimset, имя опции: TolX. См. раздел Имена текущих и устаревших опций.

'active-set' Параметры алгоритма

ConstraintTolerance

Допуск для нарушения ограничения, положительный скаляр. Значение по умолчанию: 1e-8.

Для optimset, имя опции: TolCon. См. раздел Имена текущих и устаревших опций.

ObjectiveLimit

Допуск (критерий остановки), являющийся скаляром. Если значение целевой функции ниже ObjectiveLimit и текущая точка осуществима, итерации останавливаются, потому что проблема, предположительно, является неограниченной. Значение по умолчанию: -1e20.

OptimalityTolerance

Допуск окончания для оптимальности первого порядка, положительный скаляр. Значение по умолчанию: 1e-8. См. раздел Измерение оптимальности первого порядка.

Для optimset, имя: TolFun. См. раздел Имена текущих и устаревших опций.

StepTolerance

Допуск окончания на x, положительный скаляр. Значение по умолчанию: 1e-8.

Для optimset, имя опции: TolX. См. раздел Имена текущих и устаревших опций.

Задача оптимизации, заданная как структура со следующими полями.

C

Матричный множитель в термине C*x - d

d

Аддитивная константа в термине C*x - d

Aineq

Матрица для линейных ограничений неравенства

bineq

Вектор для линейных ограничений неравенства

Aeq

Матрица для линейных ограничений равенства

beq

Вектор для линейных ограничений равенства
lbВектор нижних границ
ubВектор верхних границ

x0

Начальная точка для x

solver

'lsqlin'

options

Параметры, созданные с помощью optimoptions

Примечание

Нельзя использовать теплое начало с problem аргумент.

Типы данных: struct

Теплый начальный объект, заданный как объект, созданный с помощью optimwarmstart. Объект теплого начала содержит начальную точку и параметры, а также дополнительные данные для размера памяти при создании кода. См. раздел Передовые практики «Теплый старт».

Пример: ws = optimwarmstart(x0,options)

Выходные аргументы

свернуть все

Решение, возвращаемое как вектор, минимизирующий норму C*x-d со всеми границами и линейными ограничениями.

Теплый начальный объект решения, возвращенный как LsqlinWarmStart объект. Точка решения: wsout.X.

Вы можете использовать wsout в качестве входного теплого стартового объекта в последующем lsqlin звоните.

Объективное значение, возвращаемое как скалярное значение norm(C*x-d)^2.

Остатки решения, возвращенные в виде вектора C*x-d.

Условие остановки алгоритма, возвращаемое как целое число, определяющее причину остановки алгоритма. Ниже перечислены значения exitflag и соответствующие причины lsqlin остановлено.

3

Изменение остатка было меньше указанного допуска options.FunctionTolerance. (trust-region-reflective алгоритм)

2

Размер шага меньше options.StepTolerance, ограничения удовлетворены. (interior-point алгоритм)

1

Функция, сходящаяся к решению x.

0

Превышено число итераций options.MaxIterations.

-2

Проблема неосуществима. Или, для interior-point алгоритм, размер шага меньше options.StepTolerance, но ограничения не удовлетворяются.

-3Проблема безгранична.

-4

Неправильное кондиционирование предотвращает дальнейшую оптимизацию.

-8

Не удалось вычислить направление шага.

Сообщение о выходе для interior-point алгоритм может дать более подробную информацию о причине lsqlin остановлено, например превышение допуска. См. разделы Флаги выхода и Сообщения выхода.

Сводка процесса решения, возвращенная в виде структуры, содержащей информацию о процессе оптимизации.

iterations

Число итераций, выполненных решателем.

algorithm

Один из этих алгоритмов:

  • 'interior-point'

  • 'trust-region-reflective'

  • 'mldivide' для неограниченной проблемы

Для неограниченной проблемы, iterations = 0 и остальные записи в output структура пуста.

constrviolation

Нарушение ограничения, положительное для нарушенных ограничений (не возвращено для 'trust-region-reflective' алгоритм).

constrviolation = max([0;norm(Aeq*x-beq, inf);(lb-x);(x-ub);(A*x-b)])

message

Выйти из сообщения.

firstorderopt

Оптимальность первого порядка в решении. См. раздел Измерение оптимальности первого порядка.

linearsolver

Тип внутреннего линейного решателя, 'dense' или 'sparse' ('interior-point' только алгоритм)

cgiterations

Число итераций сопряженного градиента, выполненных решателем. Непустые только для 'trust-region-reflective' алгоритм.

См. раздел Структуры вывода.

Множители лагранжа, возвращаемые как структура со следующими полями.

lower

Нижние границы lb

upper

Верхние границы ub

ineqlin

Линейные неравенства

eqlin

Линейные равенства

См. раздел Структуры множителей Лагранжа.

Совет

  • Для проблем без ограничений можно использовать 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.

Расширенные возможности

.
Представлен до R2006a