syms a12 a13
x=sym('x',[1,2]);
fun=a12+a13
fun=subs(fun,[a12 a13],[x(1) x(2)])
%fun=matlabFunction(fun)
fun = @(x) fun
我正在寻求通过变量向量替换符号表达式中的所有符号的方法,并将符号表达式转换为函数@(x),以便我可以使用此函数进行优化。
答案 0 :(得分:0)
在选择使用matlabfunction时,您走的是正确的道路。但是,您可能错过了其中一个可选参数,即Vars
;
生成的MATLAB函数中的输入变量或向量的顺序, 指定为字符向量,符号变量的向量或a 一维单元格的字符向量,符号变量, 或符号变量的向量。
指定输入变量的数量必须等于或大于 f中的自由变量数。请勿对输入使用相同的名称 Vars指定的变量和指定的输出变量 输出。
默认情况下,转换符号表达式时,顺序为 按字母顺序排列。当您转换符号函数时,它们的输入 参数出现在其他变量和所有其他变量的前面 按字母顺序排序。
syms a12 a13;
x = sym('x',[1,2]);
fun = a12 + a13;
fun=subs(fun,[a12 a13],[x(1) x(2)]);
g = matlabFunction(fun,'Vars',{x})
g =
function_handle with value:
@(in1)in1(:,1)+in1(:,2)
为了测试它是否有效:
k = [1 2];
g(k) % Output: 3