Help with Python RK4: Solving Error Plotting 1st Order ODE

In summary, the conversation is about a person attempting to plot a first order ODE using Python's rk4 method. However, they are encountering an error and are seeking help in understanding it. The code they provided includes a time step, initial and final time, and a function for calculating the derivative. The expert suggests that the error may be due to not passing arguments to the function or having null values for the time and derivative variables.
  • #1
gulaman
18
0
i have been attempting to plot a first order ODE with pyhton's rk4

i can't display the graph and i have been having this error:

Traceback (most recent call last):
File "C:\Documents and Settings\AP155user38\Desktop\gladys python codes\differential equations and runge-kutta\1ODE.py", line 20, in <module>
Y[i+1] = rk4(t, Y, f)
File "c:\python25\lib\site-packages\matplotlib-0.98.3.0001-py2.5-win32.egg\matplotlib\mlab.py", line 928, in rk4
yout = np.zeros( (len(t),), np.float_)
TypeError: object of type 'function' has no len()

i need help in understanding this so i could move on with solving the error. :)

i hope you guys could help me out.

here's my code:

from scipy import *
from pylab import *


h = 0.1 #time step
ti = 0. #start
tf = 10. #end
t = arange(ti, tf, h) #time array

N = len(t) #number of time steps
Y = zeros(N) #stores value of y at each time step

Y[0] = 0. #initial condition

def f(t, Y):
dYdt = -9.81 - 0.5*Y
return dYdt

for i in range(N-1):
Y[i+1] = rk4(t, Y, f)

plot(t,Y)
show()

thanx.

gulaman
Quezon City, Philippines
 
Technology news on Phys.org
  • #2
I don't use Python but I had "learned" it enough to pass a class.

I think you're getting the error because you're not passing any arguments to f for rk4 to use.

Or

The value of t or Y is a null value.

Hope that helps. :-/
 
  • #3


Hello Gulaman,

Thank you for reaching out for help with your Python RK4 code. I understand that you are trying to plot a first order ODE and are encountering an error when trying to display the graph. The error you are receiving seems to be related to the length of your time array, t. The error message states that the object of type 'function' (in this case, your function f) has no length. This is because in your code, you are passing the function f as the second argument in your call to rk4, when it should be the third argument.

The third argument in the rk4 function should be the time step, h. So your code should look like this:

from scipy import *
from pylab import *

h = 0.1 #time step
ti = 0. #start
tf = 10. #end
t = arange(ti, tf, h) #time array

N = len(t) #number of time steps
Y = zeros(N) #stores value of y at each time step

Y[0] = 0. #initial condition

def f(t, Y):
dYdt = -9.81 - 0.5*Y
return dYdt

for i in range(N-1):
Y[i+1] = rk4(t, Y, h, f) #passing h as the third argument

plot(t,Y)
show()

I hope this helps to solve your error and allows you to continue working on your project. Best of luck with your Python coding!
 

1. What is RK4 and how does it solve a first-order ODE?

RK4 stands for Runge-Kutta 4th order method, which is a numerical technique used to solve ordinary differential equations (ODEs). It is a fourth-order accurate method, meaning that the error decreases by a factor of 16 when the step size is halved. RK4 works by using a weighted average of four different slopes to approximate the solution to the ODE at each step, making it a highly accurate and efficient method for solving first-order ODEs.

2. How do I implement RK4 in Python to solve a first-order ODE?

To implement RK4 in Python, you will need to define a function that represents the first-order ODE and specify the initial conditions. Then, you can use a for loop to iterate through the desired number of steps, calculating the weighted averages and updating the solution at each step. Finally, you can plot the results using a graphing library such as matplotlib.

3. What are some common errors that may occur when using RK4 to solve a first-order ODE?

Some common errors that may occur when using RK4 to solve a first-order ODE include issues with the initial conditions, incorrect implementation of the RK4 algorithm, and selecting a step size that is too large. It is important to carefully check your code and make sure it is accurately representing the ODE and using the correct formulas for the weighted averages.

4. How can I plot the error while using RK4 to solve a first-order ODE?

To plot the error while using RK4 to solve a first-order ODE, you can calculate the exact solution to the ODE (if known) and compare it to the RK4 solution at each step. Then, you can plot the difference between the two solutions over time using a graphing library. This can help you visualize the accuracy of your RK4 implementation and make adjustments if necessary.

5. Can RK4 be used to solve higher-order ODEs?

Yes, RK4 can be used to solve higher-order ODEs by converting them into a system of first-order ODEs. This is done by introducing new variables for the derivatives of the higher-order terms. The resulting system can then be solved using RK4 in the same way as a first-order ODE.

Similar threads

  • Programming and Computer Science
Replies
2
Views
895
  • Programming and Computer Science
Replies
4
Views
4K
  • Programming and Computer Science
Replies
4
Views
4K
  • Programming and Computer Science
Replies
1
Views
1K
Replies
1
Views
1K
  • Programming and Computer Science
Replies
4
Views
2K
  • Programming and Computer Science
Replies
3
Views
1K
Replies
1
Views
1K
  • Engineering and Comp Sci Homework Help
Replies
6
Views
854
  • Programming and Computer Science
Replies
8
Views
1K
Back
Top