이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
lsqlin
제약 조건이 있는 선형 최소제곱 문제 풀기
구문
설명
범위 또는 선형 제약 조건이 있는 선형 최소제곱 솔버입니다.
다음 형식의 최소제곱 곡선 피팅 문제를 풉니다.
참고
lsqlin
솔버는 솔버 기반 접근법에만 적용됩니다. 두 가지 최적화 접근법에 대한 설명은 먼저 문제 기반 접근법 또는 솔버 기반 접근법 중 선택하기 항목을 참조하십시오.
은 x
= lsqlin(problem
)problem
에 설명되어 있는 구조체인 problem
의 최솟값을 구합니다. 점 표기법 또는 struct
함수를 사용하여 problem
구조체를 만듭니다. 또는 prob2struct
를 사용하여 OptimizationProblem
객체에서 problem
구조체를 만듭니다.
예제
선형 부등식 제약 조건을 사용한 최소제곱
선형 부등식 제약 조건을 사용하여 과결정 문제에 대한 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 객체 반환하기
수정된 문제를 빠르게 풀 수 있도록 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.
입력 인수
C
— 승수 행렬
실수 행렬
승수 행렬로, double형으로 구성된 행렬로 지정됩니다. C
는 표현식 C*x - d
에서 해 x
의 승수를 나타냅니다. C
는 M
×N
입니다. 여기서 M
은 방정식 개수이고, N
은 x
의 요소 개수입니다.
예: C = [1,4;2,5;7,8]
데이터형: double
d
— 상수 벡터
실수형 벡터
상수 벡터로, double형으로 구성된 벡터로 지정됩니다. d
는 표현식 C*x - d
에서 부가 상수항을 나타냅니다. d
는 M
×1
입니다. 여기서 M
은 방정식 개수입니다.
예: d = [5;0;-12]
데이터형: double
A
— 선형 부등식 제약 조건
실수 행렬
선형 부등식 제약 조건으로, 실수 행렬로 지정됩니다. A
는 M
×N
행렬입니다. 여기서 M
은 부등식 개수이고 N
은 변수 개수(x0
의 요소 개수)입니다. 대규모 문제의 경우, A
를 희소 행렬로 전달하십시오.
A
는 다음과 같이 M
개의 선형 부등식을 인코딩합니다.
A*x <= b
,
여기서 x
는 N
개의 변수 x(:)
으로 구성된 열 벡터이고, b
는 M
개의 요소를 갖는 열 벡터입니다.
예를 들어, 다음 부등식을 살펴보겠습니다.
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
다음 제약 조건을 입력하여 부등식을 지정합니다.
A = [1,2;3,4;5,6]; b = [10;20;30];
예: x 성분의 합이 1 이하가 되도록 지정하려면 A = ones(1,N)
및 b = 1
을 사용하십시오.
데이터형: double
b
— 선형 부등식 제약 조건
실수형 벡터
선형 부등식 제약 조건으로, 실수 벡터로 지정됩니다. b
는 A
행렬과 관련된, 요소를 M
개 가진 벡터입니다. b
를 행 벡터로 전달하면 솔버는 내부적으로 b
를 열 벡터 b(:)
으로 변환합니다. 대규모 문제의 경우, b
를 희소 벡터로 전달하십시오.
b
는 다음과 같이 M
개의 선형 부등식을 인코딩합니다.
A*x <= b
,
여기서 x
는 N
개의 변수 x(:)
으로 구성된 열 벡터이고, A
는 크기가 M
×N
인 행렬입니다.
예를 들어, 다음 부등식을 살펴보겠습니다.
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30.
다음 제약 조건을 입력하여 부등식을 지정합니다.
A = [1,2;3,4;5,6]; b = [10;20;30];
예: x 성분의 합이 1 이하가 되도록 지정하려면 A = ones(1,N)
및 b = 1
을 사용하십시오.
데이터형: double
Aeq
— 선형 등식 제약 조건
실수 행렬
선형 등식 제약 조건으로, 실수 행렬로 지정됩니다. Aeq
는 Me
×N
행렬입니다. 여기서 Me
는 부등식 개수이고 N
은 변수 개수(x0
의 요소 개수)입니다. 대규모 문제의 경우, Aeq
를 희소 행렬로 전달하십시오.
Aeq
는 다음과 같이 Me
개의 선형 등식을 인코딩합니다.
Aeq*x = beq
,
여기서 x
는 N
개의 변수 x(:)
으로 구성된 열 벡터이고, beq
는 Me
개의 요소를 갖는 열 벡터입니다.
예를 들어, 다음 부등식을 살펴보겠습니다.
x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20,
다음 제약 조건을 입력하여 부등식을 지정합니다.
Aeq = [1,2,3;2,4,1]; beq = [10;20];
예: x 성분의 합이 1이 되도록 지정하려면 Aeq = ones(1,N)
및 beq = 1
을 사용하십시오.
데이터형: double
beq
— 선형 등식 제약 조건
실수형 벡터
선형 등식 제약 조건으로, 실수 벡터로 지정됩니다. beq
는 Aeq
행렬과 관련된, 요소를 Me
개 가진 벡터입니다. 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
— 하한
[]
(디폴트 값) | 실수형 벡터 또는 배열
하한으로, double형으로 구성된 벡터 또는 배열로 지정됩니다. lb
는 lb
≤ x
≤ ub
에서 요소별 하한을 나타냅니다.
내부적으로 lsqlin
은 배열 lb
를 벡터 lb(:)
으로 변환합니다.
예: lb = [0;-Inf;4]
는 x(1) ≥ 0
, x(3) ≥ 4
를 의미합니다.
데이터형: double
ub
— 상한
[]
(디폴트 값) | 실수형 벡터 또는 배열
상한으로, double형으로 구성된 벡터 또는 배열로 지정됩니다. ub
는 lb
≤ x
≤ ub
에서 요소별 상한을 나타냅니다.
내부적으로 lsqlin
은 배열 ub
를 벡터 ub(:)
으로 변환합니다.
예: ub = [Inf;4;10]
는 x(2) ≤ 4
, x(3) ≤ 10
을 의미합니다.
데이터형: double
x0
— 초기점
zeros(M,1)
, 여기서 M
은 제약 조건의 개수에 해당 (디폴트 값) | 실수형 벡터 또는 배열
풀이 과정의 초기점으로, 실수형 벡터 또는 배열로 지정됩니다.
'interior-point'
알고리즘은x0
을 사용하지 않습니다.x0
은'trust-region-reflective'
알고리즘의 선택적 인수입니다. 기본적으로 이 알고리즘은x0
을 0으로만 이루어진 벡터로 설정합니다. 이러한 성분 중 하나라도 범위 제약 조건을 위반하는 경우lsqlin
함수는 디폴트x0
전체를 범위를 충족하는 벡터로 재설정합니다. 디폴트가 아닌x0
의 성분이 범위를 위반하는 경우lsqlin
함수는 범위를 충족하도록 이러한 성분을 설정합니다.비어 있지 않은
x0
은'active-set'
알고리즘의 필수 인수입니다.x0
의 성분이 범위를 위반하는 경우lsqlin
함수는 범위를 충족하도록 이러한 성분을 설정합니다.
예: x0 = [4;-3]
데이터형: double
options
— lsqlin
에 대한 옵션
optimoptions
를 사용하여 생성되는 옵션 | optimset
등이 생성하는 구조체
lsqlin
에 대한 옵션으로, optimoptions
함수의 출력값 또는 optimset
등이 생성하는 구조체로 지정됩니다.
일부 옵션은 optimoptions
표시에 나타나지 않습니다. 이러한 옵션은 다음 표에서 기울임꼴로 표시되어 있습니다. 자세한 내용은 최적화 옵션 보기 항목을 참조하십시오.
모든 알고리즘
| 다음과 같은 알고리즘을 선택합니다.
문제에 제약 조건이 없는 경우 선형 제약 조건은 많지만 변수가 많지 않다면 알고리즘을 선택하는 방법에 대한 자세한 내용은 알고리즘 선택하기 항목을 참조하십시오. |
Diagnostics | 최소화하거나 풀려는 함수에 대한 진단 정보를 표시합니다. |
Display | 명령줄에 반환되는 표시 수준입니다.
|
MaxIterations | 허용되는 최대 반복 횟수로, 음이 아닌 정수입니다. 디폴트 값은
|
trust-region-reflective
알고리즘 옵션
FunctionTolerance | 함수 값에 대한 종료 허용오차로, 음이 아닌 스칼라입니다. 디폴트 값은
|
JacobianMultiplyFcn | 야코비 행렬의 곱셈 함수로, 함수 핸들로 지정됩니다. 특정 구조를 가진 대규모 문제의 경우, 이 함수는 W = jmfun(Jinfo,Y,flag) 여기서
어떠한 경우든 이에 대한 예제는 Jacobian Multiply Function with Linear Least Squares 항목을 참조하십시오.
|
MaxPCGIter | 최대 PCG(선조건 적용 켤레 기울기) 반복 횟수로, 양의 스칼라입니다. 디폴트 값은 |
OptimalityTolerance | 1차 최적성에 대한 종료 허용오차로, 음이 아닌 스칼라입니다. 디폴트 값은
|
PrecondBandWidth | PCG(선조건 적용 켤레 기울기)에 대한 선조건자의 상부 대역폭입니다. 기본적으로, 대각 선조건 지정이 사용됩니다(상부 대역폭: 0). 일부 문제에서는 대역폭을 늘리면 PCG 반복 횟수가 줄어듭니다. |
SubproblemAlgorithm | 반복 스텝이 계산되는 방식을 결정합니다. 디폴트 값 |
TolPCG | PCG(선조건 적용 켤레 기울기) 반복에 대한 종료 허용오차로, 양의 스칼라입니다. 디폴트 값은 |
TypicalX | 일반적인 |
interior-point
알고리즘 옵션
ConstraintTolerance | 제약 조건 위반에 대한 허용오차로, 음이 아닌 스칼라입니다. 디폴트 값은
|
LinearSolver | 알고리즘의 내부 선형 솔버 유형입니다. |
OptimalityTolerance | 1차 최적성에 대한 종료 허용오차로, 음이 아닌 스칼라입니다. 디폴트 값은
|
StepTolerance |
|
'active-set'
알고리즘 옵션
ConstraintTolerance | 제약 조건 위반에 대한 허용오차로, 양의 스칼라입니다. 디폴트 값은
|
ObjectiveLimit | 허용오차(중지 기준)로, 스칼라입니다. 목적 함수 값이 |
OptimalityTolerance | 1차 최적성에 대한 종료 허용오차입니다(양의 스칼라). 디폴트 값은
|
StepTolerance |
|
problem
— 최적화 문제
구조체
최적화 문제로, 다음 필드를 가진 구조체로 지정됩니다.
| 항 C*x - d 의 행렬 승수 |
| 항 C*x - d 의 부가 상수 |
| 선형 부등식 제약 조건에 대한 행렬 |
| 선형 부등식 제약 조건에 대한 벡터 |
| 선형 등식 제약 조건에 대한 행렬 |
| 선형 등식 제약 조건에 대한 벡터 |
lb | 하한으로 구성된 벡터 |
ub | 상한으로 구성된 벡터 |
| x 의 초기점 |
| 'lsqlin' |
| optimoptions 로 생성되는 옵션 |
참고
웜 스타트는 problem
인수와 함께 사용할 수 없습니다.
데이터형: struct
ws
— warm start 객체
optimwarmstart
를 사용하여 생성되는 객체
warm start 객체로, optimwarmstart
를 사용하여 생성되는 객체로 지정됩니다. warm start 객체는 시작점과 옵션, 그리고 코드 생성 시 메모리 크기에 대한 선택적 데이터를 포함합니다. Warm Start Best Practices 항목을 참조하십시오.
예: ws = optimwarmstart(x0,options)
출력 인수
x
— 해(Solution)
실수형 벡터
해로, C*x-d
의 노름을 최소화하는 벡터로 반환됩니다. 여기에는 모든 범위와 선형 제약 조건이 적용됩니다.
wsout
— 해 warm start 객체
LsqlinWarmStart
객체
해 warm start 객체로, LsqlinWarmStart
객체로 반환됩니다. 해에 해당하는 점은 wsout.X
입니다.
이후 lsqlin
호출에서 wsout
를 입력 warm start 객체로 사용할 수 있습니다.
resnorm
— 목적 함수 값
실수형 스칼라
목적 함수 값으로, 스칼라 값 norm(C*x-d)^2
으로 반환됩니다.
residual
— 해 잔차
실수형 벡터
해 잔차로, 벡터 C*x-d
로 반환됩니다.
exitflag
— 알고리즘 중지 조건
정수
알고리즘 중지 조건으로, 알고리즘이 중지된 이유를 나타내는 정수로 반환됩니다. 다음에는 exitflag
의 값과 이에 해당하는, lsqlin
이 중지된 이유가 나열되어 있습니다.
| 잔차의 변화량이 지정된 허용오차 |
| 스텝 크기가 |
| 함수가 해 |
| 반복 횟수가 |
| 문제가 실현 불가능한지 여부. 또는, |
-3 | 문제가 비유계입니다. |
| 조건이 나빠 최적화가 더 이상 진행되지 않습니다. |
| 스텝 방향을 계산할 수 없습니다. |
interior-point
알고리즘의 종료 메시지에 lsqlin
이 중지된 이유(예: 허용오차 초과)에 대한 자세한 정보가 제공될 수 있습니다. 종료 플래그와 종료 메시지 항목을 참조하십시오.
output
— 풀이 과정 요약
구조체
풀이 과정 요약으로, 최적화 과정에 대한 정보를 포함하는 구조체로 반환됩니다.
| 솔버가 실행한 반복 횟수입니다. |
| 다음 알고리즘 중 하나입니다.
제약 조건이 없는 문제의 경우 |
| 위반된 제약 조건에 대해 양수를 나타내는 제약 조건 위반 값입니다(
|
| 종료 메시지입니다. |
| 해에서 계산된 1차 최적성입니다. 1차 최적성 측정값 항목을 참조하십시오. |
linearsolver | 내부 선형 솔버의 유형으로, |
| 솔버가 수행한 켤레 기울기 반복 횟수입니다. |
Output Structures 항목을 참조하십시오.
lambda
— 라그랑주 승수
구조체
라그랑주 승수로, 다음 필드를 가지는 구조체로 반환됩니다.
| 하한 |
| 상한 |
| 선형 부등식 |
| 선형 등식 |
라그랑주 승수 구조체 항목을 참조하십시오.
팁
제약 조건이 없는 문제의 경우,
mldivide
(행렬 왼쪽 나눗셈) 또는lsqminnorm
을 사용해 보십시오. 제약 조건이 없는 경우,lsqlin
은x = C\d
를 반환합니다.풀려는 문제는 항상 볼록하므로
lsqlin
은 전역해(단, 반드시 유일한 해일 필요는 없음)를 구합니다.문제에 선형 제약 조건은 많지만 변수가 거의 없는 경우
'active-set'
알고리즘을 사용해 보십시오. Quadratic Programming with Many Linear Constraints 항목을 참조하십시오.lb
및ub
를 사용하여 묵시적으로 지정하는 대신Aeq
및beq
를 사용하여 명시적으로 등식을 지정할 경우 더 나은 수치 결과를 얻을 가능성이 높습니다.trust-region-reflective
알고리즘은 서로 동일한 상한과 하한을 허용하지 않습니다. 이 경우 다른 알고리즘을 사용하십시오.문제에 대해 지정된 입력 범위에 모순이 있는 경우 출력값
x
는x0
이고 출력값resnorm
및residual
은[]
입니다.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 알고리즘 항목을 참조하십시오.
제약 조건이 없는 문제
제약 조건이 없는 문제의 경우 lsqlin
은 decomposition
을 사용하여 C
계수 행렬의 분해를 수행합니다. lsqlin
이 C
행렬의 조건이 나쁨을 감지할 경우 lsqlin
은 QR 분해를 사용하여 문제를 풉니다.
참고 문헌
[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
에 대한 시각적 인터페이스를 제공합니다.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
lsqlin
은codegen
(MATLAB Coder) 함수 또는 MATLAB® Coder™ 앱을 사용한 코드 생성을 지원합니다. 코드를 생성하려면 MATLAB Coder 라이선스가 있어야 합니다.타깃 하드웨어는 표준 배정밀도 부동소수점 계산을 지원해야 합니다. 단정밀도 또는 고정소수점 계산에 대해서는 코드를 생성할 수 없습니다.
코드 생성 대상은 MATLAB 솔버와 동일한 수학 커널 라이브러리를 사용하지 않습니다. 따라서 특히 조건이 나쁜 문제인 경우에 코드 생성의 해가 솔버의 해와 다를 수 있습니다.
MATLAB에서 제약 조건이 없는 부족 결정 문제를 푸는 경우
lsqlin
은mldivide
를 호출하고, 이 함수는 기저해를 반환합니다. 코드 생성 시, 반환된 해는 최소 노름을 가지며, 이 노름은 대개 다릅니다.lsqlin
은 코드 생성 시problem
인수를 지원하지 않습니다.[x,fval] = lsqlin(problem) % Not supported
A
,Aeq
,lb
,ub
같은lsqlin
입력 행렬은 모두 희소 행렬이 아니라 비희소 행렬이어야 합니다.full
함수를 사용하여 희소 행렬을 비희소 행렬로 변환할 수 있습니다.lb
인수와ub
인수는C
의 열 개수와 동일한 개수의 요소를 가지거나 비어 있어야 합니다([]
).타깃 하드웨어가 무한 범위를 지원하지 않는 경우
optim.coder.infbound
를 사용하십시오.임베디드 프로세서가 사용되는 고급 코드 최적화의 경우에는 Embedded Coder® 라이선스도 필요합니다.
lsqlin
에 대한 옵션을 포함하고optimoptions
를 사용하여 옵션을 지정해야 합니다. 옵션에는'active-set'
으로 설정된Algorithm
옵션이 포함되어야 합니다.options = optimoptions('lsqlin','Algorithm','active-set'); [x,fval,exitflag] = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options);
코드 생성에 지원되는 옵션은 다음과 같습니다.
Algorithm
—'active-set'
이어야 함ConstraintTolerance
MaxIterations
ObjectiveLimit
OptimalityTolerance
StepTolerance
생성된 코드는 옵션에 대해 제한적인 오류 검사를 수행합니다. 옵션을 업데이트할 때 권장하는 방법은 점 표기법이 아니라
optimoptions
를 사용하는 것입니다.opts = optimoptions('lsqlin','Algorithm','active-set'); opts = optimoptions(opts,'MaxIterations',1e4); % Recommended opts.MaxIterations = 1e4; % Not recommended
파일에서 옵션을 불러오지 마십시오. 파일에서 불러오면 코드 생성이 실패할 수 있습니다. 대신 코드에서 옵션을 만드십시오.
지원되지 않는 옵션을 지정하면 일반적으로 코드 생성 시에 해당 옵션이 무시됩니다. 안정된 결과를 얻기 위해, 지원되는 옵션만 지정하십시오.
버전 내역
R2006a 이전에 개발됨R2024a: 제약 조건 없는 문제의 더욱 강인한 처리
정사각 입력 행렬 C
(행의 수와 열의 수가 같음)를 갖는, 조건이 나쁘면서 제약 조건이 없는 문제를 풀 때 솔버는 추가 스텝을 취합니다. 결과의 정확도가 향상될 수 있고 Inf
또는 NaN
결과를 얻을 가능성이 낮아집니다.
제약 조건이 없는 문제의 경우 output.algorithm
필드는 이제 이전의 'mldivide'
가 아닌 'direct'
입니다.
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)