fsolve
のコード生成
この例では、fsolve
を使用して、非線形方程式の系を解くための C コードを生成する方法を示します。
解く方程式
解く非線形方程式の系は次のとおりです。
これらの方程式を F(x) = 0 の形式に変換します。
コード生成手順
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
問題を設定して
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
コード生成用の構成を作成します。この場合は、
'mex'
を使用します。cfg = coder.config('mex');
関数
solveroot
用のコードを生成します。codegen -config cfg solveroot
solveroot_mex.mexw64
のような名前の生成されたファイルを実行して、生成されたコードをテストします。[x,fval] = solveroot_mex
x = 0.3532 0.6061 fval = 1.0e-14 * -0.1998 -0.1887
参考
fsolve
| codegen
(MATLAB Coder) | optimoptions