Вопрос начального уровня о работе массива Matlab - PullRequest
0 голосов
/ 15 января 2011

Привет, ребята. У меня есть этот вопрос, чтобы спросить. В программировании на Си, если мы хотим сохранить несколько значений в массиве, мы реализуем это, используя циклы, подобные этому:

j=0; //initialize  
for (idx=1,idx less than a constant; idex++)  
{  
    slope[j]=(y2-y1)/(x2-x1);  
    j++;  
}  

Мой вопрос в Matlab: есть ли у нас какой-нибудь более простой способ получить тот же массив «наклона» без увеличения j вручную? Что-то вроде:

for idx=1:constant  
    slope[]=(y2-y1)/(x2-x1);

Спасибо!

1 Ответ

2 голосов
/ 15 января 2011

Такие операции обычно можно выполнять без зацикливания.

Например, если наклон одинаков для всех записей, вы можете написать

slope = ones(numRows,numCols) * (y2-y1)/(x2-x1);

, где numRows и numCols - размер массива slope.

Если у вас есть список значений y и значений x, и вы хотите, чтобы уклон был в каждой точке, вы можете вызвать

slope = (y(2:end)-y(1:end-1))./(x(2:end)-x(1:end-1)

и получите все за один раз. Обратите внимание, что y(2:end) - это все элементы от второго до последнего, а y(1:end-1) - все элементы от первого до второго и до последнего. Таким образом, первый элемент наклона рассчитывается из разности между вторым и первым элементом y. Также обратите внимание на ./ вместо /. Точка делает это поэлементной операцией, то есть я делю первый элемент массива в числителе на первый элемент массива в знаменателе и т. Д.

...