fsolveВ этом примере показано, как генерировать код C для решения систем нелинейных уравнений с помощью fsolve.
Система нелинейных уравнений для решения
+ x2sin (x1) = 12.
Преобразуйте уравнения в форму F (x) = 0.
x2sin (x1) − 12 = 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.1887fsolve | optimoptions | codegen (кодер MATLAB)