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

您可以使用matlabFunction生成一个MATLAB®函数句柄,用于计算数值,就像用数字替换符号表达式中的变量一样。而且matlabFunction可以创建一个接受数值参数并计算应用于参数的符号表达式的文件。生成的文件可用于任何MATLAB计算,无论运行该文件的计算机是否具有“符号数学工具箱”许可证™ 功能。

生成函数句柄

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

syms x y r=sqrt(x^2+y^2);ht=matlabFunction(tanh(r))
ht=函数\具有以下值的句柄:@(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.60890.9954

提示

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

控制变量的顺序

matlabFunction从符号表达式按字母顺序生成输入变量。这就是为什么函数在生成函数句柄x之前Y:

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

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

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(tanh(r),'vars',{'x','y','z'})
ht2=函数_值句柄:@(x,y,z)tanh(sqrt(x.^2+y.^2.*3.0+z.^2.*5.0))
ht3=matlabFunction(tanh(r),'vars',{'x',[y z]})
ht3=函数_值句柄:@(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)。使用中间变量可以使表达式保持简短,从而使代码更易于阅读。

如果您不希望输入变量的默认字母顺序,可以使用瓦尔斯选项来控制订单。继续以身作则,,

matlabFunction (F,“文件”,'testMatrix.m',“瓦尔斯”,[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];matlabFunction(w + z + F,'file','testMatrix.m',…“var”,[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^2f = matlabFunction(r, q, 'file', 'new_function',…“输出”,{‘name1’,‘name2})

生成的函数返回name1name2结果:

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