Main Content

Generar código para fsolve

Este ejemplo muestra cómo generar código C para resolver sistemas de ecuaciones no lineales con fsolve.

Ecuación que se desea resolver

El sistema de ecuaciones no lineales que se desea resolver es

ee(x1+x2)=x2(1+x12)x1cos(x2)+x2sin(x1)=12.

Convierta las ecuaciones al formato F(x) = 0.

ee(x1+x2)x2(1+x12)=0x1cos(x2)+x2sin(x1)12=0.

Pasos de generación de código

  1. Escriba una función que calcule el lado izquierdo de las dos ecuaciones. Para la generación de código, el programa debe asignar todos los arreglos cuando se crean y no debe cambiar sus tamaños después de su creación.

    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. Escriba una función que configure el problema y llame a fsolve. La función debe referirse a root2d como un identificador de función, no como un nombre.

    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. Cree una configuración para la generación de código. En este caso, utilice 'mex'.

    cfg = coder.config('mex');
  4. Genere código para la función solveroot.

    codegen -config cfg solveroot
  5. Pruebe el código generado ejecutando el archivo generado, que se llama solveroot_mex.mexw64 o similar.

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

Consulte también

| (MATLAB Coder) |

Temas relacionados