Main Content

lsqlin

제약 조건이 있는 선형 최소제곱 문제 풀기

설명

범위 또는 선형 제약 조건이 있는 선형 최소제곱 솔버입니다.

다음 형식의 최소제곱 곡선 피팅 문제를 풉니다.

minx12Cxd22 such that {Axb,Aeqx=beq,lbxub.

참고

lsqlin 솔버는 솔버 기반 접근법에만 적용됩니다. 두 가지 최적화 접근법에 대한 설명은 먼저 문제 기반 접근법 또는 솔버 기반 접근법 중 선택하기 항목을 참조하십시오.

예제

x = lsqlin(C,d,A,b)는 최소제곱 관점에서 선형 시스템 C*x = d를 풉니다. 여기에는 A*xb가 적용됩니다.

예제

x = lsqlin(C,d,A,b,Aeq,beq,lb,ub)는 선형 등식 제약 조건 Aeq*x = beq 및 범위 lbxub를 추가합니다. Aeqbeq와 같은 특정 제약 조건이 필요하지 않을 경우 []로 설정하십시오. x(i)의 하한이 비유계인 경우 lb(i) = -Inf를 설정하고, x(i)의 상한이 비유계인 경우 ub(i) = Inf를 설정하십시오.

예제

x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options)는 초기점 x0options에 지정된 최적화 옵션을 사용하여 최소화합니다. 이 옵션을 설정하려면 optimoptions를 사용하십시오. 초기점을 포함시키지 않으려면 x0 인수를 []로 설정하십시오. 그러나 'active-set' 알고리즘에는 비어 있지 않은 x0이 필요합니다.

x = lsqlin(problem)problem에 설명되어 있는 구조체인 problem의 최솟값을 구합니다. 점 표기법 또는 struct 함수를 사용하여 problem 구조체를 만듭니다. 또는 prob2struct를 사용하여 OptimizationProblem 객체에서 problem 구조체를 만듭니다.

예제

[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)는 warm start 객체 ws의 옵션을 사용하여 ws의 데이터에서 lsqlin를 시작합니다. 반환된 인수 wsout는 해에 해당하는 점을 wsout.X에 포함합니다. 이후 솔버 호출에서 wsout를 초기 warm start 객체로 사용하여 lsqlin이 더 빠르게 동작할 수 있습니다.

예제

모두 축소

선형 부등식 제약 조건을 사용하여 과결정 문제에 대한 C*x - d의 노름을 최소화하는 x를 구합니다.

문제와 제약 조건을 지정합니다.

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

선형 등식 및 부등식 제약 조건과 범위를 사용하여 과결정 문제에 대한 C*x - d의 노름을 최소화하는 x를 구합니다.

문제와 제약 조건을 지정합니다.

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         Resnorm  Primal Infeas    Dual Infeas  Complementarity  
    0    6.545534e-01   1.600492e+00   6.150431e-01     1.000000e+00  
    1    6.545534e-01   8.002458e-04   3.075216e-04     2.430833e-01  
    2    1.757343e-01   4.001229e-07   1.537608e-07     5.945636e-02  
    3    5.619277e-02   2.000615e-10   2.036997e-08     1.370933e-02  
    4    2.587604e-02   9.994783e-14   1.006816e-08     2.548273e-03  
    5    1.868939e-02   2.775558e-17   2.955102e-09     4.295807e-04  
    6    1.764630e-02   2.775558e-17   1.237758e-09     3.102850e-05  
    7    1.758561e-02   2.498002e-16   1.645864e-10     1.138719e-07  
    8    1.758538e-02   2.498002e-16   2.399331e-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 행렬은 열이 4개이고 행이 5개이므로 이 문제는 과결정 문제입니다. 즉, 선형 제약 조건 및 범위를 포함시키기 전에도 문제에 4개의 미지수와 5개 조건이 있습니다.

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: 'Minimum found that satisfies the constraints....'
          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]

0이 아닌 라그랑주 승수 필드에서 자세한 내용을 검토합니다. 먼저, 선형 부등식 제약 조건에 대해 라그랑주 승수를 검토합니다.

lambda.ineqlin
ans = 3×1

    0.0000
    0.2392
    0.0000

해가 해당 제약 조건 경계에 있으면 라그랑주 승수는 정확히 0이 아닙니다. 다시 말해서, 해당 제약 조건이 활성 상태이면 라그랑주 승수는 0이 아닙니다. 위의 경우, lambda.ineqlin(2)는 0이 아닙니다. 이는 제약 조건이 활성 상태인 경우 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의 처음 두 개 요소는 0이 아닙니다. x(1)x(2)가 해당 하한 -0.1에 있다는 것을 알 수 있습니다. lambda.upper의 모든 요소는 기본적으로 0이고, x의 모든 성분이 해당 상한 2보다 작다는 것을 알 수 있습니다.

수정된 문제를 빠르게 풀 수 있도록 warm start 객체를 만듭니다. 웜 스타트를 지원하기 위해 반복 과정 표시를 끄도록 옵션을 설정합니다.

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.

입력 인수

모두 축소

승수 행렬로, double형으로 구성된 행렬로 지정됩니다. C는 표현식 C*x - d에서 해 x의 승수를 나타냅니다. CM×N입니다. 여기서 M은 방정식 개수이고, Nx의 요소 개수입니다.

예: C = [1,4;2,5;7,8]

데이터형: double

상수 벡터로, double형으로 구성된 벡터로 지정됩니다. d는 표현식 C*x - d에서 부가 상수항을 나타냅니다. dM×1입니다. 여기서 M은 방정식 개수입니다.

예: d = [5;0;-12]

데이터형: double

선형 부등식 제약 조건으로, 실수 행렬로 지정됩니다. AM×N 행렬입니다. 여기서 M은 부등식 개수이고 N은 변수 개수(x0의 요소 개수)입니다. 대규모 문제의 경우, A를 희소 행렬로 전달하십시오.

A는 다음과 같이 M개의 선형 부등식을 인코딩합니다.

A*x <= b,

여기서 xN개의 변수 x(:)으로 구성된 열 벡터이고, bM개의 요소를 갖는 열 벡터입니다.

예를 들어, 다음 부등식을 살펴보겠습니다.

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

선형 부등식 제약 조건으로, 실수 벡터로 지정됩니다. bA 행렬과 관련된, 요소를 M개 가진 벡터입니다. b를 행 벡터로 전달하면 솔버는 내부적으로 b를 열 벡터 b(:)으로 변환합니다. 대규모 문제의 경우, b를 희소 벡터로 전달하십시오.

b는 다음과 같이 M개의 선형 부등식을 인코딩합니다.

A*x <= b,

여기서 xN개의 변수 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

선형 등식 제약 조건으로, 실수 행렬로 지정됩니다. AeqMe×N 행렬입니다. 여기서 Me는 부등식 개수이고 N은 변수 개수(x0의 요소 개수)입니다. 대규모 문제의 경우, Aeq를 희소 행렬로 전달하십시오.

Aeq는 다음과 같이 Me개의 선형 등식을 인코딩합니다.

Aeq*x = beq,

여기서 xN개의 변수 x(:)으로 구성된 열 벡터이고, beqMe개의 요소를 갖는 열 벡터입니다.

예를 들어, 다음 부등식을 살펴보겠습니다.

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

선형 등식 제약 조건으로, 실수 벡터로 지정됩니다. beqAeq 행렬과 관련된, 요소를 Me개 가진 벡터입니다. beq를 행 벡터로 전달하면 솔버는 내부적으로 beq를 열 벡터 beq(:)으로 변환합니다. 대규모 문제의 경우, beq를 희소 벡터로 전달하십시오.

beq는 다음과 같이 Me개의 선형 등식을 인코딩합니다.

Aeq*x = beq,

여기서 xN개의 변수 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

하한으로, double형으로 구성된 벡터 또는 배열로 지정됩니다. lblb x ub에서 요소별 하한을 나타냅니다.

내부적으로 lsqlin은 배열 lb를 벡터 lb(:)으로 변환합니다.

예: lb = [0;-Inf;4]x(1) ≥ 0, x(3) ≥ 4를 의미합니다.

데이터형: double

상한으로, double형으로 구성된 벡터 또는 배열로 지정됩니다. ublb x ub에서 요소별 상한을 나타냅니다.

내부적으로 lsqlin은 배열 ub를 벡터 ub(:)으로 변환합니다.

예: ub = [Inf;4;10]x(2) ≤ 4, x(3) ≤ 10을 의미합니다.

데이터형: double

풀이 과정의 초기점으로, 실수형 벡터 또는 배열로 지정됩니다.

  • 'interior-point' 알고리즘은 x0을 사용하지 않습니다.

  • x0'trust-region-reflective' 알고리즘의 선택적 인수입니다. 기본적으로 이 알고리즘은 x0을 0으로만 이루어진 벡터로 설정합니다. 이러한 성분 중 하나라도 범위 제약 조건을 위반하는 경우 lsqlin 함수는 디폴트 x0 전체를 범위를 충족하는 벡터로 재설정합니다. 디폴트가 아닌 x0의 성분이 범위를 위반하는 경우 lsqlin 함수는 범위를 충족하도록 이러한 성분을 설정합니다.

  • 비어 있지 않은 x0'active-set' 알고리즘의 필수 인수입니다. x0의 성분이 범위를 위반하는 경우 lsqlin 함수는 범위를 충족하도록 이러한 성분을 설정합니다.

예: 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' 알고리즘을 사용해 보십시오.

알고리즘을 선택하는 방법에 대한 자세한 내용은 알고리즘 선택하기 항목을 참조하십시오.

Diagnostics

최소화하거나 풀려는 함수에 대한 진단 정보를 표시합니다. 'on' 또는 'off'(디폴트 값)를 선택할 수 있습니다.

Display

명령줄에 반환되는 표시 수준입니다.

  • 'off' 또는 'none'은 출력값을 표시하지 않습니다.

  • 'final'은 최종 출력값만 표시합니다(디폴트 값).

'interior-point' 알고리즘과 'active-set' 알고리즘은 다음과 같은 추가 값을 허용합니다.

  • 'iter'은 반복 과정을 표시합니다.

  • 'iter-detailed'는 상세 종료 메시지와 함께 반복 과정을 표시합니다.

  • 'final-detailed'는 상세 종료 메시지와 함께 최종 출력값만 표시합니다.

MaxIterations

허용되는 최대 반복 횟수로, 양의 정수입니다. 디폴트 값은 'active-set' 알고리즘의 경우 2000이고, 그 외 알고리즘의 경우 200입니다.

optimset의 경우, 이 옵션 이름은 MaxIter입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

trust-region-reflective 알고리즘 옵션

FunctionTolerance

함수 값에 대한 종료 허용오차로, 양의 스칼라입니다. 디폴트 값은 100*eps, 약 2.2204e-14입니다.

optimset의 경우, 이 옵션 이름은 TolFun입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

JacobianMultiplyFcn

야코비 행렬의 곱셈 함수로, 함수 핸들로 지정됩니다. 특정 구조를 가진 대규모 문제의 경우, 이 함수는 C를 실제로 구성하지 않고 야코비 행렬 곱 C*Y, C'*Y 또는 C'*(C*Y)를 계산해야 합니다. 다음 형식으로 함수를 작성합니다.

W = jmfun(Jinfo,Y,flag)

여기서 JinfoC*Y(또는 C'*YC'*(C*Y))를 계산하는 데 사용되는 행렬을 포함합니다.

jmfunlsqlin이 전달하는 flag의 값에 따라 다음과 같이 세 가지 다른 곱 중 하나를 계산해야 합니다.

  • flag == 0이면 W = C'*(C*Y)입니다.

  • flag > 0이면 W = C*Y입니다.

  • flag < 0이면 W = C'*Y입니다.

어떠한 경우든 jmfunC를 명시적으로 구성할 필요가 없습니다. lsqlinJinfo를 사용하여 선조건자를 계산합니다. 필요한 경우 추가 파라미터를 제공하는 방법에 대한 자세한 내용은 추가 파라미터 전달하기 항목을 참조하십시오.

이에 대한 예제는 Jacobian Multiply Function with Linear Least Squares 항목을 참조하십시오.

optimset의 경우, 이 옵션 이름은 JacobMult입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

MaxPCGIter

최대 PCG(선조건 적용 켤레 기울기) 반복 횟수로, 양의 스칼라입니다. 디폴트 값은 max(1,floor(numberOfVariables/2))입니다. 자세한 내용은 Trust-Region-Reflective 알고리즘 항목을 참조하십시오.

OptimalityTolerance

1차 최적성에 대한 종료 허용오차입니다(양의 스칼라). 디폴트 값은 100*eps, 약 2.2204e-14입니다. 1차 최적성 측정값 항목을 참조하십시오.

optimset의 경우, 이 옵션 이름은 TolFun입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

PrecondBandWidth

PCG(선조건 적용 켤레 기울기)에 대한 선조건자의 상부 대역폭입니다. 기본적으로, 대각 선조건 지정이 사용됩니다(상부 대역폭: 0). 일부 문제에서는 대역폭을 늘리면 PCG 반복 횟수가 줄어듭니다. PrecondBandWidthInf로 설정하면 켤레 기울기(CG)가 아닌 직접 분해(촐레스키)가 사용됩니다. 직접 분해는 CG보다 계산량이 더 많지만 해를 구하기 위한 더 나은 품질의 스텝을 생성합니다. 자세한 내용은 Trust-Region-Reflective 알고리즘 항목을 참조하십시오.

SubproblemAlgorithm

반복 스텝이 계산되는 방식을 결정합니다. 디폴트 값 'cg''factorization'보다 더 빠르지만 정확도가 떨어지는 스텝을 실행합니다. Trust-Region-Reflective 최소제곱 항목을 참조하십시오.

TolPCG

PCG(선조건 적용 켤레 기울기) 반복에 대한 종료 허용오차로, 양의 스칼라입니다. 디폴트 값은 0.1입니다.

TypicalX

일반적인 x 값입니다. TypicalX의 요소 개수는 변수 개수와 동일합니다. 디폴트 값은 ones(numberofvariables,1)입니다. lsqlin은 스케일링에 내부적으로 TypicalX를 사용합니다. TypicalXx에 비유계 성분이 있고 비유계 성분의 TypicalX 값이 1보다 큰 경우에만 유효합니다.

interior-point 알고리즘 옵션

ConstraintTolerance

제약 조건 위반에 대한 허용오차로, 양의 스칼라입니다. 디폴트 값은 1e-8입니다.

optimset의 경우, 이 옵션 이름은 TolCon입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

LinearSolver

알고리즘의 내부 선형 솔버 유형입니다.

  • 'auto'(디폴트 값) — C 행렬이 희소 행렬이면 'sparse'를 사용하고, 그렇지 않으면 'dense'를 사용합니다.

  • 'sparse' — 희소 선형 대수를 사용합니다. 희소 행렬 항목을 참조하십시오.

  • 'dense' — 조밀한 선형 대수를 사용합니다.

OptimalityTolerance

1차 최적성에 대한 종료 허용오차입니다(양의 스칼라). 디폴트 값은 1e-8입니다. 1차 최적성 측정값 항목을 참조하십시오.

optimset의 경우, 이 옵션 이름은 TolFun입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

StepTolerance

x에 대한 종료 허용오차로, 양의 스칼라입니다. 디폴트 값은 1e-12입니다.

optimset의 경우, 이 옵션 이름은 TolX입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

'active-set' 알고리즘 옵션

ConstraintTolerance

제약 조건 위반에 대한 허용오차로, 양의 스칼라입니다. 디폴트 값은 1e-8입니다.

optimset의 경우, 이 옵션 이름은 TolCon입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

ObjectiveLimit

허용오차(중지 기준)로, 스칼라입니다. 목적 함수 값이 ObjectiveLimit 아래로 떨어지고 현재 점이 실현 가능하면 반복이 중단됩니다. 문제가 비유계이기 때문일 수 있습니다. 디폴트 값은 -1e20입니다.

OptimalityTolerance

1차 최적성에 대한 종료 허용오차입니다(양의 스칼라). 디폴트 값은 1e-8입니다. 1차 최적성 측정값 항목을 참조하십시오.

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

warm start 객체로, optimwarmstart를 사용하여 생성되는 객체로 지정됩니다. warm start 객체는 시작점과 옵션, 그리고 코드 생성 시 메모리 크기에 대한 선택적 데이터를 포함합니다. Warm Start Best Practices 항목을 참조하십시오.

예: ws = optimwarmstart(x0,options)

출력 인수

모두 축소

해로, C*x-d의 노름을 최소화하는 벡터로 반환됩니다. 여기에는 모든 범위와 선형 제약 조건이 적용됩니다.

해 warm start 객체로, LsqlinWarmStart 객체로 반환됩니다. 해에 해당하는 점은 wsout.X입니다.

이후 lsqlin 호출에서 wsout를 입력 warm start 객체로 사용할 수 있습니다.

목적 함수 값으로, 스칼라 값 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

해에서 계산된 1차 최적성입니다. 1차 최적성 측정값 항목을 참조하십시오.

linearsolver

내부 선형 솔버의 유형으로, 'dense' 또는 'sparse'입니다('interior-point' 알고리즘만 해당).

cgiterations

솔버가 수행한 켤레 기울기 반복 횟수입니다. 'trust-region-reflective' 알고리즘의 경우에만 비어 있지 않습니다.

Output Structures 항목을 참조하십시오.

라그랑주 승수로, 다음 필드를 가지는 구조체로 반환됩니다.

lower

하한 lb

upper

상한 ub

ineqlin

선형 부등식

eqlin

선형 등식

라그랑주 승수 구조체 항목을 참조하십시오.

  • 제약 조건이 없는 문제에는 mldivide(행렬 왼쪽 나눗셈)를 사용할 수 있습니다. 제약 조건이 없는 경우, lsqlinx = C\d를 반환합니다.

  • 풀려는 문제는 항상 볼록하므로 lsqlin은 전역해(단, 반드시 유일한 해일 필요는 없음)를 구합니다.

  • 문제에 선형 제약 조건은 많지만 변수가 거의 없는 경우 'active-set' 알고리즘을 사용해 보십시오. Quadratic Programming with Many Linear Constraints 항목을 참조하십시오.

  • lbub를 사용하여 암묵적으로 지정하는 대신 Aeqbeq를 사용하여 명시적으로 등식을 지정할 경우 더 나은 수치 결과를 얻을 가능성이 높습니다.

  • trust-region-reflective 알고리즘은 서로 동일한 상한과 하한을 허용하지 않습니다. 이 경우 다른 알고리즘을 사용하십시오.

  • 문제에 대해 지정된 입력 범위에 모순이 있는 경우 출력값 xx0이고 출력값 resnormresidual[]입니다.

  • C 행렬이 너무 커서 메모리에 맞지 않는 문제를 포함해, 특정 구조를 가진 일부 대규모 문제의 경우 야코비 행렬의 곱셈 함수와 함께 trust-region-reflective 알고리즘을 사용하여 풀 수 있습니다. 자세한 내용은 trust-region-reflective 알고리즘 옵션 항목을 참조하십시오.

알고리즘

모두 축소

Trust-Region-Reflective 알고리즘

이 방법은 [1]에 설명되어 있는 interior-reflective 뉴턴 방법을 기반으로 하는 부분공간 trust-region 방법입니다. 각 반복에는 선조건 적용 켤레 기울기(PCG) 방법을 사용한 대규모 선형 시스템의 근사해 풀이 작업이 포함됩니다. Trust-Region-Reflective 최소제곱 항목과 특히 대규모 선형 최소제곱 항목을 참조하십시오.

Interior-Point 알고리즘

'interior-point' 알고리즘은 quadprog'interior-point-convex' 알고리즘을 기반으로 합니다. 선형 최소제곱: Interior-Point 또는 Active-Set 항목을 참조하십시오.

Active-Set 알고리즘

'active-set' 알고리즘은 quadprog'active-set' 알고리즘을 기반으로 합니다. 자세한 내용은 선형 최소제곱: Interior-Point 또는 Active-Set 항목과 quadprog의 active-set 알고리즘 항목을 참조하십시오.

참고 문헌

[1] Coleman, T. F. and Y. Li. “A Reflective Newton Method for Minimizing a Quadratic Function Subject to Bounds on Some of the Variables,” SIAM Journal on Optimization, Vol. 6, Number 4, pp. 1040–1058, 1996.

[2] Gill, P. E., W. Murray, and M. H. Wright. Practical Optimization, Academic Press, London, UK, 1981.

웜 스타트

warm start 객체는 이전에 푼 문제의 활성 제약 조건 목록을 유지합니다. 솔버는 현재 문제를 풀기 위해 가능한 한 많은 활성 제약 조건 정보를 전달합니다. 이전 문제가 현재 문제와 너무 다른 경우, 활성 세트 정보가 재사용되지 않습니다. 이 경우, 솔버는 활성 제약 조건의 목록을 재빌드하기 위해 콜드 스타트를 효과적으로 실행합니다.

대체 기능

최적화 라이브 편집기 작업은 lsqlin에 대한 시각적 인터페이스를 제공합니다.

확장 기능

버전 내역

R2006a 이전에 개발됨