主要内容

生成MATLAB符号表达式中的函数

您可以使用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双精度的输入tx,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.中间变量可以通过重用中间表达式(例如t4t6t8t9,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})

生成的函数返回name1name2结果:

Function [name1,name2] = new_function(x,y,z)…