Main Content

quadprog에 대한 코드 생성을 위한 배경 정보

코드 생성이란?

코드 생성은 MATLAB® Coder™를 사용하여 MATLAB 코드를 C/C++ 코드로 변환하는 것을 말합니다. 코드를 생성하려면 MATLAB Coder 라이선스가 필요합니다.

일반적으로 MATLAB을 실행하지 않는 하드웨어에서 코드를 배포할 때 코드 생성을 수행합니다.

예제는 quadprog에 대한 코드 생성하기 항목을 참조하십시오. 다른 최적화 솔버에서의 코드 생성은 Generate Code for fmincon, fsolve에 대한 코드 생성하기 또는 Generate Code for lsqcurvefit or lsqnonlin 항목을 참조하십시오.

코드 생성 요구 사항

  • quadprogcodegen (MATLAB Coder) 함수 또는 MATLAB Coder 앱을 사용한 코드 생성을 지원합니다. 코드를 생성하려면 MATLAB Coder 라이선스가 있어야 합니다.

  • 타깃 하드웨어는 표준 배정밀도 부동소수점 계산을 지원해야 합니다. 단정밀도 또는 고정소수점 계산에 대해서는 코드를 생성할 수 없습니다.

  • 코드 생성 대상은 MATLAB 솔버와 동일한 수학 커널 라이브러리를 사용하지 않습니다. 따라서 특히 조건이 나쁜 문제인 경우에 코드 생성의 해가 솔버의 해와 다를 수 있습니다.

  • quadprog은 코드 생성 시 problem 인수를 지원하지 않습니다.

    [x,fval] = quadprog(problem) % Not supported
  • A, Aeq, lb, ub 같은 quadprog 입력 행렬은 모두 희소 행렬이 아니라 비희소 행렬이어야 합니다. full 함수를 사용하여 희소 행렬을 비희소 행렬로 변환할 수 있습니다.

  • lb 인수와 ub 인수는 H의 열 개수와 동일한 개수의 요소를 가지거나 비어 있어야 합니다([]).

  • 타깃 하드웨어가 무한 범위를 지원하지 않는 경우 optim.coder.infbound를 사용하십시오.

  • 임베디드 프로세서가 사용되는 고급 코드 최적화의 경우에는 Embedded Coder® 라이선스도 필요합니다.

  • quadprog에 대한 옵션을 포함하고 optimoptions를 사용하여 옵션을 지정해야 합니다. 옵션에는 'active-set'으로 설정된 Algorithm 옵션이 포함되어야 합니다.

    options = optimoptions('quadprog','Algorithm','active-set');
    [x,fval,exitflag] = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options);
  • 코드 생성에 지원되는 옵션은 다음과 같습니다.

    • Algorithm'active-set'이어야 함

    • ConstraintTolerance

    • MaxIterations

    • ObjectiveLimit

    • OptimalityTolerance

    • StepTolerance

  • 생성된 코드는 옵션에 대해 제한적인 오류 검사를 수행합니다. 옵션을 업데이트할 때 권장하는 방법은 점 표기법이 아니라 optimoptions를 사용하는 것입니다.

    opts = optimoptions('quadprog','Algorithm','active-set');
    opts = optimoptions(opts,'MaxIterations',1e4); % Recommended
    opts.MaxIterations = 1e4; % Not recommended
  • 파일에서 옵션을 불러오지 마십시오. 파일에서 불러오면 코드 생성이 실패할 수 있습니다. 대신 코드에서 옵션을 만드십시오.

  • 지원되지 않는 옵션을 지정하면 일반적으로 코드 생성 시에 해당 옵션이 무시됩니다. 안정된 결과를 얻기 위해, 지원되는 옵션만 지정하십시오.

생성된 코드에서 멀티스레드를 사용하지 않음

기본적으로 MATLAB 환경 외부에서 사용하도록 생성된 코드는 멀티스레드가 아닌 선형 대수 라이브러리를 사용합니다. 따라서 이 코드는 MATLAB 환경에서 실행되는 코드보다 상당히 느리게 실행될 수 있습니다.

타깃 하드웨어가 다중 코어를 갖는 경우 사용자 지정 멀티스레드 LAPACK 및 BLAS 라이브러리를 사용하여 성능을 높일 수 있습니다. 이러한 라이브러리를 생성된 코드에 포함하려면 Speed Up Linear Algebra in Generated Standalone Code by Using LAPACK Calls (MATLAB Coder) 항목을 참조하십시오.

참고 항목

| (MATLAB Coder) | |

관련 항목