函数句柄的Array Cell的矩阵乘法

时间:2013-09-04 12:50:24

标签: matlab anonymous-function function-handle

我建立了一个function_ handles的单元格数组,如下所示:

B = {@(x) x(1)+x(2)^2 
     @(x) x(1)-2*x(2)}

假设A = [1 2; 3 4]。我需要执行像A*B这样的矩阵乘法,使单元格数组为

A*B = {@(x) x(1)+x(2)^2 + 2*(x(1)-2*x(2)) 
       @(x) 3*(x(1)+x(2)^2) + 4*(x(1)-2*(x(2))} 

我该怎么做?

2 个答案:

答案 0 :(得分:1)

如果您可以访问Symbolic Toolbox,则相对容易:

C=regexprep(cellfun(@func2str, B, 'uni', 0), '@\(x\)', '');
F=arrayfun(@(d) ['@(x) ', char(d)], sym(A)*sym(C), 'uni', 0);

返回

>> F
F = 
    '@(x) 3*x(1) - 4*x(2) + x(2)^2'
    '@(x) 7*x(1) - 8*x(2) + 3*x(2)^2'

请注意,符号操作实际上简化了结果。

答案 1 :(得分:0)

除了:

之外别无他法
  1. 编写自己的class,支持function_handlesdoubles
  2. 的多重复制和/或添加
  3. 将所有内容转换为字符串,操纵字符串,然后转换回函数句柄(请参阅Mohsen提出的精彩版本)
  4. 实际上创建 A*B,而只是评估它(只为某些A*cellfun(@(f)f(y),B)计算y
  5. 手动复制粘贴表达式
  6. ......其他一些无疑是丑陋的。
  7. 出于好奇,你能解释为什么你需要'这个操作吗?