生成马铃薯来自符号表达的函数

您可以使用matlabfunction.生成matlab®功能句柄,计算数值,好像您在符号表达式中代替变量的数字。也,matlabfunction.可以创建一个接受数字参数的文件,并评估应用于参数的符号表达式。生成的文件可用于任何MATLAB计算,是否运行该文件的计算机是否具有符号数学工具箱™功能的许可证。

生成功能句柄

matlabfunction.可以从任何符号表达式生成函数句柄。例如:

syms x y r = sqrt(x ^ 2 + y ^ 2);ht = matlabfunction(tanh(r))
ht = function_handle with%:@(x,y)tanh(sqrt(x。^ 2 + y。^ 2))

您可以使用此功能句柄来数值计算:

HT(.5,.5)
ans = 0.6089.

您可以将通常的MATLAB双精度数字或矩阵传递给功能手柄。例如:

cc = [.5,3];dd = [-.5,.5];HT(CC,DD)
ans = 0.6089 0.9954

小费

使用MATLAB函数不能表示一些符号表达式。matlabfunction.无法转换这些符号表达式,但发出警告。由于这些表达式可能导致未定义的函数调用,因此始终检查转换结果并通过执行结果函数来验证结果。

控制变量的顺序

matlabfunction.从符号表达式以字母顺序生成输入变量。这就是函数处理的原因生成功能句柄具有X之前y

ht = @(x,y)tanh((x。^ 2 + y。^ 2)。^(1./2))

您可以使用函数句柄中的输入变量的顺序使用vars.选项。通过传递字符向量或符号阵列的单元格数组或符号变量的向量来指定订单。例如:

syms x y z r = sqrt(x ^ 2 + 3 * y ^ 2 + 5 * z ^ 2);ht1 = matlabfunction(tanh(r),'vars',[y x z])
ht1 = function_handle with%:@(y,x,z)tanh(sqrt(x。^ 2 + y。^ 2. * 3.0 + z。^ 2. * 5.0))
ht2 = matlabfunction(tanh(r),'vars',{'x','y','z'})
ht2 = function_handle具有值:@(x,y,z)tanh(sqrt(x。^ 2 + y。^ 2. * 3.0 + z. ^ 2. * 5.0))
ht3 = matlabfunction(tanh(r),'vars',{'x',[Y Z]})
ht3 = function_handle with value:@(x,in2)tanh(sqrt(x。^ 2 + In2(:,1)。^ 2. * 3.0 + In2(:,2)。^ 2. * 5.0))

生成文件

除函数句柄之外,您还可以从符号表达式生成文件。使用该文件指定文件名文件选项。通过包含文件名或文件路径的字符向量。如果您未指定文件的路径,matlabfunction.在当前文件夹中创建此文件。

此示例生成一个文件,用于计算符号矩阵的值F用于双精度输入T.X,和y

syms x y t z =(x ^ 3  -  tan(y))/(x ^ 3 + tan(y));w = z /(1 + t ^ 2);f = [w,(1 + t ^ 2)* x / y;(1 + T ^ 2)* X / Y,3 * Z  -  1];matlabfunction(f,'文件','testmatrix.m')

文件testmatrix.m.包含以下代码:

函数f = testmatrix(t,x,y)%testmatrix%f = testmatrix(t,x,y)t2 = x。^ 2;t3 = tan(y);t4 = t2。* x;t5 = t。^ 2;t6 = t5 + 1;t7 = 1./y;t8 = t6。* t7。* x;T9 = T3 + T4;t10 = 1./t9;f = [ - (t10。*(t3-t4))./ t6,t8; t8,- t10.*(3.*t3 - 3.*t2.*x) - 1];

matlabfunction.生成许多​​中间变量。这就是所谓的优化码。MATLAB生成中间变量作为小写字母T.例如,由自动生成的数字T32.。中间变量可以通过重用中间表达式更有效地使结果代码(例如T4.T6.T8.T9.,和T10在计算中F)。使用中间变量可以通过保持表达式简短来使代码更容易读取。

如果您不希望输入变量的默认字母顺序,请使用vars.控制订单的选项。继续这个例子,

matlabfunction(f,'文件''testmatrix.m''vars',[x y t])

生成等效于前一个文件的文件,输入不同的输入顺序:

函数f = testmatrix(x,y,t)...

名称输出变量

默认情况下,输出变量的名称与您使用呼叫的名称重合matlabfunction.。例如,如果你打电话matlabfunction.有变量F

syms x y t z =(x ^ 3  -  tan(y))/(x ^ 3 + tan(y));w = z /(1 + t ^ 2);f = [w,(1 + t ^ 2)* x / y;(1 + T ^ 2)* X / Y,3 * Z  -  1];matlabfunction(f,'file','testmatrix.m','vars',[x y t])

输出变量的生成名称也是F

函数f = testmatrix(x,y,t)...

如果你打电话matlabfunction.使用表达式而不是单个变量

syms x y t z =(x ^ 3  -  tan(y))/(x ^ 3 + tan(y));w = z /(1 + t ^ 2);f = [w,(1 + t ^ 2)* x / y;(1 + T ^ 2)* X / Y,3 * Z  -  1];matllabfunction(w + z + f,'file','testmatrix.m',...'vars',[x y t])
输出变量的默认名称由单词组成然后是数字,例如:
函数out1 = testmatrix(x,y,t)...
要自定义输出变量的名称,请使用输出选项:

Syms x y z r = x ^ 2 + y ^ 2 + z ^ 2;q = x ^ 2  -  y ^ 2  -  z ^ 2;f = matlabfunction(r,q,'文件','new_function',...'输出',{'name1','name2'})

生成的函数返回名称1名称2.结果:

函数[name1,name2] = new_function(x,y,z)...