1

我已经建立了一个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))} 

我怎样才能做到这一点?

4

2 回答 2

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'

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

于 2013-09-04T13:43:39.777 回答
0

除了:

  1. 编写自己的class支持乘法和/或加法function_handlesdoubles
  2. 将所有内容转换为字符串,操作字符串,然后转换回函数句柄(参见 Mohsen 提出的精彩版本)
  3. 不要实际创建 A*B,而只是评估它(只是计算A*cellfun(@(f)f(y),B)一些y
  4. 手动复制粘贴表达式
  5. ......毫无疑问是丑陋的。

只是出于好奇,你能解释一下为什么你“需要”这个操作吗?

于 2013-09-04T13:21:21.087 回答