我已经建立了一个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))}
我怎样才能做到这一点?
我已经建立了一个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))}
我怎样才能做到这一点?
如果您可以访问 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'
请注意,符号操作实际上简化了结果。
除了:
class
支持乘法和/或加法function_handles
和doubles
A*B
,而只是评估它(只是计算A*cellfun(@(f)f(y),B)
一些y
)只是出于好奇,你能解释一下为什么你“需要”这个操作吗?