主要内容

生成MATLAB来自符号表达式的函数

你可以使用matlabFunction生成MATLAB®函数句柄,它计算数值,就像在符号表达式中用数字替换变量一样。同时,matlabFunction可以创建一个接受数字参数并计算应用于参数的符号表达式的文件。生成的文件可用于任何MATLAB计算,无论运行该文件的计算机是否具有Symbolic Math Toolbox™函数的许可证。

生成函数句柄

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

Syms x y r =√(x^2 + y^2);t = matlabFunction(tan (r))
Ht = function_handle with value: @(x,y)tanh(根号(x.^2+y.^2))

你可以使用这个函数句柄进行数值计算:

5 ht (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))

方法指定函数句柄中输入变量的顺序var选择。您可以通过传递字符向量或符号数组的单元格数组或符号变量的向量来指定顺序。例如:

Syms x y z r =√(x²+ 3*y²+ 5*z²);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³- tan(y))/(x³+ tan(y));W = z/(1 + t²);F = [w,(1 + t²)*x/y;(1 + t²)*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.中间变量可以通过重用中间表达式(例如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³- tan(y))/(x³+ tan(y));W = z/(1 + t²);F = [w, (1 + t²)*x/y;(1 + t²)*x/y,3*z - 1];matlabFunction (F,‘文件’,‘testMatrix。M ','vars',[x y t])

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

函数F = testMatrix(x,y,t)…

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

Syms x y t z = (x³- tan(y))/(x³+ tan(y));W = z/(1 + t²);F = [w,(1 + t²)*x/y;(1 + t²)*x/y,3*z - 1];matlabFunction(w + z + F,'file','testMatrix.m',…'vars',[x y t])
输出变量的默认名称由单词组成后面跟着数字,例如:
函数out1 = testMatrix(x,y,t)…
要自定义输出变量的名称,请使用输出选择:

Syms x y z r = x²+ y²+ z²;Q = x²- y²- z²;f = matlabFunction(r, q, 'file', 'new_function',…“输出”,{‘name1’,‘name2})

生成的函数返回name1而且name2结果:

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