【问题标题】:Take product of function handles within a cell and then evaluate for given values in MATLAB获取单元格内函数句柄的乘积,然后在 MATLAB 中计算给定值
【发布时间】:2017-09-01 19:30:53
【问题描述】:

我有一个函数句柄单元格,我想获取每一行的乘积。

然后我想评估单元格内的函数句柄以获得某些值。

例子:

原始单元格:

P{1,1} = @(x) x         P{1,2} = @(y) y
P{2,1} = @(x) x         P{2,2} = @(y) y.^2

所需产品:

P{1,1} = @(x,y) x.*y
P{2,1} = @(x,y) x.*y.`2

然后评估

x = 2:0.1:3;
y = 1:0.1:2;

那我想用cell2mat 得到P

我一直在尝试使用cellfun,但不确定在使用匿名函数时这是否正确。

不胜感激任何建议!

【问题讨论】:

  • 这似乎真的过于复杂。我觉得有更好的方法可以做到这一点,但这里的例子可能比你的实际问题简单得多。你真正想解决什么问题?

标签: matlab matrix cells function-handle


【解决方案1】:

您可以将输入向量 x , y 重塑为 3D 向量并对其应用函数:

P{1,1} = @(x) x ;        P{1,2} = @(y) y;
P{2,1} = @(x) x  ;       P{2,2} = @(y) y.^2;
%reshape input to 3D
x=reshape(2:0.1:3,1,1,[]);
y=reshape(1:0.1:2,1,1,[]);
%empty cell of results
C = cell(size(P));
%apply functions of each column to the related input
C(:,1) = cellfun(@(f)f(x),P(:,1),'UniformOutput', false);
C(:,2) = cellfun(@(f)f(y),P(:,2),'UniformOutput', false);
%convert cell to an array
A = cell2mat(C);
%take product of each row
rowprod = prod(S,2)
%remove singleton dimensions
out = squeeze(rowprod)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    相关资源
    最近更新 更多