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

相关主题