Citat:
Ursprungligen postat av Astronom
Jag är inte riktigt på det klara över hur man applicerar runge kutta på en vektor. Vilken form skulle koden ta?
Kan posta min algoritm som den ser ut nu, om det hade hjälpt.
Kod:
for n=1:(N-1)
t(n+1)=t(n) + dt;
k1=(g-1/2*C*A*rho/m*v(n)^2);
k2=(g-1/2*C*A*rho/m*(v(n)+1/2*dt*k1)^2);
k3=(g-1/2*C*A*rho/m*(v(n)+1/2*dt*k2)^2);
k4=(g-1/2*C*A*rho/m*(v(n)+dt*k3)^2);
v(n+1)=v(n)+1/6*dt*(k1+2*k2+2*k3+k4);
end
Tja, säg att vi har ekvationen
d
v/dt =
f(
v, t).
Då så måste du ändra i koden så att
v är en vektor. Lämpligast är väl att göra v till en matris där den n:te kolonnen är värdet på
v vid steg n. DÅ skulle sista raden bli något som t.ex.
v(:, n+1) = v(:, n) + 1/6 * dt * (k1 + 2*k2 + 2*k3 + k4).
Sen så måste du ändra så att k1, k2, k3, k4 är kolonnvektorer, dessa ska alltså vara olika värden för den vektorvärda funktionen
f, så exakt hur det blir beror på exakt vilken ekvation det handlar om.