为 fsolve
生成代码
此示例说明如何用 fsolve
生成求解非线性方程组的 C 代码。
要求解的方程
要求解的非线性方程组是
将方程转换为 F(x) = 0 形式。
代码生成步骤
编写一个函数来计算这两个方程的左侧。对于代码生成,您的程序必须在创建所有数组时分配它们,并且在创建后不能更改其大小。
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