2011-01-15 2 views
0

Эй, ребята. У меня есть вопрос. В программировании C, если мы хотим сохранить несколько значений в массиве, мы реализуем, что с помощью петли, как это:Вопрос начального уровня о работе массива Matlab

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

Спасибо!

ответ

2

Такие операции обычно выполняются без петлирования.

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

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

где numRows и numCols являются размер массива slope.

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

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

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

+0

Привет, Йонас. Спасибо за быстрый ответ. Я так и понял. Ваше объяснение очень ясное. Спасибо. – view

+0

Привет, Йонас. Согласно тому, что вы сказали, наклон, который я получаю, будет массивом значений, если я это сделаю: slope = (y2 (1: end) -y1 (1: end1))/(x2 (1: end) -x1 (1 : end), где я использую/вместо ./ Я прав? – view

+0

Да (на самом деле это скорее всего ошибка, если вы не используете '. /'). Кроме того, вам не нужно писать '(1: end) ', потому что по умолчанию используются целые массивы.' (y2-y1) ./ (x2-x1) 'достаточно. – Jonas

Смежные вопросы