2017-10-22 2 views
0

도전 과제에 도움이 필요합니다.시뮬레이션 바운싱 플로팅

대기의 한도 인 250km에서 일정한 가속도 g = 8.87ms2로 공을 Venus에 떨어 뜨린 것으로 가정합니다. 볼의 동작을 1 시간 15 분 동안 모델링하십시오 (데이터 포인트에 두 번째 00 및 두 번째 4,500 포함). 초기 상태 후에 상태에 대한 5,000 번의 시뮬레이션을 시뮬레이션하십시오 (총 5,001 점). 시뮬레이션은 시간 (t) 및 높이 (y)에 대해 float64 numpy 배열을 사용해야합니다. 시간은 초로 표현되어야하며 높이는 미터로 표현되어야합니다.

바운싱을 시뮬레이트하기 위해 충돌 감지가 복잡 할 수 있으므로 가정을 간소화합니다. 볼의 높이가 0보다 작거나 같으면 우리는 시뮬레이트 중이며 이미 튀어 오르기 시작한 시간 단계 전에 볼이 바닥에 떨어 졌다고 가정합니다. 당신은해야한다 :

  1. 즉시 최대 대신 시뮬레이션
  2. 변화 이동 방향 (이전 타임 슬라이스에서의 속도의 90 % (0.9) 0
  3. 갱신에 그 속도를 높이 설정 아래)이 경우 -in, 지금은 현재의 속도, 즉, VC [I] = -0.9 사용하세요 * VC [i]를

공 정수 변수라는 반송에서 반사되는 횟수를 카운트.

제출시 적절한 치수 및 값의 배열 t 및 y와 bounces라는 int가 포함되어야합니다.

여기까지 내 코드입니다. 내 y 값이 올바르지 않다고합니다.

import numpy as np 
import matplotlib.pyplot as plt 
g=-8.87 
t=np.linspace(0,4500,5001,dtype=np.float64) 
v=np.zeros(5001) 
y=np.zeros(5001) 
bounces=0 
y[0]=250000 
for i in range(1,5001): 
if y[i-1]+0.9*v[i-1]>0: 
    v[i]=v[i-1]+g*(0.9) 
    y[i]=y[i-1]+0.9*v[i-1] 
if y[i-1]+0.9*v[i-1]<=0: 
    v[i]=-0.9*v[i] 
    y[i]=0 
bounces+=1 
+0

는 y 값의 실수를 볼 수 없습니다 예를 볼 수 있어야한다. 그러나 튀는 + = 1은 들여 쓰기되어야합니다. – chasmani

답변

1

들여 쓰기에는 몇 가지 문제가 있습니다. for 루프는 들여 쓰여지지 않고 바운스 반복기가 잘못된 위치에 있습니다. 그래서 나는 그것을 고쳤다.

또한 하단의 세 번째 줄에 이전 시간 단계를 원할 때 현재 시간 단계 인 v[i] = -0.9*v[i]을 설정합니다. 그래서 v[i]=-0.9*v[i-1]

import numpy as np 
import matplotlib.pyplot as plt 
g=-8.87 
t=np.linspace(0,4500,5001,dtype=np.float64) 
v=np.zeros(5001) 
y=np.zeros(5001) 
bounces=0 
y[0]=250000 
for i in range(1,5001): 
    if y[i-1]+0.9*v[i-1]>0: 
    v[i]=v[i-1]+g*(0.9) 
    y[i]=y[i-1]+0.9*v[i-1] 
    if y[i-1]+0.9*v[i-1]<=0: 
    v[i]=-0.9*v[i-1] 
    y[i]=0 
    bounces+=1 

당신이있어 https://repl.it/NCWu

관련 문제