主要内容gydF4y2Ba

matlabFunctiongydF4y2Ba

将符号表达式转换为函数句柄或文件gydF4y2Ba

描述gydF4y2Ba

例子gydF4y2Ba

ggydF4y2Ba= matlabFunction (gydF4y2BafgydF4y2Ba)gydF4y2Ba转换符号表达式或函数gydF4y2BafgydF4y2Ba一个MATLABgydF4y2Ba®gydF4y2Ba函数处理gydF4y2BaggydF4y2Ba.如果有一个等效的MATLAB函数在运行gydF4y2Ba双gydF4y2Ba符号表达式或函数的数据类型,则可以在不使用symbol Math Toolbox™的情况下使用转换后的函数。gydF4y2Ba

例子gydF4y2Ba

ggydF4y2Ba= matlabFunction (gydF4y2Baf1,…,fNgydF4y2Ba)gydF4y2Ba转换gydF4y2Baf1,…,fNgydF4y2Ba到一个MATLAB函数用gydF4y2BaNgydF4y2Ba输出。函数句柄为gydF4y2BaggydF4y2Ba.的每个元素gydF4y2Baf1,…,fNgydF4y2Ba可以是符号表达式、函数或符号表达式或函数的向量。gydF4y2Ba

例子gydF4y2Ba

ggydF4y2Ba= matlabFunction (gydF4y2Ba___gydF4y2Ba,gydF4y2Ba名称,值gydF4y2Ba)gydF4y2Ba使用一个或多个指定的附加选项gydF4y2Ba名称,值gydF4y2Ba对参数。您可以指定gydF4y2Ba名称,值gydF4y2Ba在前面语法中使用的输入参数之后。gydF4y2Ba

例子gydF4y2Ba

全部折叠gydF4y2Ba

转换符号表达式gydF4y2BargydF4y2Ba到一个MATLAB函数的处理gydF4y2BahtgydF4y2Ba.转换后的函数可以在没有符号数学工具箱的情况下使用。gydF4y2Ba

Syms x y r =√(x^2 + y^2);ht = matlabFunction(右)gydF4y2Ba
@(x,y)√(x.^2+y.^2)gydF4y2Ba

使用逗号分隔输入转换多个符号表达式。gydF4y2Ba

ht = matlabFunction(r, r^2)gydF4y2Ba
ht与价值= function_handle: @ (x, y)(√6 (x ^ 2 + y ^ 2), x ^ 2 + y ^ 2)。gydF4y2Ba

创建一个符号函数,并将其转换为MATLAB函数与句柄gydF4y2BahtgydF4y2Ba.gydF4y2Ba

(x,y) = x^3 + y^3;ht = matlabFunction (f)gydF4y2Ba
@(x,y)x.^3+y.^3gydF4y2Ba

将生成的MATLAB函数写入文件,通过指定gydF4y2Ba文件gydF4y2Ba选择。已存在的文件被覆盖。当写入文件时,gydF4y2BamatlabFunctiongydF4y2Ba使用中间变量来优化代码gydF4y2Bat0gydF4y2Ba,gydF4y2Bat1gydF4y2Ba,……属性在文件中包含注释gydF4y2Ba评论gydF4y2Ba选择。gydF4y2Ba

编写MATLAB生成的函数gydF4y2BafgydF4y2Ba到文件gydF4y2BamyfilegydF4y2Ba.gydF4y2Ba

Syms x f = x^2 + log(x^2);matlabFunction (f,“文件”,“myfile”);gydF4y2Ba
这个函数是由符号数学工具箱8.4版本生成的。% 01- 9 -2019 00:00:00 t2 = x.^2;f = t2 +日志(t2);gydF4y2Ba

包括发表评论gydF4y2Ba版本:1.1gydF4y2Ba在文件中。gydF4y2Ba

matlabFunction (f,‘文件’,‘myfile’,‘评论’,版本:1.1)gydF4y2Ba
函数f = myfile(x)…%Version: 1.1 t2 = x.^2;...gydF4y2Ba

当您将符号表达式转换为MATLAB函数并将结果函数写入文件时,gydF4y2BamatlabFunctiongydF4y2Ba默认情况下优化代码。这种方法可以帮助简化和加速使用该文件的进一步计算。然而,从一些符号表达式和函数生成优化的代码可能非常耗时。使用gydF4y2Ba优化gydF4y2Ba禁用代码优化。gydF4y2Ba

创建一个符号表达式。gydF4y2Ba

Syms x r = x^2*(x^2 + 1);gydF4y2Ba

转换gydF4y2BargydF4y2Ba的MATLAB函数,并将函数写入文件gydF4y2BamyfilegydF4y2Ba.默认情况下,gydF4y2BamatlabFunctiongydF4y2Ba创建包含优化代码的文件。gydF4y2Ba

f = matlabFunction (r,“文件”,“myfile”);gydF4y2Ba
函数r = myfile(x) % myfile % r = myfile t2 = x.^2;r = t2。* (t2 + 1.0);gydF4y2Ba

通过设置的值禁用代码优化gydF4y2Ba优化gydF4y2Ba来gydF4y2Ba假gydF4y2Ba.gydF4y2Ba

f = matlabFunction (r,“文件”,“myfile”,“优化”,假);gydF4y2Ba
函数r = myfile(x) % myfile % r = myfile(x) r = x.^2.*(x.^2+1.0);gydF4y2Ba

当你把符号矩阵转换成MATLAB函数时,gydF4y2BamatlabFunctiongydF4y2Ba默认情况下用密集矩阵表示。如果输入符号矩阵的大部分元素都是零,则更有效的方法是用稀疏矩阵表示它。gydF4y2Ba

创建一个3 × 3的符号对角矩阵。gydF4y2Ba

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

转换gydF4y2Ba一个gydF4y2Ba的MATLAB函数表示一个数字矩阵,并将结果写入文件gydF4y2Bamyfile1gydF4y2Ba.默认情况下,生成的MATLAB函数创建密集的数字矩阵,指定矩阵的每个元素,包括所有零元素。gydF4y2Ba

f1 = matlabFunction(“文件”,“myfile1”);gydF4y2Ba
函数= myfile1 (x) % myfile1 % = myfile1 (x) =重塑([x, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, x], [3 3]);gydF4y2Ba

转换gydF4y2Ba一个gydF4y2Ba的MATLAB函数,通过设置gydF4y2Ba稀疏的gydF4y2Ba来gydF4y2Ba真正的gydF4y2Ba.现在,生成的MATLAB函数创建了稀疏数值矩阵,仅指定非零元素,并假设所有其他元素都是零。gydF4y2Ba

f2 = matlabFunction(‘文件’,‘myfile2’,‘稀疏’,真的);gydF4y2Ba
函数= myfile2 (x) % myfile2 % = myfile2 (x) =稀疏([1,2,3],[1,2,3],[x, x, x], 3, 3);gydF4y2Ba

当将表达式转换为MATLAB函数时,可以指定结果函数的输入参数的顺序。您还可以指定一些输入参数是向量而不是单个变量。gydF4y2Ba

创建一个符号表达式。gydF4y2Ba

Syms x y z r = x + y/2 + z/3;gydF4y2Ba

转换gydF4y2BargydF4y2Ba,并将该函数写入文件gydF4y2BamyfilegydF4y2Ba.默认情况下,gydF4y2BamatlabFunctiongydF4y2Ba在转换变量名只包含小写字母的符号表达式时,使用输入参数的字母顺序。gydF4y2Ba

matlabFunction (r,“文件”,“myfile”);gydF4y2Ba
函数r = myfile(x,y,z) % myfile % r = myfile(x,y,z) r = x+y /2.0+z /3.0;gydF4y2Ba

使用gydF4y2BavargydF4y2Ba参数指定生成的MATLAB函数的输入参数的顺序。gydF4y2Ba

matlabFunction (r,‘文件’,‘myfile’,“var”,[y z x]);gydF4y2Ba
函数r = myfile(y,z,x) % myfile % r = myfile(y,z,x) r = x+y./2.0+z./3.0;gydF4y2Ba

现在,转换一个表达式gydF4y2BargydF4y2Ba到第二个输入参数是矢量的MATLAB函数。gydF4y2Ba

Syms x y z t r = (x + y/2 + z/3)*exp(-t);matlabFunction (r,‘文件’,‘myfile’,“var”{t [x y z]});gydF4y2Ba
函数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);gydF4y2Ba

在将符号表达式转换为MATLAB函数时,可以指定输出变量的名称。请注意,gydF4y2BamatlabFunctiongydF4y2Ba没有gydF4y2Ba文件gydF4y2Ba参数(或使用空字符向量指定的文件路径)创建函数句柄并忽略gydF4y2Ba输出gydF4y2Ba国旗。gydF4y2Ba

创建符号表情gydF4y2BargydF4y2Ba和gydF4y2Ba问gydF4y2Ba.gydF4y2Ba

Syms x y z r = x^2 + y^2 + z^2;Q = x^2 - y^2 - z^2gydF4y2Ba

转换gydF4y2BargydF4y2Ba和gydF4y2Ba问gydF4y2Ba,并将结果函数写入文件gydF4y2BamyfilegydF4y2Ba,返回一个包含两个元素的向量,gydF4y2Baname1gydF4y2Ba和gydF4y2Baname2gydF4y2Ba.gydF4y2Ba

f = matlabFunction (r, q,‘文件’,‘myfile’,……“输出”,{‘name1’,‘name2});gydF4y2Ba
[name1,name2] = myfile % [name1,name2] = 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;结束gydF4y2Ba

通过将符号函数转换为匿名MATLAB函数,可以加快符号函数在给定坐标处的计算速度。使用gydF4y2BamatlabFunctiongydF4y2Ba执行转换。符号函数的求值返回精确的符号数,而MATLAB函数的求值返回双精度数。gydF4y2Ba

创建一个符号函数gydF4y2Baf (x, y, z)gydF4y2Ba这是一个函数gydF4y2BaxgydF4y2Ba,gydF4y2BaygydF4y2Ba,gydF4y2BazgydF4y2Ba.gydF4y2Ba

信谊gydF4y2Baf (x, y, z)gydF4y2BaF (x,y,z) = y*z*sin(x) + x*sin(z)*cos(y) - z^3;gydF4y2Ba

在指定的间隔创建三维网格坐标。gydF4y2Ba

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

在这些坐标处求符号函数的值。使用一对来测量经过的时间gydF4y2Ba抽搐gydF4y2Ba和gydF4y2BatocgydF4y2Ba调用。gydF4y2Ba

tic fResult = f(xDouble,yDouble,zDouble);tocgydF4y2Ba
运行时间为2.709857秒。gydF4y2Ba

在这里,计算很慢,但它返回精确的符号数字。展示结果的样本。gydF4y2Ba

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

(gydF4y2Ba 20.gydF4y2Ba 罪gydF4y2Ba (gydF4y2Ba 1gydF4y2Ba )gydF4y2Ba +gydF4y2Ba 因为gydF4y2Ba (gydF4y2Ba 1gydF4y2Ba )gydF4y2Ba 罪gydF4y2Ba (gydF4y2Ba 20.gydF4y2Ba )gydF4y2Ba -gydF4y2Ba 8000gydF4y2Ba 20.gydF4y2Ba 罪gydF4y2Ba (gydF4y2Ba 2gydF4y2Ba )gydF4y2Ba +gydF4y2Ba 2gydF4y2Ba 因为gydF4y2Ba (gydF4y2Ba 1gydF4y2Ba )gydF4y2Ba 罪gydF4y2Ba (gydF4y2Ba 20.gydF4y2Ba )gydF4y2Ba -gydF4y2Ba 8000gydF4y2Ba 40gydF4y2Ba 罪gydF4y2Ba (gydF4y2Ba 1gydF4y2Ba )gydF4y2Ba +gydF4y2Ba 因为gydF4y2Ba (gydF4y2Ba 2gydF4y2Ba )gydF4y2Ba 罪gydF4y2Ba (gydF4y2Ba 20.gydF4y2Ba )gydF4y2Ba -gydF4y2Ba 8000gydF4y2Ba 40gydF4y2Ba 罪gydF4y2Ba (gydF4y2Ba 2gydF4y2Ba )gydF4y2Ba +gydF4y2Ba 2gydF4y2Ba 因为gydF4y2Ba (gydF4y2Ba 2gydF4y2Ba )gydF4y2Ba 罪gydF4y2Ba (gydF4y2Ba 20.gydF4y2Ba )gydF4y2Ba -gydF4y2Ba 8000gydF4y2Ba )gydF4y2Ba

为了加快函数的计算速度,将符号函数转换为MATLAB函数使用gydF4y2BamatlabFunctiongydF4y2Ba.在相同的坐标处计算MATLAB函数。gydF4y2Ba

f1 = matlabFunction (f);tic fResult = f1(xDouble,yDouble,zDouble);tocgydF4y2Ba
运行时间为0.021283秒。gydF4y2Ba

在这里,评估更快。评估后的MATLAB函数返回双精度数字。展示结果的样本。gydF4y2Ba

fResult (1:2, 1:2, 20)gydF4y2Ba
ans =gydF4y2Ba2×2gydF4y2Ba10gydF4y2Ba3.gydF4y2Ba× -7.9827 -7.9808 -7.9667 -7.9644gydF4y2Ba

输入参数gydF4y2Ba

全部折叠gydF4y2Ba

要转换为MATLAB函数的符号输入,指定为符号表达式、函数、向量或矩阵。在转换稀疏符号向量或矩阵时,使用名称-值对参数gydF4y2Ba‘稀疏’,真的gydF4y2Ba.gydF4y2Ba

用符号输入转换为MATLAB函数gydF4y2BaNgydF4y2Ba输出,指定为几个符号表达式、函数、向量或矩阵,用逗号分隔。gydF4y2Ba

matlabFunctiongydF4y2Ba不会为符号向量或矩阵的每个元素创建单独的输出参数。例如,gydF4y2Bag = matlabFunction([x + 1, y + 1])gydF4y2Ba创建一个带有输出参数的MATLAB函数,whilegydF4y2Bag = matlabFunction(x + 1, y + 1)gydF4y2Ba创建一个带有两个输出参数的MATLAB函数。gydF4y2Ba

名称-值参数gydF4y2Ba

指定可选的逗号分隔的对gydF4y2Ba名称,值gydF4y2Ba参数。gydF4y2Ba的名字gydF4y2Ba参数名和gydF4y2Ba价值gydF4y2Ba为对应值。gydF4y2Ba的名字gydF4y2Ba必须出现在引号内。可以以任意顺序指定多个名称和值对参数gydF4y2BaName1, Value1,…,的家gydF4y2Ba.gydF4y2Ba

例子:gydF4y2BamatlabFunction (f,“文件”,“myfile”,“优化”,假)gydF4y2Ba

要包含在文件头中的注释、指定为字符向量、字符向量单元格数组或字符串向量。gydF4y2Ba

包含生成的MATLAB函数的文件的路径,指定为字符向量。生成的函数接受类型参数gydF4y2Ba双gydF4y2Ba,无需符号数学工具箱即可使用。如果gydF4y2Ba文件gydF4y2Ba是空的,gydF4y2BamatlabFunctiongydF4y2Ba生成匿名函数。如果gydF4y2Ba文件gydF4y2Ba并不以gydF4y2Ba.m,函数附加gydF4y2Ba.m.gydF4y2Ba

当写入文件时,gydF4y2BamatlabFunctiongydF4y2Ba使用中间变量来优化代码gydF4y2Bat0gydF4y2Ba,gydF4y2Bat1gydF4y2Ba,……要禁用代码优化,请使用gydF4y2Ba优化gydF4y2Ba论点。gydF4y2Ba

看到gydF4y2Ba编写MATLAB函数文件与注释gydF4y2Ba.gydF4y2Ba

阻止优化写入函数文件的代码的标志,指定为gydF4y2Ba假gydF4y2Ba或gydF4y2Ba真正的gydF4y2Ba.gydF4y2Ba

当写入文件时,gydF4y2BaccodegydF4y2Ba使用中间变量来优化代码gydF4y2Bat0gydF4y2Ba,gydF4y2Bat1gydF4y2Ba,……gydF4y2Ba

matlabFunctiongydF4y2Ba没有gydF4y2Ba文件gydF4y2Ba参数(或使用空字符向量指定的文件路径)创建函数句柄。在这种情况下,代码没有得到优化。如果您试图通过设置gydF4y2Ba优化gydF4y2Ba来gydF4y2Ba真正的gydF4y2Ba,然后gydF4y2BamatlabFunctiongydF4y2Ba抛出一个错误。gydF4y2Ba

看到gydF4y2Ba禁用代码优化gydF4y2Ba.gydF4y2Ba

在稀疏和密集矩阵生成之间切换的标志,指定为gydF4y2Ba真正的gydF4y2Ba或gydF4y2Ba假gydF4y2Ba.当你指定gydF4y2Ba‘稀疏’,真的gydF4y2Ba,生成的MATLAB函数用稀疏数值矩阵表示符号矩阵。使用gydF4y2Ba‘稀疏’,真的gydF4y2Ba当你转换包含许多零元素的符号矩阵时。通常,在稀疏矩阵上的操作比在密集矩阵上的操作更有效。gydF4y2Ba

看到gydF4y2Ba生成稀疏矩阵gydF4y2Ba.gydF4y2Ba

在生成的MATLAB函数中输入变量或向量的顺序,指定为字符向量、符号变量的向量或字符向量、符号变量或符号变量的向量的一维单元数组。gydF4y2Ba

指定的输入变量的数量必须等于或超过中自由变量的数量gydF4y2BafgydF4y2Ba.不要对指定的输入变量使用相同的名称gydF4y2BavargydF4y2Ba输出变量由gydF4y2Ba输出gydF4y2Ba.gydF4y2Ba

默认情况下,当转换变量名只包含小写字母的符号表达式时,顺序是按字母顺序排列的。当您转换符号函数时,它们的输入参数出现在其他变量的前面,并且所有其他变量都按字母顺序排序。gydF4y2Ba

看到gydF4y2Ba为生成的函数指定输入参数gydF4y2Ba.gydF4y2Ba

输出变量的名称,指定为字符向量的一维单元格数组。gydF4y2Ba

如果不指定输出变量名,那么它们将与调用时使用的名称一致gydF4y2BamatlabFunctiongydF4y2Ba.如果你叫gydF4y2BamatlabFunctiongydF4y2Ba使用表达式而不是单个变量,输出变量的默认名称由单词组成gydF4y2Ba出gydF4y2Ba后面跟着一个数字,例如,gydF4y2Baout3gydF4y2Ba.gydF4y2Ba

不要对指定的输入变量使用相同的名称gydF4y2BavargydF4y2Ba输出变量由gydF4y2Ba输出gydF4y2Ba.gydF4y2Ba

matlabFunctiongydF4y2Ba没有gydF4y2Ba文件gydF4y2Ba参数(或使用空字符向量指定的文件路径)创建函数句柄。在这种情况下,gydF4y2BamatlabFunctiongydF4y2Ba忽略了gydF4y2Ba输出gydF4y2Ba国旗。gydF4y2Ba

看到gydF4y2Ba指定输出变量gydF4y2Ba.gydF4y2Ba

输出参数gydF4y2Ba

全部折叠gydF4y2Ba

可以作为数值函数的输入参数的函数句柄,作为MATLAB函数句柄返回。gydF4y2Ba

限制gydF4y2Ba

  • 一些符号函数没有相应的MATLAB函数操作gydF4y2Ba双gydF4y2Ba数据类型,例如gydF4y2Ba简化gydF4y2Ba和gydF4y2Ba解决gydF4y2Ba,作为符号函数保存在转换后的MATLAB函数句柄或文件中。由这些函数组成的转换文件不能使用gydF4y2BaMATLAB编码器™gydF4y2Ba或gydF4y2BaMATLAB编译器™gydF4y2Ba.您需要创建自己的函数gydF4y2Ba双gydF4y2Ba数据类型来替换这些符号函数。如果您对无法部署的符号函数感兴趣,请与我们联系gydF4y2BaMathWorksgydF4y2Ba技术支持金宝appgydF4y2Ba.gydF4y2Ba

提示gydF4y2Ba

  • 当你使用gydF4y2Ba文件gydF4y2Ba参数,使用gydF4y2Ba重新处理gydF4y2Ba使生成的函数立即可用。gydF4y2Ba重新处理gydF4y2Ba更新MATLAB中搜索路径上目录的已知文件列表。gydF4y2Ba

  • 如果gydF4y2Ba文件gydF4y2Ba选项为空,则返回一个匿名函数。gydF4y2Ba

  • 使用gydF4y2BamatlabFunctiongydF4y2Ba将一个或多个符号表达式转换为MATLAB函数,并将得到的函数写入m文件。然后,你可以使用生成的m文件创建独立的应用程序和web应用程序使用gydF4y2BaMATLAB编译器gydF4y2Ba.例如,请参见gydF4y2Ba使用MATLAB编译器从符号表达式部署生成的MATLAB函数gydF4y2Ba.gydF4y2Ba

  • 使用gydF4y2BamatlabFunctiongydF4y2Ba将一个或多个符号表达式转换为MATLAB函数,并将得到的函数写入m文件。然后您可以使用生成的m文件来创建C或c++代码使用gydF4y2BaMATLAB编码器gydF4y2Ba例如,见gydF4y2Ba使用MATLAB编码器应用程序从符号表达式生成C代码gydF4y2Ba.gydF4y2Ba

介绍了R2008bgydF4y2Ba