如何将符号表达式转换为函数句柄进行优化[Matlab]?

时间:2018-04-08 02:14:55

标签: matlab function

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),以便我可以使用此函数进行优化。

1 个答案:

答案 0 :(得分:0)

在选择使用matlabfunction时,您走的是正确的道路。但是,您可能错过了其中一个可选参数,即Vars;

  

生成的MATLAB函数中的输入变量或向量的顺序,   指定为字符向量,符号变量的向量或a   一维单元格的字符向量,符号变量,   或符号变量的向量。

     

指定输入变量的数量必须等于或大于   f中的自由变量数。请勿对输入使用相同的名称   Vars指定的变量和指定的输出变量   输出。

     

默认情况下,转换符号表达式时,顺序为   按字母顺序排列。当您转换符号函数时,它们的输入   参数出现在其他变量和所有其他变量的前面   按字母顺序排序。

     

请参阅Specify Input Arguments for Generated Function

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