저는 고조파 발진기 체인을 사용하여 1 차원 파의 간단한 시뮬레이션을하려고합니다. 교과서에 따른 - - 위치 (x[i]=0
평형 가정), i 번째 발진기 x[i]
대한 미분 방정식을 밝혀이 하나 1 차원 파를 시뮬레이션하려고합니다.
m*x[i]''=-k(2*x[i]-x[i-1]-x[i+1])
은 (미분은을 WRT되고 시간) 그래서 나는 수치 적으로 다음과 같은 알고리즘으로 역학을 계산하려했습니다.for every i: osc[i].vel+=dt*osc[i].acc; osc[i].loc+=dt*osc[i].vel; osc[i].vel*=0.99; osc[i].acc=-k*2*(osc[i].loc-osc[i].bloc); if(i!=0){ osc[i].acc+=+k*(osc[i-1].loc-osc[i-1].bloc); } if(i!=N-1){ osc[i].acc+=+k*(osc[i+1].loc-osc[i+1].bloc); }
할 수 : 여기
osc[i]
애트리뷰트loc
(절대 위치)vel
(속도)acc
(가속도)와bloc
(평형 위치)와 오브젝트와 i 번째의 발진기dt
시간 증분된다 알고리즘 here의 알고리즘을 참조하십시오. 클릭하면 6 번째 오실레이터에 충격이 가해집니다. 당신은 웨이브를 전혀 생성하지 않을뿐만 아니라 증가하는 총 에너지로 모션을 생성한다는 것을 볼 수 있습니다 (심지어 댐핑을 추가하더라도!). 내가 도대체 뭘 잘못하고있는 겁니까?
2 차 Runge-Kutta를 구현했으며 매우 낮은 감쇠 및 높은 dt에서도 가장 우수한 것 같습니다. 결과는 [여기] (http://pokipsy.0fees.net/sandbox.html)에서 볼 수 있습니다. 여러분과 다른 사람들에게 감사드립니다. –