背景:私は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の場合の具体的
ここでどのような操作をしているのかよく分かりませんが、おそらく 'bsxfun'が役立つと思います。 'bsxfun(@times、F、Delta)'または 'bsxfun(@times、Delta、F)'のようになります。 –
D = gradient(F)をそのまま使用することができます。多次元入力に作用する。カスタム演算子では、独自のベクトル化式を記述する必要があります.bsxfun()はおそらく役に立ちます。 –
@AiridasKorolkovas私は 'gradient'と' del2'を調べました。繰り返し適用すると、新しい微分を割り当てます各繰り返しで行列を作成するか、より効率的に何かを行うか? –