2012-01-07 3 views
1

このような行列の各繰り返しでの平均勾配または勾配を計算します。MATLABでは、各ステップを変更しているマトリックス内のボーダーをトレースする最良の方法は何ですか?

a=[ 10 9 8 7 6 5 5; 
9 9 8 7 8 5 5; 
8 8 7 7 5 5 5; 
7 7 7 6 5 5 5; 
6 6 6.6 5 5 5 5; 
6 6 6.1 5 5 5 5; 
6.3 5 5 5 5 5 5] 
Iは各反復各工程の間および5の値をボーダー各時点で5の変更の位置をA(1,1)の位置との間の傾きまたは勾配を見つけることを希望してい

など他の値を行います。

これを実行した後、傾きを平均します。私はまだこのような問題に遭遇しておらず、単純化するMatlabコマンドを見つけることができませんでした。

+0

ご質問です少し曇っています。あなたは、正確に何をしたいのかについて、より詳細な情報を提供できますか? – Jorge

+0

私のプロジェクトのいくつかの詳細は明らかになると思います。行列は標高の値です。そしてこのプログラムは放射状に成長する川デルタをシミュレートします。だから、各行列はおおよそ円の象限のように見えます。私は原点からデルタの端に沿って各セルに斜面を取りたいです。デルタのエッジは、この場合5である海面を満たします。デルタの端にある各点に勾配をとった後、この勾配を平均化したい。 – Abid

答えて

3

まず、海岸の要素を確認する必要があります。あなたの定義から、要素は5との境界線(右から)の場合、海面要素です。海面水準が5であり、可能な限り低い値、すなわち要素が海面を越えていない場合は、土地要素として

land=a>5; 

これは戻り、

ans = 

    1  1  1  1  1  0  0 
    1  1  1  1  1  0  0 
    1  1  1  1  0  0  0 
    1  1  1  1  0  0  0 
    1  1  1  0  0  0  0 
    1  1  1  0  0  0  0 
    1  0  0  0  0  0  0 

次に、海岸要素がランド行列の列の差分を取る0が続く1Sであり、

coastTmp=diff(land,1,2); 

それは簡単です。ここから、

ans = 

    0  0  0  0 -1  0 
    0  0  0  0 -1  0 
    0  0  0 -1  0  0 
    0  0  0 -1  0  0 
    0  0 -1  0  0  0 
    0  0 -1  0  0  0 
    -1  0  0  0  0  0 

としている-1,2、

coast=find(coastTmp==-1); 

を見つけ、

coast = 

    7 
    19 
    20 
    24 
    25 
    29 
    30 

を返します。勾配は、全ての海岸要素と(1,1)の違い、すなわち

slope=a(coast)-a(1,1); % negative slope here 

寄付、

slope = 

    -3.700000000000000 
    -3.400000000000000 
    -3.900000000000000 
    -3.000000000000000 
    -4.000000000000000 
    -4.000000000000000 
    -2.000000000000000 

そしてもちろん平均値は、

mean(slope); 
+0

ありがとうございました。私はあなたがやったことの半分くらいを手に入れました。 – Abid

+1

Np。ちょうどタイプミスがありました。最初はその土地=> 5;土地= a <5;ではない。とにかく、このコードは、海の要素が右の海の要素**を持っている場合にのみ機能することを知っておくべきです。それ以外の場合は、それらを検出しません。海の要素が海の要素の上または下にある場合。そのような場合は、それらを計算するのが難しくなるはずです。 – Jorge

+0

この答えの詳細には数多くの問題があります( 'coastTmp'のインデックス値は' a'では有効ではない、大きさが異なるなど)が、アプローチは良いです。 –

関連する問題