matlabFunction

Преобразуйте символьное выражение в указатель на функцию или файл

Описание

пример

g = matlabFunction(f) преобразует символьное выражение или функцию f в MATLAB® функция с указателем g. Преобразованная функция может использоваться без Toolbox™ Symbolic Math.

пример

g = matlabFunction(f1,...,fN) преобразует f1,...,fN к функции MATLAB с N выходы. Указатель на функцию g. Каждый элемент f1,...,fN может быть символьным выражением, функцией или вектором символьных выражений или функций.

пример

g = matlabFunction(___,Name,Value) использует дополнительные опции, заданные одним или несколькими Name,Value аргументы в виде пар. Можно задать Name,Value после входных параметров, используемых в предыдущих синтаксисах.

Примеры

свернуть все

Преобразуйте символическое выражение r в функцию MATLAB с указателем ht. Преобразованная функция может использоваться без Symbolic Math Toolbox.

syms x y
r = sqrt(x^2 + y^2);
ht = matlabFunction(r)
ht =
  function_handle with value:
    @(x,y)sqrt(x.^2+y.^2)

Преобразуйте несколько символьных выражений с помощью входов, разделенных запятыми.

ht = matlabFunction(r, r^2)
ht =
  function_handle with value:
    @(x,y)deal(sqrt(x.^2+y.^2),x.^2+y.^2)

Создайте символическую функцию и преобразуйте ее в функцию MATLAB с помощью указателя ht.

syms x y
f(x,y) = x^3 + y^3;
ht = matlabFunction(f)
ht = 
  function_handle with value:
    @(x,y)x.^3+y.^3

Запишите сгенерированную функцию MATLAB в файл путем определения File опция. Существующие файлы перезаписываются. При записи в файл, matlabFunction оптимизирует код с помощью промежуточных переменных с именем t0, t1, …. Включите комментарии в файл при помощи Comments опция.

Напишите функцию MATLAB, сгенерированную из f в файл myfile.

syms x
f = x^2 + log(x^2);
matlabFunction(f,'File','myfile');
function f = myfile(x)
%MYFILE
%    F = MYFILE(X)

%    This function was generated by the Symbolic Math Toolbox version 8.4.
%    01-Sep-2019 00:00:00

t2 = x.^2;
f = t2+log(t2);

Включите комментарий Version: 1.1 в файле.

matlabFunction(f,'File','myfile','Comments','Version: 1.1')
function f = myfile(x)
...
%Version: 1.1
t2 = x.^2;
...

Когда вы преобразовываете символическое выражение в функцию MATLAB и записываете получившуюся функцию в файл, matlabFunction оптимизирует код по умолчанию. Этот подход может помочь упростить и ускорить дальнейшие расчеты, которые используют файл. Однако сгенерирование оптимизированного кода из некоторых символьных выражений и функций может быть длительным. Использование Optimize отключить оптимизацию кода.

Создайте символическое выражение.

syms x
r = x^2*(x^2 + 1);

Преобразование r в функцию MATLAB и запишите функцию в файл myfile. По умолчанию, matlabFunction создает файл, содержащий оптимизированный код.

f =  matlabFunction(r,'File','myfile');
function r = myfile(x)
%MYFILE
%    R = MYFILE(X)
t2 = x.^2;
r = t2.*(t2+1.0);

Отключите оптимизацию кода, задав значение Optimize на false.

f =  matlabFunction(r,'File','myfile','Optimize',false);
function r = myfile(x)
%MYFILE
%    R = MYFILE(X)
r = x.^2.*(x.^2+1.0);

Когда вы преобразовываете символьную матрицу в функцию MATLAB, matlabFunction представляет его плотной матрицей по умолчанию. Если большинство элементов входа символьной матрицы являются нулями, то более эффективный подход состоит в том, чтобы представлять его разреженной матрицей.

Создайте символьную диагональную матрицу 3 на 3.

syms x
A = diag(x*ones(1,3))
A =
[ x, 0, 0]
[ 0, x, 0]
[ 0, 0, x]

Преобразование A в функцию MATLAB, представляющую числовую матрицу, и записать результат в файл myfile1. По умолчанию сгенерированная функция MATLAB создает плотную числовую матрицу, задающую каждый элемент матрицы, включая все нулевые элементы.

f1 = matlabFunction(A,'File','myfile1');
function A = myfile1(x)
%MYFILE1
%    A = MYFILE1(X)
A = reshape([x,0.0,0.0,0.0,x,0.0,0.0,0.0,x],[3,3]);

Преобразование A в функцию MATLAB путем установки Sparse на true. Теперь сгенерированная функция MATLAB создает разреженную числовую матрицу, задавая только ненулевые элементы и принимая, что все другие элементы являются нулями.

f2 = matlabFunction(A,'File','myfile2','Sparse',true);
function A = myfile2(x)
%MYFILE2
%    A = MYFILE2(X)
A = sparse([1,2,3],[1,2,3],[x,x,x],3,3);

При преобразовании выражения в функцию MATLAB можно задать порядок входных параметров получившейся функции. Можно также задать, что некоторые входные параметры являются векторами вместо одиночных переменных.

Создайте символическое выражение.

syms x y z
r = x + y/2 + z/3;

Преобразование r в функцию MATLAB и запишите эту функцию в файл myfile. По умолчанию, matlabFunction использует алфавитный порядок входных параметров при преобразовании символьных выражений, которые содержат только строчные буквы для имен переменных.

matlabFunction(r,'File','myfile');
function r = myfile(x,y,z)
%MYFILE
%    R = MYFILE(X,Y,Z)
r = x+y./2.0+z./3.0;

Используйте Vars аргумент для задания порядка входных параметров для сгенерированной функции MATLAB.

matlabFunction(r,'File','myfile','Vars',[y z x]);
function r = myfile(y,z,x)
%MYFILE
%    R = MYFILE(Y,Z,X)
r = x+y./2.0+z./3.0;

Теперь преобразуйте выражение r к функции MATLAB, второй входной параметр которой является вектором.

syms x y z t
r = (x + y/2 + z/3)*exp(-t);
matlabFunction(r,'File','myfile','Vars',{t,[x y z]});
function r = myfile(t,in2)
%MYFILE
%    R = MYFILE(T,IN2)
x = in2(:,1);
y = in2(:,2);
z = in2(:,3);
r = exp(-t).*(x+y./2.0+z./3.0);

При преобразовании символьного выражения в функцию MATLAB можно задать имена выходных переменных. Обратите внимание, что matlabFunction без File аргумент (или с путем файла, заданным пустым символьным вектором) создает указатель на функцию и игнорирует Outputs флаг.

Создайте символические выражения r и q.

syms x y z
r = x^2 + y^2 + z^2;
q = x^2 - y^2 - z^2;

Преобразование r и q в функцию MATLAB и запишите полученную функцию в файл myfile, который возвращает вектор из двух элементов, name1 и name2.

f = matlabFunction(r,q,'File','myfile',...
                   'Outputs',{'name1','name2'});
function [name1,name2] = myfile(x,y,z)
%MYFILE
%    [NAME1,NAME2] = MYFILE(X,Y,Z)
t2 = x.^2;
t3 = y.^2;
t4 = z.^2;
name1 = t2+t3+t4;
if nargout > 1
    name2 = t2-t3-t4;
end

Можно ускорить оценку символьной функции в заданных координатах, преобразовав символьную функцию в анонимную функцию MATLAB. Использование matlabFunction для выполнения преобразования. Оценка символьной функции возвращает символьные числа, которые являются точными, в то время как оценка функции MATLAB возвращает числа двойной точности.

Создайте символьную функцию f(x,y,z) что является функцией x, y, и z.

syms f(x,y,z)
f(x,y,z) = y*z*sin(x) + x*sin(z)*cos(y) - z^3;

Создайте 3-D координаты сетки с заданными интервалами.

[xDouble,yDouble,zDouble] = meshgrid(1:20,1:50,1:20);

Вычислите символическую функцию в этих координатах. Измерьте прошедшее время с помощью пары tic и toc вызовы.

tic
fResult = f(xDouble,yDouble,zDouble);
toc
Elapsed time is 2.166672 seconds.

Здесь оценка происходит медленно, но она возвращает символьные числа, которые являются точными. Показать выборку результатов.

fResult(1:2,1:2,20)
ans = 

(20sin(1)+cos(1)sin(20)-800020sin(2)+2cos(1)sin(20)-800040sin(1)+cos(2)sin(20)-800040sin(2)+2cos(2)sin(20)-8000)[sym (20) * sin (sym (1)) + cos (sym (1)) * sin (sym (20)) - 8000, sym (20) * sin (sym (2)) + sym (2) * cos (sym (1) * sin (sym (20)) - 8000; sym (40) * sin (sym (1)) + cos (sym (2)) * sin (sym (20)) - 8000, sym (40) * sin (sym (2)) + sym (2) * cos (sym (2)) * sin (sym (20)) - 8000]

Чтобы ускорить оценку функции, преобразуйте символьную функцию в функцию MATLAB с помощью matlabFunction. Оцените функцию MATLAB в тех же координатах.

f1 = matlabFunction(f);
tic
fResult = f1(xDouble,yDouble,zDouble);
toc
Elapsed time is 0.029933 seconds.

Здесь оценка происходит быстрее. Вычисленная функция MATLAB возвращает числа двойной точности. Показать выборку результатов.

fResult(1:2,1:2,20)
ans = 2×2
103 ×

   -7.9827   -7.9808
   -7.9667   -7.9644

Входные параметры

свернуть все

Символьный вход для преобразования в функцию MATLAB, заданную в виде символьного выражения, функции, вектора или матрицы. При преобразовании разреженных символьных векторов или матриц используйте аргумент пары "имя-значение" 'Sparse',true.

Символьный вход, который будет преобразован в функцию MATLAB с N выходы, заданные как несколько символьных выражений, функций, векторов или матриц, разделенных запятыми.

matlabFunction не создает отдельный выходной аргумент для каждого элемента массива символьного вектора или матрицы. Для примера, g = matlabFunction([x + 1, y + 1]) создает функцию MATLAB с одним выходным аргументом, в то время как g = matlabFunction(x + 1, y + 1) создает функцию MATLAB с двумя выходными аргументами.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: matlabFunction(f,'File','myfile','Optimize',false)

Комментарии для включения в заголовок файла, заданные как вектор символов, массив ячеек из векторов символов или строковый вектор.

Путь к файлу, содержащему сгенерированную функцию MATLAB, заданную в виде вектора символов. Сгенерированная функция принимает аргументы типа double, и может использоваться без Symbolic Math Toolbox. Если File пуст, matlabFunction генерирует анонимную функцию. Если File не заканчивается .m, функция добавляет .m.

При записи в файл, matlabFunction оптимизирует код с помощью промежуточных переменных с именем t0, t1, .... Чтобы отключить оптимизацию кода, используйте Optimize аргумент.

Смотрите Запись функции MATLAB в файл с комментариями.

Флаг, препятствующий оптимизации кода, записанного в файл функции, заданный как false или true.

При записи в файл, ccode оптимизирует код с помощью промежуточных переменных с именем t0, t1, ....

matlabFunction без File аргумент (или путь к файлу, заданный пустым символьным вектором) создает указатель на функцию. При этом код не оптимизируется. Если вы пытаетесь применить оптимизацию кода путем установки Optimize на true, затем matlabFunction выдает ошибку.

См. «Отключить оптимизацию кода».

Флаг, который переключается между разреженной и плотной генерацией матрицы, задается как true или false. Когда вы задаете 'Sparse',trueсгенерированная функция MATLAB представляет символьные матрицы разреженными числовыми матрицами. Использование 'Sparse',true при преобразовании символьных матриц, содержащих много нулевых элементов. Часто операции с разреженными матрицами более эффективны, чем операции с плотными матрицами.

См. «Генерация разреженных матриц».

Порядок входа переменных или векторов в сгенерированной функции MATLAB, заданный как вектор символов, вектор символьных переменных или одномерный массив ячеек из векторов символов, символьных переменных или векторов символьных переменных.

Количество заданных входных переменных должно равняться или превышать количество свободных переменных в f. Не используйте те же имена для входных переменных, заданных Vars и выходные переменные, заданные как Outputs.

По умолчанию при преобразовании символьных выражений, которые содержат только строчные буквы для имен переменных, порядок алфавитный. При преобразовании символьных функций их входные параметры появляются перед другими переменными, а все другие переменные сортируются по алфавиту.

См. «Задание входных параметров для сгенерированной функции».

Имена выхода переменных, заданные как одномерный массив векторов символов.

Если вы не задаете имена выходных переменных, то они совпадают с именами, которые вы используете при вызове matlabFunction. Если вы звоните matlabFunction используя выражение вместо отдельных переменных, имена по умолчанию выхода переменных состоят из слова out за которым следует число, для примера, out3.

Не используйте те же имена для входных переменных, заданных Vars и выходные переменные, заданные как Outputs.

matlabFunction без File аргумент (или путь к файлу, заданный пустым символьным вектором) создает указатель на функцию. В этом случае, matlabFunction игнорирует Outputs флаг.

См. «Задание выходных переменных».

Выходные аргументы

свернуть все

Указатель на функцию, который может служить входному параметру к числовым функциям, возвращается как указатель на функцию MATLAB.

Совет

  • Когда вы используете File аргумент, использование rehash чтобы немедленно сделать сгенерированную функцию доступной. rehash обновляет список известных файлов MATLAB для директорий в пути поиска файлов.

  • Если на File опция пуста, затем возвращается анонимная функция.

  • Использование matlabFunction чтобы преобразовать одно или несколько символьных выражений в функцию MATLAB и записать полученную функцию в M-файл. Затем можно использовать сгенерированный M-файл для создания автономных приложений и веб-приложений с помощью MATLAB Compiler™. Для получения примера смотрите Развертывание сгенерированных функций MATLAB из Символьных выражений с MATLAB Compiler.

  • Использование matlabFunction чтобы преобразовать одно или несколько символьных выражений в функцию MATLAB и записать полученную функцию в M-файл. Затем можно использовать сгенерированный M-файл, чтобы создать код C or C++ с помощью MATLAB Coder™ app. например, смотрите Сгенерировать код С из Символьных Выражений Используя Приложение MATLAB Coder.

Введенный в R2008b