Main Content

이 페이지의 내용은 이전 릴리스에 관한 것입니다. 해당 영문 페이지는 최신 릴리스에서 제거되었습니다.

lsqnonneg

음이 아닌 선형 최소제곱 문제 풀기

설명

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

minxCxd22, where x0.

참고

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

x = lsqnonneg(C,d)norm(C*x-d)를 최소화하는 벡터 x를 반환하며, 여기에는 x ≥ 0이 적용됩니다. 인수 Cd는 실수여야 합니다.

예제

x = lsqnonneg(C,d,options)는 구조체 options에 지정된 최적화 옵션을 사용하여 최소화합니다. 이 옵션을 설정하려면 optimset을 사용하십시오.

예제

x = lsqnonneg(problem)problem에 설명되어 있는 구조체인 problem의 최솟값을 구합니다.

[x,resnorm,residual] = lsqnonneg(___)는 이전의 모든 구문에 대해 잔차에 대한 2-노름의 제곱 값인 norm(C*x-d)^2을 추가로 반환하고, 잔차 d-C*x를 반환합니다.

예제

[x,resnorm,residual,exitflag,output] = lsqnonneg(___)lsqnonneg의 종료 상황을 설명하는 값 exitflag와 최적화 과정에 대한 정보가 포함된 구조체 output을 추가로 반환합니다.

[x,resnorm,residual,exitflag,output,lambda] = lsqnonneg(___)는 라그랑주 승수 벡터 lambda를 추가로 반환합니다.

예제

예제

모두 축소

선형 최소제곱 문제에 대해 음이 아닌 해를 계산하고, 그 결과를 비제약 문제의 해와 비교합니다.

문제 min||Cx-d||에 대해 C 행렬과 d 벡터를 준비합니다.

C = [0.0372    0.2869
     0.6861    0.7071
     0.6233    0.6245
     0.6344    0.6170];
 
d = [0.8587
     0.1781
     0.0747
     0.8405];

제약 조건이 있는 해와 제약 조건이 없는 해를 계산합니다.

x = lsqnonneg(C,d)
x = 2×1

         0
    0.6929

xunc = C\d
xunc = 2×1

   -2.5627
    3.1108

x의 모든 요소는 음수가 아니지만, xunc의 일부 요소는 음수입니다.

두 해에 대한 잔차의 노름을 계산합니다.

constrained_norm = norm(C*x - d)
constrained_norm = 0.9118
unconstrained_norm = norm(C*xunc - d)
unconstrained_norm = 0.6674

제약 조건은 잔차 노름을 오직 증가시키만 하므로 제약 조건이 없는 해의 잔차 노름이 더 작습니다.

lsqnonneg 완료 시 출력값을 보려면 Display 옵션을 'final'로 설정하십시오.

옵션을 만듭니다.

options = optimset('Display','final');

문제 min||Cx-d||에 대해 C 행렬과 d 벡터를 준비합니다.

C = [0.0372    0.2869
     0.6861    0.7071
     0.6233    0.6245
     0.6344    0.6170];

d = [0.8587
     0.1781
     0.0747
     0.8405];

options 구조체를 지정하여 lsqnonneg를 호출합니다.

x = lsqnonneg(C,d,options);
Optimization terminated.

출력값과 함께 lsqnonneg를 호출하여 해, 잔차 노름, 잔차 벡터를 구합니다.

문제 min||Cx-d||에 대해 C 행렬과 d 벡터를 준비합니다.

C = [0.0372    0.2869
     0.6861    0.7071
     0.6233    0.6245
     0.6344    0.6170];

d = [0.8587
     0.1781
     0.0747
     0.8405];

해와 잔차에 대한 정보를 얻습니다.

 [x,resnorm,residual] = lsqnonneg(C,d)
x = 2×1

         0
    0.6929

resnorm = 0.8315
residual = 4×1

    0.6599
   -0.3119
   -0.3580
    0.4130

반환되는 잔차 노름이 반환되는 잔차 벡터 노름의 제곱인지 확인합니다.

 norm(residual)^2
ans = 0.8315

lsqnonneg 완료 후 모든 출력 인수를 요청하여 해와 풀이 과정을 검토합니다.

문제 min||Cx-d||에 대해 C 행렬과 d 벡터를 준비합니다.

C = [0.0372    0.2869
     0.6861    0.7071
     0.6233    0.6245
     0.6344    0.6170];

d = [0.8587
     0.1781
     0.0747
     0.8405];

문제를 풀고 모든 출력 인수를 요청합니다.

[x,resnorm,residual,exitflag,output,lambda] = lsqnonneg(C,d)
x = 2×1

         0
    0.6929

resnorm = 0.8315
residual = 4×1

    0.6599
   -0.3119
   -0.3580
    0.4130

exitflag = 1
output = struct with fields:
    iterations: 1
     algorithm: 'active-set'
       message: 'Optimization terminated.'

lambda = 2×1

   -0.1506
   -0.0000

exitflag1이며, 이는 올바른 해임을 나타냅니다.

x(1) = 0이고 그에 대응하는 lambda(1) 0입니다. 이는 올바른 쌍대성을 표시합니다. 마찬가지로, x(2) > 0이고 그에 해당하는 lambda(2) = 0입니다.

입력 인수

모두 축소

선형 승수로, 실수 행렬로 지정됩니다. 다음 문제에서 변수 C를 나타냅니다.

minxCxd22.

호환성을 위해, C의 행 개수는 d의 길이와 같아야 합니다.

예: C = [1,2;3,-1;-4,4]

데이터형: double

부가 항으로, 실수형 벡터로 지정됩니다. 다음 문제에서 변수 d를 나타냅니다.

minxCxd22.

호환성을 위해, d의 길이는 C의 행 개수와 같아야 합니다.

예: d = [1;-6;5]

데이터형: double

최적화 옵션으로, optimset 등이 반환하는 구조체로 지정됩니다. optimset을 사용하여 options 구조체에서 다음 필드의 값을 설정하거나 변경할 수 있습니다. 자세한 내용은 최적화 옵션 참조 항목을 참조하십시오.

Display

표시 수준입니다.

  • 'notify'(디폴트 값)는 함수가 수렴하지 않는 경우에만 출력값을 표시합니다.

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

  • 'final'은 최종 출력값만 표시합니다.

TolX

x에 대한 종료 허용오차로, 양의 스칼라입니다. 디폴트 값은 10*eps*norm(C,1)*length(C)입니다. 허용오차와 중지 기준 항목을 참조하십시오.

예: options = optimset('Display','final')

데이터형: struct

문제 구조체로, 다음 필드를 가진 구조체로 지정됩니다.

필드 이름항목

C

실수 행렬

d

실수형 벡터

solver

'lsqnonneg'

options

optimset에서 반환되는 options 구조체

데이터형: struct

출력 인수

모두 축소

해로, 실수형 벡터로 반환됩니다. x의 길이는 d의 길이와 같습니다.

잔차 노름의 제곱으로, 음이 아닌 스칼라로 반환됩니다. norm(C*x-d)^2과 같습니다.

잔차로, 실수형 벡터로 반환됩니다. 잔차는 d - C*x입니다.

lsqnonneg가 중지된 이유로, 정수로 반환됩니다.

1

함수가 해 x로 수렴되었습니다.

0

반복 횟수가 options.MaxIter를 초과했습니다.

최적화 과정에 대한 정보로, 다음 필드를 가진 구조체로 반환됩니다.

iterations

수행된 반복 횟수

algorithm

'active-set'

message

종료 메시지

라그랑주 승수로, 실수형 벡터로 반환됩니다. 라그랑주 승수의 요소는 상보성 조건 x'*lambda = 0을 충족합니다. 즉, x(i)0에 가까우면 lambda(i) < 0이고, x(i) > 0인 경우 lambda(i)0에 가까워진다는 의미입니다.

  • d의 길이가 20을 초과하는 문제의 경우 lsqlinlsqnonneg보다 빠를 수 있습니다. d의 길이가 20 미만인 경우에는 일반적으로 lsqnonneg가 더 효율적입니다.

    C의 행 개수가 열 개수보다 더 많을 때(즉, 과결정 시스템임) 솔버 간에 변환하려는 경우

    [x,resnorm,residual,exitflag,output,lambda] = lsqnonneg(C,d)

    는 다음과 동일합니다.

    [m,n] = size(C);
    [x,resnorm,residual,exitflag,output,lambda_lsqlin] = ...
       lsqlin(C,d,-eye(n,n),zeros(n,1));

    유일한 차이점은 해당하는 라그랑주 승수의 부호가 반대라는 점입니다(즉, lambda = -lambda_lsqlin.ineqlin).

알고리즘

lsqnonneg에 사용되는 알고리즘은 [1]에 설명되어 있습니다. 이 알고리즘은 가능한 일련의 기저 벡터로 시작하며 관련 쌍대 벡터 lambda를 계산합니다. 그런 다음 다른 가능한 후보와 기저를 교환하기 위해 lambda의 최댓값에 해당하는 기저 벡터를 선택합니다. 이 작업은 lambda ≤ 0가 될 때까지 계속됩니다.

대체 기능

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

참고 문헌

[1] Lawson, C. L. and R. J. Hanson. Solving Least-Squares Problems. Upper Saddle River, NJ: Prentice Hall. 1974. Chapter 23, p. 161.

확장 기능

버전 내역

R2006a 이전에 개발됨

참고 항목

| | |