# Numeric multivariable ode solver in Sage?

 3 hi everyone, is there any numeric multivariable ode solver in sage? i want to solve the double pendulum problem, so i need to solve 4 first order differential equations which deppends on theta1(t) amd thetha2(t). I need something like a multivariable runge kutta algorithm asked Aug 19 '10 ngativ 93 ● 1 ● 7 ● 15 Kelvin Li 443 ● 10 ● 17 You should also ask on ask.scipy.org (but ask about scipy - a component of sage - instead of sage). Post a link here. William Stein (Aug 19 '10)

 2 Most of Sage's numerics is done via Numpy/Scipy which is included in Sage and usable from the Sage Notebook. To solve an ODE using Scipy first reduce your problem to a system of 1st degree ODEs: $u'(x,y,t) = f(t,x,y,u)$. Then, follow the instructions on the relevant Scipy documentation: Ordinary differential equations (odeint). The key components to solving the numerical ODE is (1) writing a Python function for the right-hand side, $f$, (2) writing a function for its Jacobian, $J_f$, (3) and calling the scipy.integrate.odeint function. Consult the scipy.integrate.odeint documentation for more information on its use. You can read this documentation by entering sage: from scipy.integrate import odeint sage: odeint?  Finally, I providing the Jacobian for your problem is an optional argument but it helps with convergence. posted Aug 19 '10 cswiercz 829 ● 5 ● 16 ● 33 http://www.cswiercz.info/ Thanks!, but.. it works for a multivariable diferential equation system like $u'(x,y,t) = f(t,x,y,u)$. ? i only see that odeint only works for du/dt=f(u,t) or im wrong? ngativ (Aug 19 '10) **odeint** allows passing of arguments. These arguments are supposed to match those of $f$ and $J_f$ in the same order. For example, if $f$ and $J_f$ depend on a parameter, $\alpha$, then just include $\alpha$ in the **args** parameter of **odeint**. Spatial vecotrs $x$ and $y$ can behave similarly. cswiercz (Aug 19 '10)
 2 Hi, Another option is to use the function desolve_odeint (from version 4.6 on, see the docs on desolve_odeint?), which uses the odeint solver internally, but takes as an input symbolic funcions . For instance, to integrate the Lorenz attractor, you would do  sage: x,y,z=var('x,y,z') # Declare the variables sage: lorenz=[10.0*(y-x),x*(28.0-z)-y,x*y-(8.0/3.0)*z] sage: times=srange(0,50.05,0.05) # Integration Time sage: ics=[0,1,1] # and initial conditions sage: sol=desolve_odeint(lorenz,ics,times,[x,y,z]) #integrate  to plot the attractor, simply: sage: line3d(sol)  I do not know what you mean exactly by the double pendulum, but here it is something similar: sage: theta1,theta2,x1,x2=var('theta1,theta2,x1,x2') sage: dpendulum=[x1,x2,-sin(theta1)-0.1*sin(theta2),-sin(theta2)+0.1*sin(theta1)] sage: # Time and initial conditions sage: times=srange(0,50.05,0.05) sage: ics=[1,1,0,0] sage: sol=desolve_odeint(dpendulum,ics,times,[theta1,theta2,x1,x2])  and a nice plot is here sage: graphics_array([line(zip(sol[:,0],sol[:,2])),line(zip(sol[:,1],sol[:,3]))])  Joaquim Puig posted Mar 03 '11 Joaquim Puig 171 ● 5 ● 9
 1 i make it! using desolvesystemrk4[w1,w2,aw1,aw2],[s1,s2,w1,w2],ics=[0,0.5,0,0.0,0.5],ivar=t,step=0.01,end_points=20) I compared these results with the results from a maple worksheet that i downloaded from internet and they match very well. The Sage's speed is very good But i would like to learn how to use odeint from scipy and ode_solver from gsl to solve this system :S I just started to using Sage 3 days ago and i love it. Thanks! posted Aug 19 '10 ngativ 93 ● 1 ● 7 ● 15

[hide preview]