2

2 つのベクトル a と b といくつかの関数 f があります。そのような種類の MATLAB で行列を定義するための (パフォーマンスの) 最良の方法は何ですか?

A(m,n) = f(a(m)*b(n)) / ( (f(a(m)) * f(b(n)) )

ネストされたループを使用しないことは可能ですか?

4

2 に答える 2

5

今はコンピューターではありませんが、試してみてください

A=f(a*b')./(f(a)*f(b)')

ここで、a と b は列ベクトルです。a*b' は外積です。

于 2012-09-27T12:09:20.373 に答える
3

fベクトル構文をサポートしている場合は、次のようになります。

   [A,B] = meshgrid(a,b);
   M = f(A.*B) ./ ( f(A).*f(B) );

ちなみに、通常のループよりもパフォーマンスが向上するかどうかはわかりません。より良いプロファイルとチェック。JIT の導入以来、Matlab ループはベクトル化された操作よりも高速に実行されることがよくあります。


以下に例を示します。

function CalcGrid()
    a = 1:10;
    b = 1:10;

    [A,B] = meshgrid(a,b);
    M = f(A.*B) ./ ( f(A).*f(B) );
    figure;surf(M);
end

function y = f(x)
    y = x-1;
end
于 2012-09-27T12:05:16.217 に答える