0

背景:私はMatlabで有限差分スキームを実行しています。私は2つの変数f(x,y)の関数を区別したいと思います。代わりに、私はグリッドポイントF(:,:)上の行列表現を持っています。 Fが1次元配列の場合、微分演算子は行列Delta(:,:)となり、微分はF_tag = Delta*Fとなります。Matlabの行列演算子

ただし、Fが行列であるため、これはより複雑になります。基本的なアプローチは、 1次元ベクトルとしてFを表現し、次にn^2行列のn^2として2d_Deltaを表すことです。しかし、これは多くの非効率性やバグの原因となるかもしれません。

私の質問:のn * nの行列F(:,:)と互換性のマトリックス演算子Delta(:,:,:,:)考えると、N^2行列ベクトルmultipicationとしてDelta*Fを実行しているのボックス実装のうちはありますか? X

A(X) = RX + XT 

毎マトリックス、次いでkron機能が優れていることがTは、有限差分微分方式、又は2つの行列Rによって記述することができる任意のマトリックスオペレータAの場合の具体的

+0

ここでどのような操作をしているのかよく分かりませんが、おそらく 'bsxfun'が役立つと思います。 'bsxfun(@times、F、Delta)'または 'bsxfun(@times、Delta、F)'のようになります。 –

+1

D = gradient(F)をそのまま使用することができます。多次元入力に作用する。カスタム演算子では、独自のベクトル化式を記述する必要があります.bsxfun()はおそらく役に立ちます。 –

+0

@AiridasKorolkovas私は 'gradient'と' del2'を調べました。繰り返し適用すると、新しい微分を割り当てます各繰り返しで行列を作成するか、より効率的に何かを行うか? –

答えて

0

n^2 xn^2行列を作る方法。 1次元の2次微分行列Dを考えると、2つの次元は、私はロング陳によってthis great tutorialを参照してください詳細については、

Laplacian2D = kron(speye(n),D) + kron(D, speye(n)); 

になります。