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