2016-04-28 2 views
1

Я пытаюсь вычислить и отобразить скорость и ускорение данных точек данных. Первоначально мне дали 13 очков за время и на высоту.Скорость и ускорение от времени и высоты

time = [0:12]; 
altitude = [0,107.37,210.00,307.63,400.00,484.60,550.00,583.97,580.00,... 
     549.53,570.00,699.18,850]; 

Это было то кубическим установлен, выполняется с помощью кода ниже

newTime = linspace(0,12,100); 
rcubic = polyfit(time,altitude,3); 
vrcubic = polyval(rcubic,newTime); 
plot(newTime,vrcubic) 

Я не уверен, как правильно найти скорость и ускорение, однако. Я в настоящее время находят скорость, используя

velocity = [vrcubic./newTime]; 

и грубое ускорение с помощью

acceleration = [sqrt(velocity.^2 + newTime.^2)]; 

означало быть наклон скорости между 2 точки, но я думаю, что его неправильно

Есть более простой способ вычислить скорость и ускорение, возможно, с производной или что-то еще?

ответ

0

Обычно я использую производные для расчета скорости и ускорения! Возможно, это не так просто/более эффективно, но я считаю, что это правильно.

Пример

v_geral(1)=0; 

for i=1:length(x)-1 

x1 = x(i); 
x2 = x(i+1); 
y1 = y(i); 
y2 = y(i+1); 
z1 = z(i); 
z2 = z(i+1); 

if sqrt((x2-x1)^2+(y2-y1)^2+(z2-z1)^2) == 0 
    v_geral(i+1)=0; 
else 
    v_geral(i+1)= sqrt((x2-x1)^2+(y2-y1)^2+(z2-z1)^2)/(t(i+1) - t(i)); 
end 

end 

Вы можете использовать ту же самую функцию для вычисления ускорения, а также. Вам просто нужно изменить вход

1

Помните, что ваша скорость - это скорость изменения смещения (в вашем случае высоты) относительно времени. Таким образом, численное приближение представляет собой дискретное изменение высоты, деленное на дискретное изменение во времени. Ваше уравнение

velocity = [vrcubic./newTime]; 

оленья кожа»счет для изменения. Я бы изменил его как

velocity = diff(vrcubic)./diff(newTime); 

Ускорение - это просто производная от времени. Обратите внимание, что вам придется отказаться от первой точки времени, поскольку diff уменьшает размер вектора по одному:

acceleration = diff(velocity)./diff(newTime(2:end)); 
Смежные вопросы