Преобразуйте символьное выражение в указатель на функцию или файл
дополнительные опции использования заданы одним или несколькими 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
isempty, 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™. Например, смотрите, Генерируют код С от Символьных выражений Используя Приложение MATLAB Coder.
ccode
| daeFunction
| fortran
| matlabFunctionBlock
| odeFunction
| rehash
| simscapeEquation
| subs
| sym2poly
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.