Преобразуйте символьное выражение в указатель на функцию или файл
использует дополнительные опции, заданные одним или несколькими 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 =
Чтобы ускорить оценку функции, преобразуйте символьную функцию в функцию 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
f
- Символьный вход, который будет преобразован в функцию MATLABСимвольный вход для преобразования в функцию MATLAB, заданную в виде символьного выражения, функции, вектора или матрицы. При преобразовании разреженных символьных векторов или матриц используйте аргумент пары "имя-значение" 'Sparse',true
.
f1,...,fN
- Символьный вход, который будет преобразован в функцию MATLAB с N
выходыСимвольный вход, который будет преобразован в функцию 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)
'Comments'
- Комментарии для включения в заголовок файлаКомментарии для включения в заголовок файла, заданные как вектор символов, массив ячеек из векторов символов или строковый вектор.
'File'
- Путь к файлу, содержащему сгенерированную функцию MATLABПуть к файлу, содержащему сгенерированную функцию MATLAB, заданную в виде вектора символов. Сгенерированная функция принимает аргументы типа double
, и может использоваться без Symbolic Math Toolbox. Если File
пуст, matlabFunction
генерирует анонимную функцию. Если File
не заканчивается .m
, функция добавляет .m
.
При записи в файл, matlabFunction
оптимизирует код с помощью промежуточных переменных с именем t0
, t1
, .... Чтобы отключить оптимизацию кода, используйте Optimize
аргумент.
'Optimize'
- Флаг, препятствующий оптимизации кода, записанного в файл функцииtrue
(по умолчанию) | false
Флаг, препятствующий оптимизации кода, записанного в файл функции, заданный как false
или true
.
При записи в файл, ccode
оптимизирует код с помощью промежуточных переменных с именем t0
, t1
, ....
matlabFunction
без File
аргумент (или путь к файлу, заданный пустым символьным вектором) создает указатель на функцию. При этом код не оптимизируется. Если вы пытаетесь применить оптимизацию кода путем установки Optimize
на true
, затем matlabFunction
выдает ошибку.
См. «Отключить оптимизацию кода».
'Sparse'
- Флаг, который переключается между разреженной и плотной генерацией матрицыfalse
(по умолчанию) | true
Флаг, который переключается между разреженной и плотной генерацией матрицы, задается как true
или false
. Когда вы задаете 'Sparse',true
сгенерированная функция MATLAB представляет символьные матрицы разреженными числовыми матрицами. Использование 'Sparse',true
при преобразовании символьных матриц, содержащих много нулевых элементов. Часто операции с разреженными матрицами более эффективны, чем операции с плотными матрицами.
См. «Генерация разреженных матриц».
'Vars'
- Порядок входных переменных или векторов в сгенерированной функции MATLABПорядок входа переменных или векторов в сгенерированной функции MATLAB, заданный как вектор символов, вектор символьных переменных или одномерный массив ячеек из векторов символов, символьных переменных или векторов символьных переменных.
Количество заданных входных переменных должно равняться или превышать количество свободных переменных в f
. Не используйте те же имена для входных переменных, заданных Vars
и выходные переменные, заданные как Outputs
.
По умолчанию при преобразовании символьных выражений, которые содержат только строчные буквы для имен переменных, порядок алфавитный. При преобразовании символьных функций их входные параметры появляются перед другими переменными, а все другие переменные сортируются по алфавиту.
См. «Задание входных параметров для сгенерированной функции».
'Outputs'
- Имена выходных переменныхИмена выхода переменных, заданные как одномерный массив векторов символов.
Если вы не задаете имена выходных переменных, то они совпадают с именами, которые вы используете при вызове matlabFunction
. Если вы звоните matlabFunction
используя выражение вместо отдельных переменных, имена по умолчанию выхода переменных состоят из слова out
за которым следует число, для примера, out3
.
Не используйте те же имена для входных переменных, заданных Vars
и выходные переменные, заданные как Outputs
.
matlabFunction
без File
аргумент (или путь к файлу, заданный пустым символьным вектором) создает указатель на функцию. В этом случае, matlabFunction
игнорирует Outputs
флаг.
См. «Задание выходных переменных».
g
- Указатель на функцию, который может служить входным аргументом в числовых функцияхУказатель на функцию, который может служить входному параметру к числовым функциям, возвращается как указатель на функцию 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.
ccode
| daeFunction
| fortran
| matlabFunctionBlock
| odeFunction
| rehash
| simscapeEquation
| subs
| sym2poly
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.