exponenta event banner

matlabFunction

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

Описание

пример

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

пример

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

пример

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

Примеры

свернуть все

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

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, и может использоваться без инструментария символьной математики. Если 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.

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

Представлен в R2008b