您可以使用matlabFunction
生成MATLAB®计算数值的函数句柄,就像在符号表达式中用数字替换变量一样。同时,matlabFunction
可以创建一个文件,该文件接受数字参数并计算应用于参数的符号表达式。生成的文件可用于任何MATLAB计算,无论运行该文件的计算机是否具有符号数学工具箱™函数的许可证。
matlabFunction
可以从任何符号表达式生成函数句柄。例如:
Syms x y r =√(x^2 + y^2);ht = matlabFunction(双曲正切(r))
@(x,y)tanh(√(x.^2+y.^2))
你可以使用这个函数句柄进行数值计算:
5 ht (5)
ans = 0.6089
你可以传递常用的MATLAB双精度数字或矩阵到函数句柄。例如:
cc =(5、3);dd =(闲置,5);ht (cc、dd)
Ans = 0.6089 0.9954
提示
一些符号表达式不能用MATLAB函数表示。matlabFunction
无法转换这些符号表达式,但发出警告。由于这些表达式可能会导致未定义的函数调用,因此始终要检查转换结果,并通过执行产生的函数来验证结果。
matlabFunction
从符号表达式中按字母顺序生成输入变量。这就是为什么函数要处理生成函数句柄有x
之前y
:
ht = @ (x, y)双曲正切(x。^ 2 + y ^ 2) ^ (1. / 2))
的方法可以指定函数句柄中输入变量的顺序var
选择。您可以通过传递字符向量或符号数组的单元格数组或符号变量的向量来指定顺序。例如:
Syms x y z r =√(x^2 + 3*y^2 + 5*z^2);ht1 = matlabFunction(tanh(r), 'vars', [y x z])
ht1 = function_handle价值:@ (y、x, z)双曲正切(sqrt (x ^ 2 + y ^ 2。* 3.0 + z ^ 2 * 5.0)。)
ht2 = matlabFunction(双曲正切(r)、“var”{' x ', ' y ', ' z '})
ht2 = function_handle价值:@ (x, y, z)双曲正切(sqrt (x ^ 2 + y ^ 2。* 3.0 + z ^ 2 * 5.0)。)
ht3 = matlabFunction(双曲正切(r)、“var”{“x”,[y z]})
ht3 = function_handle价值:@ (x, in2)双曲正切(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 % 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
).使用中间变量可以使表达式更短,从而使代码更容易阅读。
如果您不希望输入变量的默认字母顺序,可以使用var
控制订单的选项。继续这个示例,
matlabFunction (F,“文件”,“testMatrix.m”,“var”, [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,‘文件’,‘testMatrix。米”、“var”,[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];matlabFunction(w + z + F,'file','testMatrix.m',…“var”,[x y t])
出
后面跟着数字,例如:function out1 = testMatrix(x,y,t)…
输出
选择:
Syms x y z r = x^2 + y^2 + z^2;Q = x^2 - y^2 - z^2f = matlabFunction(r, q, 'file', 'new_function',…“输出”,{‘name1’,‘name2})
生成的函数返回name1
和name2
结果:
Function [name1,name2] = new_function(x,y,z)…