mexastudent
mexastudent

Reputation: 3

Runge-Kutta method to numerically solve a second order non-linear differential equation - Octave

So I have this analytically unsolvable non-linear second order differential equation:

x''=(-1/x)((x')²+gx-gh+ax')

to which I've been trying to apply the Runge-Kutta method in Octave for a while without getting good results. This is the code I've been using:

graphics_toolkit('gnuplot')

to=0
tf=2.8
N=150
dt=[tf-to]/N

b=2.65
g=9.81
h=0.07

y(1)=0.015
z(1)=0
t(1)=to
for i=1:N-1
  y(i+1)= y(i) - dt.*z(i)
  z(i+1)= z(i) - dt.*[z(i).**2 + g.*y(i) - g.*h + b.*z(i)]./y(i)
  t(i+1)= t(i) + dt
endfor

plot(y,t)
title=('Numerical solution')
xlabel=('Time')
ylabel=('Position')

Frankly, I'm unable to tell where the issue is, maybe there's something about the method I'm not getting, or maybe is my code missing something important.

Thanks for your time and attention.

Upvotes: 0

Views: 705

Answers (1)

Lutz Lehmann
Lutz Lehmann

Reputation: 26040

The realization of

y' = z

in the Euler method is

  y(i+1)= y(i) + dt.*z(i)

note the addition instead of the subtraction.

Upvotes: 0

Related Questions