lsqlin

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

Описание

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

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

minx12Cxd22 таким , что {Axb,Aeqx=beq,lbxub.

Примечание

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 = Cxd22

  • Невязка   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

В этом примере показано, как использовать опции nondefault для линейных методов наименьших квадратов.

Установите опции, чтобы использовать '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');

The '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-by- N, где M количество уравнений и N количество элементов x.

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

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

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

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

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

Линейные ограничения неравенства, заданные как действительная матрица. A является M-by- N матрица, где M количество неравенств и N - количество переменных (количество элементов в x0). Для больших задач передайте A как разреженная матрица.

A кодирует M линейное неравенство

A*x <= b,

где x является вектор-столбец N переменные x(:), и b - вектор-столбец с M элементы.

Для примера, чтобы задать

<reservedrangesplaceholder1> 1 + 2 <reservedrangesplaceholder0> 2  10
3 <reservedrangesplaceholder1> 1 + 4 <reservedrangesplaceholder0> 2  20
5 <reservedrangesplaceholder1> 1 + 6 <reservedrangesplaceholder0> 2  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-by- N.

Для примера рассмотрим эти неравенства:

<reservedrangesplaceholder1> 1 + 2 <reservedrangesplaceholder0> 2  10
3 <reservedrangesplaceholder1> 1 + 4 <reservedrangesplaceholder0> 2  20
5 <reservedrangesplaceholder1> 1 + 6 <reservedrangesplaceholder0> 2  30.

Задайте неравенства, введя следующие ограничения.

A = [1,2;3,4;5,6];
b = [10;20;30];

Пример: Чтобы указать, что компоненты x равны 1 или менее, используйте A = ones(1,N) и b = 1.

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

Линейные ограничения равенства, заданные как действительная матрица. Aeq является Me-by- N матрица, где Me количество равенств и N - количество переменных (количество элементов в x0). Для больших задач передайте Aeq как разреженная матрица.

Aeq кодирует Me линейные равенства

Aeq*x = beq,

где x является вектор-столбец N переменные x(:), и beq - вектор-столбец с Me элементы.

Для примера, чтобы задать

<reservedrangesplaceholder2> 1 + 2 <reservedrangesplaceholder1> 2 + 3 <reservedrangesplaceholder0> 3 = 10
2 <reservedrangesplaceholder2> 1 + 4 <reservedrangesplaceholder1> 2 + <reservedrangesplaceholder0> 3 = 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-by- N.

Для примера рассмотрим эти равенства:

<reservedrangesplaceholder2> 1 + 2 <reservedrangesplaceholder1> 2 + 3 <reservedrangesplaceholder0> 3 = 10
2 <reservedrangesplaceholder2> 1 + 4 <reservedrangesplaceholder1> 2 + <reservedrangesplaceholder0> 3 = 20.

Задайте равенства путем ввода следующих ограничений.

Aeq = [1,2,3;2,4,1];
beq = [10;20];

Пример: Чтобы указать, что компоненты x равны 1, используйте Aeq = ones(1,N) и beq = 1.

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

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

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

Пример: lb = [0;-Inf;4] означает x(1) ≥ 0, x(3) ≥ 4.

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

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

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

Пример: ub = [Inf;4;10] означает x(2) ≤ 4, x(3) ≤ 10.

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

Начальная точка для процесса решения, заданная как вектор действительных чисел или массив. The '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'

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

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

Когда задача не имеет ограничений, lsqlin вызовы mldivide внутренне.

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

Для получения дополнительной информации о выборе алгоритма смотрите Выбор алгоритма.

Диагностика

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

Display

Level of display вернулся в командную строку.

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

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

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

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

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

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

MaxIterations

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

Для optimset, имя опции MaxIter. См. «Текущие и устаревшие имена опций».

trust-region-reflective Опции алгоритма

FunctionTolerance

Отклонение завершения функции от значения, a положительной скалярной величины. Значение по умолчанию является 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 (предварительно обусловленный сопряженный градиент), a положительной скалярной величины. Значение по умолчанию является max(1,floor(numberOfVariables/2)). Для получения дополнительной информации см. Trust- Области Отражающий Алгоритм.

OptimalityTolerance

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

Для optimset, имя опции TolFun. См. «Текущие и устаревшие имена опций».

PrecondBandWidth

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

SubproblemAlgorithm

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

TolPCG

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

TypicalX

Типичные x значения. Количество элементов в TypicalX равен количеству переменных. Значение по умолчанию ones(numberofvariables,1). lsqlin использует TypicalX внутренне для масштабирования. TypicalX имеет эффект только тогда, когда x имеет неограниченные компоненты, и когда a 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' алгоритм.

См. «Структуры output».

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

lower

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

upper

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

ineqlin

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

eqlin

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

См. «Структуры множителя Лагранжа».

Совет

  • Для задач без ограничений можно использовать mldivide (матричное левое деление). Когда у вас нет ограничений, lsqlin возвращает   x = C\d.

  • Потому что решаемая задача всегда выпуклая, lsqlin находит глобальное, хотя и не обязательно уникальное решение.

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

  • Лучшие числовые результаты вероятны, если вы задаете равенства явно, используя Aeq и beq, вместо неявного, использование lb и ub.

  • The trust-region-reflective алгоритм не допускает равных верхних и нижних границ. Используйте другой алгоритм для этого случая.

  • Если заданные входные ограничения для задачи несогласованны, выход x является x0 и выходы resnorm и residual являются [].

  • Можно решить некоторые большие структурированные задачи, включая те, где C матрица слишком велика, чтобы помещаться в памяти, используя trust-region-reflective алгоритм с функцией умножения якобиана. Для получения дополнительной информации смотрите trust- области отражающие Опции Алгоритма.

Алгоритмы

свернуть все

Алгоритм, отражающий доверительную область

Этот метод является подпространственным методом доверительной области, основанным на внутренне-отражающем методе Ньютона, описанном в [1]. Каждая итерация включает приблизительное решение большой линейной системы с использованием метода предварительно обусловленных сопряженных градиентов (PCG). См. Trust- Области Светоотражающие наименьшие квадраты, и в частности Большие Шкалы Линейного метода наименьших квадратов .

Алгоритм внутренней точки

The 'interior-point' алгоритм основан на quadprog 'interior-point-convex' алгоритм. Смотрите Линейные методы наименьших квадратов: Interior-Point или Active-Set.

Алгоритм активного набора

The 'active-set' алгоритм основан на quadprog 'active-set' алгоритм. Для получения дополнительной информации смотрите Линейные методы наименьших квадратов: Interior-Point или Active-Set и активный-set quadprog Algorithm.

Ссылки

[1] Коулман, Т. Ф. и Я. Ли. «Отражающий метод Ньютона для минимизации квадратичной функции, зависящей от некоторых переменных», SIAM Journal по оптимизации, том 6, число 4, стр. 1040-1058, 1996.

[2] Гилл, П. Е., У. Мюррей и М. Х. Райт. Практическая оптимизация, Академическая пресса, Лондон, Великобритания, 1981.

Теплый старт

Объект теплого запуска поддерживает список активных ограничений из предыдущей решенной задачи. Решатель несет как можно больше активной информации о ограничениях, чтобы решить текущую задачу. Если предыдущая задача слишком отличается от текущей, никакая информация об активном наборе не используется повторно. В этом случае решатель эффективно выполняет холодный запуск в порядок, чтобы перестроить список активных ограничений.

Альтернативная функциональность

Приложение

Задача Optimize Live Editor обеспечивает визуальный интерфейс для lsqlin.

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

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