MATLAB, каков наилучший способ отследить границу в матрице, которая меняется каждый шаг? - PullRequest
1 голос
/ 08 января 2012

Я хочу вычислить средний наклон или градиент на каждой итерации в такой матрице.

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]

Где я хочу найти наклон или градиент между позицией a (1,1) во время каждого шага и в каждой точке, которая граничит со значением 5. Каждая итерация изменяет положение 5 и другие значения также .

После этого я усредню наклон. Я еще не сталкивался с подобной проблемой и не смог найти команду Matlab для упрощения.

1 Ответ

3 голосов
/ 08 января 2012

Сначала вы должны узнать, какие элементы побережья. Согласно вашему определению, элемент является элементом побережья, если он граничит (справа) с 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

Теперь береговые элементы равны 1, за которыми следует 0. Взять разницу в столбцах матрицы земель,

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с,

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);
...