Сгенерируйте код для fsolve

Этот пример показывает, как сгенерировать код С для решения систем нелинейных уравнений с fsolve.

Уравнение для решения

Система нелинейных уравнений, которые нужно решить, является

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)

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте