fsolve
Этот пример показывает, как сгенерировать код С для решения систем нелинейных уравнений с fsolve
.
Система нелинейных уравнений, которые нужно решить, является
Преобразуйте уравнения в вид F (x) = 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.1887
fsolve
| optimoptions
| codegen
(MATLAB CODER)