Python Forum
Need Help solving second order differential equations
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Need Help solving second order differential equations
#1
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:
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()
Reply
#2
I think the first argument of odeint() is a function that computes the first derivative of the state vector at time t, so it's probably something along the line of
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
 
ci = [0.01, 0., 0., 0.0156613949, 0.00237, 0.]

def func(c, t):
    a, A, b, B, d, D = c
    #a, b, d, A, B, D = c # Correct order of arguments?
    p2 = np.pi ** 2
    n = np.linalg.norm([a, b, d])
    q = (n - 3 / 4) / n
    res = [A, -4 * p2 * q * a, B, -4 * p2 * q * b, D, -4 * p2 * q * d - p2]
    return res
    
 
def solver(t, pinit):
    return odeint(func, pinit, t)
 
 
time = np.arange(0, 500.0, 0.01)
solution = solver(time, ci)
plt.plot(solution[:,0], solution[:,2])
plt.show()
Here I assumed that the state vector had the six coordinates a, b, d, and their derivatives which I called A, B, D. I may be wrong in the order of these parameters, so please explain the correct order of the variables.

Don't use lambda functions if the expression is too long. It makes code difficult to read.
Reply
#3
Yes, the vector you assumed was the correct one, and thanks for this information regarding the usage (or lack thereof) of lambda functions. It is properly working now and giving the results it should be giving. Thank you a lot!
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  plot differential equation sympy dan_adi 0 2,983 Oct-13-2020, 10:44 AM
Last Post: dan_adi
  construction of Neural Network for solving Differential equations arshad 0 1,615 Jun-04-2020, 09:20 AM
Last Post: arshad
  Fitting experimental data with differential equations : Optimization madoko 6 6,839 Jan-17-2019, 11:30 AM
Last Post: scidam
  Solving nth degree simultaneous equations hegdep 3 3,662 Sep-28-2017, 08:33 PM
Last Post: nilamo

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020