Jun-25-2019, 03:39 AM
(This post was last modified: Jun-25-2019, 05:38 AM by Gribouillis.)
So I have been working on a code to solve a coupled system of second order differential equations, in order to obtain the numerical solution of an elastic-pendulum. I've written the code needed to get the results and plot them, but I keep getting the following error: "TypeError: <lambda>() missing 1 required positional argument: 'd'". I really appreciate any help. Here's the code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import numpy as np import matplotlib.pyplot as plt from scipy.integrate import odeint import math ci = [ 0.01 , 0. , 0. , 0.0156613949 , 0.00237 , 0. ] def solver(t, pinit): return odeint( lambda a,b,d : [a[ 1 ], - 4 * math.pi * math.pi * a[ 0 ] * (math.sqrt(a[ 0 ] * a[ 0 ] + b[ 0 ] * b[ 0 ] + d[ 0 ] * d[ 0 ]) - 3 / 4 ) / math.sqrt(a[ 0 ] * a[ 0 ] + b[ 0 ] * b[ 0 ] + d[ 0 ] * d[ 0 ]),b[ 1 ], - 4 * math.pi * math.pi * b[ 0 ] * ((a[ 0 ] * * ( 2 ) + b[ 0 ] * * ( 2 ) + d[ 0 ] * * ( 2 )) * * ( 1 / 2 ) - 3 / 4 ) / (a[ 0 ] * * ( 2 ) + b[ 0 ] * * ( 2 ) + d[ 0 ] * * ( 2 )) * * ( 1 / 2 ), d[ 1 ], - 4 * math.pi * math.pi * d[ 0 ] * (math.sqrt(a[ 0 ] * * ( 2 ) + b[ 0 ] * * ( 2 ) + d[ 0 ] * * ( 2 )) - 3 / 4 ) / math.sqrt(a[ 0 ] * * ( 2 ) + b[ 0 ] * * ( 2 ) + d[ 0 ] * * ( 2 )) - math.pi * math.pi], pinit, t) time = np.arange( 0 , 500.0 , 0.01 ) solution = solver(time, ci) plt.plot(solution[:, 0 ], solution[:, 2 ]) plt.show() |