2016-06-01 11 views
0

아마도 프로그래밍 문제가 아니라 수학 문제 일 것입니다. 그러나 여기에 간다.Kinematics 방정식을 Matlab으로 변환

차량의 모터로 롤러 코스터를 작동한다고 가정 해보십시오. 차량에는이 모터를 사용하여 얻을 수있는 고정 된 힘 값이 있습니다. 롤러 코스터의 한 부분에서 내가 가장 좋아하는 비디오 게임 중 하나 인 하프 루프를 훑고 싶습니다 : Rollercoaster Tycoon!

당신이 반 루프 주위에 이동으로

A good old half loop from Rollercoaster Tycoon

, 당신은 당신의 속도가 일 또는 시간이 주위에 가서 당신을 데려 갈 것이다 될지 모른다. 그러나 중력으로 인한 엔진 가속, 질량 및 가속도에 따라 하프 루프의 어느 시점에서든 가능한 최대 가속도를 파악할 수 있습니다. 이 논의를 수치와 혼동하지 말고 가속도 대 위치 곡선을 사용할 수 있다고 가정하십시오. 그것은 다음과 같은 :

enter image description here

내가 성공적으로 위치 곡선과 초기 속도 대 가속도의 함수로 속도의 공식을 도출했다. 운동 학적 방정식에서

v^2 = 2*a*p 

나는 위치의 함수로 속도를 유도 할 수 있습니다. V =의 SQRT (2 * [A = F (P) WRT 위치의 필수]) MATLAB에서 내가 수행하여 얻을 수

:

v = sqrt(2.*abs(trapz(pos, acc))); 

을 실제로 따라 모든 지점의 속도를 얻고있다 다음 코드의 트랙 (acc 및 pos은 위의 플로트 된 가속도 대 배열입니다.) :

vel = 1; 
newAcc = 0; 
while ix <= length(acc) 
    pa = acc(ix-1) + (acc(ix)-acc(ix-1))./2; 
    newAP = (pos(ix)-pos(ix-1)).*pa; % This is more time efficient than trapz 
    newAcc = newAcc + abs(2.*newAP); 
    vel(ix) = sqrt(newAcc); 
    ix = ix + 1; 
end 

이제 딜레마에 이릅니다. 나는 가속도, 속도 및 위치를 가지고 있으며, 이제는 시간이 필요합니다. 제 계산이 맞다고 생각합니다. 내가/v/p를 가졌기 때문에 그것은 시간을 포함하는 운동 방정식을 선택하고 시간을 재 배열하는 것만 큼 간단해야합니다 (트랙을 따라 모든 위치에서 시간을 얻고 싶기 때문에/v/시간의 함수로서의 p).

이 나는 ​​이들의에서 선택할 수 있습니다 의미한다 :

1. p_f = p_i + v_i*t + 1/2*a*t^2 
2. v_f = v_i + a*t 
3. p = (v_i + v_f)*t/2 

식 (1)은 이차이다. 다른 두 개는 훨씬 단순 해 보입니다. 방정식 2는 유망 해 보인다. 해보자. matlab에이 변환

t = (v_f - v_i)/a 

, 나는이해야한다고 생각 :

time = 0; 
while ix <= length(acc) 
    pa = acc(ix-1) + (acc(ix)-acc(ix-1))./2; 
    newAP = (pos(ix)-pos(ix-1)).*pa; % This is more time efficient than trapz 
    newAcc = newAcc + abs(2.*newAP); 
    vel(ix) = sqrt(newAcc); 

    dt = (vel(ix)-vel(ix-1))./acc(ix); 
    time(ix) = time(ix-1) + dt; 
    ix = ix + 1; 
end 

그러나 지금까지 내 시험에서,이 잘못된 결과를 생성합니다! 저는 수학과 알고리즘 모두에 난처한 상황입니다. 그러나이 장소는 간단히 알고리즘에 관한 질문에 대답하는 것이라고 생각합니다. 내 공식이 어떻게 잘못 될지 알 수 없습니다. Matlab으로 잘못 변환 되었습니까?

+0

저는 이것이 실제로 프로그래밍 문제가 아니라고 확신합니다. 나는 당신의 질문이 Stack Exchange의 Physics 섹션에서 더 적합하다고 생각합니다. 방법으로 결과를 어떻게 확인 했습니까? 그것이 틀렸다는 것을 어떻게 알 수 있습니까? – tvo

+0

저는 물리학이나 프로그래밍이 정확하다고 생각하지 않습니다. 커브를 따라 운동 방정식에 대한 Seret-Frenet 공식을 볼 것으로 기대합니다. 변위, 속도 및 가속도는 모두 벡터이므로 벡터량이 있어야합니다. 이것은 처음부터 끝까지 잘못되었습니다. – duffymo

+0

이것은 처음부터 끝까지 잘못이 아닙니다. 일정한 시간 간격과 가속도 대 위치 곡선을 사용하여 곡선을 만듭니다. 나는이 곡선을 내가 여기에있는 것과 매치시킨다. 위치와 속도가 정확합니다. – toshiomagic

답변

0

다음 코드가 해결책입니다. 나는 잠시 앉아 있었는데, 그 질문에 답하지 않았다.

while p < pf 
    vel(i) = real(sqrt(vel(i-1).^2 + 2 .* ((acc(i)+acc(i-1))./2) .* (pos(i)-pos(i-1)))); 
    time(i) = time(i-1) + (pos(i)-pos(i-1)) ./ ((vel(i)+vel(i-1))./2); 
    i = i + 1; 
end 

시간 함수 위치 값의 배열에 대한 변형

d = (vi+vf)*t/2 

의 재 배열에서 온다.