Main Content

fsolve에 대한 코드 생성하기

이 예제에서는 fsolve를 사용하여 비선형 연립방정식을 풀기 위한 C 코드를 생성하는 방법을 보여줍니다.

풀려는 방정식

풀려는 비선형 연립방정식은 다음과 같습니다.

ee(x1+x2)=x2(1+x12)x1cos(x2)+x2sin(x1)=12.

이 방정식을 F(x) = 0 형식으로 변환합니다.

ee(x1+x2)x2(1+x12)=0x1cos(x2)+x2sin(x1)12=0.

코드 생성 단계

  1. 두 방정식의 좌변을 계산하는 함수를 작성합니다. 코드를 생성하려면, 해당 프로그램은 생성되는 배열을 모두 할당해야 하고 생성 후 배열의 크기를 변경하지 않아야 합니다.

    function F = root2d(x)
    F = zeros(2,1); % Allocate return array
    F(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2);
    F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;
    end
  2. 문제를 설정하고 fsolve를 호출하는 함수를 작성합니다. 이 함수는 root2d를 이름이 아닌 함수 핸들로 참조해야 합니다.

    function [x,fval] = solveroot
    options = optimoptions('fsolve','Algorithm','levenberg-marquardt','Display','off');
    fun = @root2d;
    rng default
    x0 = rand(2,1);
    [x,fval] = fsolve(fun,x0,options);
    end
  3. 코드 생성을 위한 구성을 만듭니다. 이 경우 'mex'를 사용합니다.

    cfg = coder.config('mex');
  4. solveroot 함수에 대한 코드를 생성합니다.

    codegen -config cfg solveroot
  5. solveroot_mex.mexw64 또는 이와 유사한 이름의 생성된 파일을 실행하여 생성된 코드를 테스트합니다.

    [x,fval] = solveroot_mex
    x =
    
        0.3532
        0.6061
    
    
    fval =
    
       1.0e-14 *
    
       -0.1998
       -0.1887

참고 항목

| (MATLAB Coder) |

관련 항목