1
`2.4   2.34  2.21   1.90    1.4   0.83  0
 2.34  2.42  2.16   1.79    1.3   0.7   0
 2.21  2.16  1.99   1.64    1.16  0.51  0
 1.90  1.79  1.64   1.30    0.75   0    0
 1.4   1.34  1.16   0.75    0      0    0
 0.83  0.75  0.51   0       0      0    0
 0     0     0      0       0      0    0

`

ここに画像の説明を入力してください

これは、ある時点での私のマトリックスがどのように見えるかであり、表面の平均勾配または勾配(急勾配の指標)を計算したいと思います。

MatLabにはこの種の機能が組み込まれているはずですが、私はそれを見つけることができます。私が書いたコードも試しましたが、正確ではありません。ベスト、アビッド

4

2 に答える 2

2

勾配はベクトルであるため、2つの次元を別々に扱うことができます。勾配の計算は、関数のすべてのパラメーターの1次導関数を計算することで構成されます。離散ドメインでは、これは有限差分を取ることによって行うことができます:http: //en.wikipedia.org/wiki/Finite_difference

正確にし、各ポイントで勾配を計算する場合は、前方または後方の差を取得することはできません。エッジでは、常に前方(または後方)のポイントがあるとは限らないためです。

ただし、勾配の平均が必要な場合は、エッジを気にする必要はなく、diffを使用して元のポイント間の中心点の有限差分を計算できます。

dx = diff(data,1,1);
dy = diff(data,1,2);

mean_gradient = [mean(dx(:)) mean(dy(:))]

クールのパラメータの間隔が等しいと仮定すると、dxとdyをステップサイズで割る必要があります。

提供したデータの場合、次のようになります。

mean_gradient =

   -0.26381  -0.26381

これは、関数が単調に減少し、パラメーターが対称であることを示す、作成したプロットと一致します。

于 2012-05-06T23:24:37.607 に答える
0

これを行う1つの方法は、たとえばregressを使用して、重回帰を実行することです。

2次元回帰は最適な平面であり、そこから勾配値を計算できます。リンクには、コードと結果のプロットを含む良い例があります。

于 2012-05-06T20:29:29.423 に答える