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. 2 つの方程式の左辺を計算する関数を記述します。コード生成では、プログラムが作成時にすべての配列を割り当てなければならず、作成後はそれらのサイズを変更してはなりません。

    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) |

関連するトピック