1

みんな!

Matlab で関数ハンドルを使用するときに問題が発生しました。

たとえば、変換行列の関数ハンドルを取得するとします。

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

そして私はアルファベクトルを持っています

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

のような結果を得たい

[Tf1; Tf2; ...];

私は次のような方法を試しました

Tf(alpha_list) feval(Tf,alpha_list) bsxfun(Tf,alpha_list)

それらはすべて機能しません

これを行う簡単または魔法の方法はありますか?

どうもありがとう!

4

2 に答える 2

2

編集:

より速くする方法を実現し、説明を追加しました。

を使用すると、関数を の各要素に個別arrayfunに適用できます。tfa

ただし、セル配列として出力されるため、を使用して行列に戻す必要があります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
于 2015-07-16T18:18:43.107 に答える