0

まず、質問を簡単に定式化するのは簡単ではないため、タイトルを何にすればよいかわかりませんでした。

行列値関数 (k) とベクトル値関数 (X) を畳み込む必要があり、それぞれが R^3 で定義されています。これは MATLAB で行う必要があるため、当然、離散化されたバージョンを実行します。k と X をそれぞれ 5 次元配列と 4 次元配列で表現する予定です。これはちょっと重そうですけどね。それを行うためのより良い方法があるかどうか知っていますか?

畳み込みを直接行う代わりに、fftk と X の両方を 'ing してフーリエ空間に移動し、ゼロをパディングし、それらを乗算してから を使用しますifft。これは同じ結果を生成し、はるかに高速に実行されるはずです。

ここでの私の質問は、これらの配列/行列を簡単に乗算する方法があるかどうかです。k(i,j,k,:,:)*X(i,j,k,:)つまり、3 つのネストされたループを使用せずに、すべての i、j、k に対して行う方法はありますか?

4

2 に答える 2

1

離散化する必要がありますか?Matlab は、関数を入力および出力として完全に使用できます。たとえば、畳み込み関数を定義できます。

>> convolve = @(fm,fv) @(x) fm(x) * fv(x); %fm matrix valued, fv vector valued

いくつかの行列値関数とベクトル値関数を定義します (これは、入力が列ベクトルであることを前提としています)

>> f = @(x) [x x x];
>> g = @(x) cos(x);

今、それらの畳み込み:

>> h = convolve(f,g);

そしてそれをベクトルに適用してみてください:

>> h([1;2;3])
ans =
   -0.8658
   -1.7317
   -2.5975

操作を手動で行った場合と同じ答えが得られます。

>> f([1;2;3]) * g([1;2;3])
ans =
   -0.8658
   -1.7317
   -2.5975
于 2012-10-30T12:10:53.517 に答える
0

を使用して、要素ごとの操作を実行します。選択したオペレーターと一緒に。例えば:

Element-by-element multiplication: .* 
Element-by-element division: ./

など・・・ということでしょうか。

于 2012-10-30T12:05:13.410 に答える