将矩阵或向量传递给Matlab中的函数句柄

时间:2015-07-16 17:54:19

标签: matlab function-handle

大家好!

在Matlab中使用函数句柄时遇到了问题。

假设我得到了一个变换矩阵的函数句柄,比如说

Tf = @(alpha)reshape([cos(alpha),-sin(alpha),sin(alpha),cos(alpha)],[2,2]);

我有一个alpha矢量

alpha_list = [alpha1; alpha2; ...];

我希望得到像

这样的结果
[Tf1; Tf2; ...];

我尝试过像

这样的方法
Tf(alpha_list) feval(Tf,alpha_list) bsxfun(Tf,alpha_list)

他们都不起作用

有一种简单或神奇的方法可以做到这一点吗?

非常感谢!

2 个答案:

答案 0 :(得分:2)

编辑:

实现了一种使其更快并添加解释的方法。

使用arrayfun,您可以将功能tf分别应用于a的每个元素。

它输出为单元格数组,因此您需要使用cell2mat将其转换回矩阵。

tf = @(alpha) [cos(alpha),sin(alpha);-sin(alpha),cos(alpha)];
Tf =@(a) cell2mat(arrayfun(@(A) tf(A), a, 'uni', 0));

所以如果你输入一个1xN矢量,你将得到一个2x2N矩阵,如果你输入一个Nx1矢量,你将得到一个2Nx2矩阵。

>> a = rand(2)

a =

     6.323592462254095e-01     2.784982188670484e-01
     9.754040499940953e-02     5.468815192049839e-01

>> Tf(a)

ans =

  Columns 1 through 3

     8.066353232983801e-01     5.910494524211303e-01     9.614693800974246e-01
    -5.910494524211303e-01     8.066353232983801e-01    -2.749120425428361e-01
     9.952467051120759e-01     9.738580986754016e-02     8.541503641387258e-01
    -9.738580986754016e-02     9.952467051120759e-01    -5.200261103460884e-01

  Column 4

     2.749120425428361e-01
     9.614693800974246e-01
     5.200261103460884e-01
     8.541503641387258e-01

>> Tf(a) - [tf(a(1,1)), tf(a(1,2)); tf(a(2,1)), tf(a(2,2))]

ans =

     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0

答案 1 :(得分:1)

致电 0.5403 0.8415 -0.8415 0.5403 -0.4161 0.9093 -0.9093 -0.4161 -0.4161 0.9093 -0.9093 -0.4161 寻求解决方案:

$db->multi_query($sql)

这里的关键是我使用reshape将向量指向第三维,这样它就不会干扰我们感兴趣的2。然后我们可以在输出上再次使用resarpe来保存块你正在寻找的结构。

这样,调用LAST_INSERT_ID()将返回:

await

我还应该指出,如果你不太关心速度,有很简单的方法可以使用简单的循环来做到这一点......

编辑: 我在Tf(a)上切换了标志,因为它推出了Tf(a)'。现在是正确的。