主要内容

生成代码fsolve

这个例子展示了如何生成C代码来求解非线性方程组fsolve

待解方程

要解的非线性方程组是

e e x 1 + x 2 x 2 1 + x 1 2 x 1 因为 x 2 + x 2 x 1 1 2

把方程转换成这个形式Fx) = 0

e e x 1 + x 2 x 2 1 + x 1 2 0 x 1 因为 x 2 + x 2 x 1 1 2 0.

代码生成步骤

  1. 写一个函数来计算这两个方程的左边。对于代码生成,您的程序必须在创建数组时分配所有数组,并且在创建后不能更改它们的大小。

    函数F = root2d(x) F = 0 (2,1);分配返回数组F (1) = exp (exp (- x (x (1) + (2)))) - x (2) * (1 + x (1) ^ 2);F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;结束
  2. 编写一个函数来设置问题并调用fsolve.函数必须引用root2d作为函数句柄,而不是名称。

    函数[x,fval] = solveroot options = optimoptions(“fsolve”“算法”“levenberg-marquardt”“显示”“关闭”);Fun = @root2d;rng默认的X0 = rand(2,1);[x,fval] = fsolve(fun,x0,options);结束
  3. 为代码生成创建配置。在这种情况下,使用墨西哥人的

    CFG = code .config(墨西哥人的);
  4. solveroot函数。

    codegen配置cfgsolveroot
  5. 通过运行生成的文件来测试生成的代码solveroot_mex.mexw64或类似的。

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

另请参阅

|(MATLAB编码器)|

相关的话题