2010-10-09 5 views
6

Mam prosty (masowy) system z dwoma punktami połączonymi ze sprężyną. Jeden punkt jest ustawiony na suficie, więc chcę obliczyć położenie drugiego punktu za pomocą metody numerycznej. Tak więc, zasadniczo dostaję pozycję drugiego punktu i jego prędkość, i chcę wiedzieć, jak te dwie wartości aktualizują się po jednym taktowaniu.Wdrażanie pół-niejawnego Eulera wstecznego w systemie 1-DOF z masą sprężynową

następujące siły ma wpływ na punkcie:

  • siły grawitacji, przeprowadzonego przez -g * m
  • siły sprężyny, podanych k * (l - L) k jest sztywność, L jest obecny długość i L oznacza początkowy długość
  • siłę tłumiącą, ponieważ przez -d * v

zsumowane, co prowadzi do

  • F = -g * m + k * (l - L)
  • Fd = -d * v

Stosując na przykład Explicit Euler, można wyprowadzić następujące:

  • newVelocity = oldVelocity + dt * (F + Fd)/m, używając F = m * a.

Jednak teraz chcę używać wpół ukryte tyłu Euler, ale nie można dokładnie dowiedzieć się, gdzie wyprowadzić Jacobians z itp

+0

usunięto tag sprężyny, ponieważ jest on powiązany z ramą Java Spring –

Odpowiedz

14

Więc to chyba najłatwiej zobaczyć, jak to idzie z najpierw należy rozważyć metodę całkowicie niejawną, a następnie przejść do niejako pośrednio.

niejawny Euler musiałaby (nazwijmy te eqn (1)):

newPos = oldPos + dt * newVelocity 
newVelocity = oldVelocity + dt * (-g * m + k*(newPos - L) - d*newVelocity)/m 

Na razie niech po prostu zmierzyć pozycje w stosunku do L, dzięki czemu możemy pozbyć się tego -KL perspektywie. Przekształcając możemy skończyć z

(newPos, newVelocity) - dt * (newVelocity, k/m newPos - d/m newVelocity) = (oldPos, oldVelocity - g*dt) 

i oddanie, które w postaci macierzowej

((1,-dt),(k/m, 1 - d/m)).(newPos, newVelocity) = (oldPos, oldVelocity -g*dt) 

\left (\begin{array}{cc} 1 & -\Delta t \ \frac{k}{m} & 1 - \frac{d}{m}\end{array} \right) \left (\begin{array}{c} x^\mathrm{new} \ v^\mathrm{new} \end{array} \right) = \left (\begin{array}{c} x^\mathrm{old} \ v^\mathrm{old} - g \Delta t\end{array} \right)

Jeżeli wiesz wszystko na matrycy, a wszystko na RHS, i po prostu trzeba rozwiązać dla wektora (newPos, newVelocity). Możesz to zrobić przy pomocy dowolnego rozwiązania Ax = b (eliminacja gaussowska ręcznie działa w tym prostym przypadku). Ale ponieważ wspomniałeś o Jacobianach, prawdopodobnie chcesz rozwiązać ten problem, używając iteracji Newtona-Raphsona lub czegoś podobnego.

W takim przypadku, jesteś w istocie chce rozwiązać zera równania

((1,-dt),(k/m, 1-d/m)).(newPos, newVelocity) - (oldPos, oldVelocity -g*dt) = 0 

co znaczy, F (newPos, newVelocity) = (0,0).Masz poprzednią wartość do użycia jako początkowe odgadnięcie, (oldPos, oldVelocity). Teraz po prostu chcesz iteracyjne na

(x, v) n + 1 = (x, v) n + f ((x, v) n)/f '((x, v) n)

, dopóki nie uzyskasz wystarczająco dobrej odpowiedzi. Tutaj

f(newPos,newVel) = ((1,-dt),(k/m, 1-d/m)).(newPos, newVelocity) - (oldPos, oldVelocity -g*dt) 

oraz f "(newPos, newVel) jest jakobian odpowiada matrycy

((1,-dt),(k/m, 1-d/m)) 

przechodzi proces dla pół-niejawny jest taka sama, ale trochę łatwiej - nie wszyscy terminy RHS w eqns (1) to nowe ilości. Jak to się zwykle robi to

newPos = oldPos + dt * newVelocity 
newVelocity = oldVelocity + dt * (-g * m + k*oldPos - d*newVelocity)/m 

np prędkość zależy od starej wartości czasowej pozycji i pozycji na nowej wartości czasowej prędkości. (Jest to bardzo podobne do integracji "leapfrog"). Powinieneś być w stanie wykonać powyższe kroki całkiem łatwo dzięki temu nieco odmiennemu zestawowi równań. Zasadniczo, k/m termin w macierzy powyżej spada.

+2

Nawiasem mówiąc, Gilbert Strang (który jest w pewnym sensie duży) nauczył kursu na temat tego rodzaju rzeczy na MIT, który jest na OpenCourseWare, i myślę, że wykłady są doskonałe: http://ocw.mit.edu/courses/mathematics/18-085-computational-science-and-engineering-i-fall-2008/ –

+0

Możesz używać znaczników TeX. Jeśli się nie mylę, zaczynasz i kończysz znakiem dolara oznaczającym TeX – JoshD

+0

Wygląda na to, że jest to tylko matematyka i być może lateksowe stackoverflows = (. Ale w wyszukiwaniu, znalezieniu mathurl.com i google's latex-lab; fajne rzeczy . –

Powiązane problemy