May-08-2022, 10:23 PM
Hi!
I have a system of 10 nonlinear ODE with 10 variables (y[0], y[1], ... y[9]), there are 10 initial conditions for y[i] for x=0 and 4 conditions for x = 6.804.
I try to solve a boundary value problem using scipy.integrate.solve_bvp according to the following algorithm: https://docs.scipy.org/doc/scipy/referen...e_bvp.html
I get the error "_vhstack_dispatcher() takes 1 positional argument but 9 were given" though I tried to use np.dstack instead of np.hstack. Please help to fix the error.
My code is below:
I have a system of 10 nonlinear ODE with 10 variables (y[0], y[1], ... y[9]), there are 10 initial conditions for y[i] for x=0 and 4 conditions for x = 6.804.
I try to solve a boundary value problem using scipy.integrate.solve_bvp according to the following algorithm: https://docs.scipy.org/doc/scipy/referen...e_bvp.html
I get the error "_vhstack_dispatcher() takes 1 positional argument but 9 were given" though I tried to use np.dstack instead of np.hstack. Please help to fix the error.
My code is below:
import numpy as np from scipy.integrate import solve_bvp import matplotlib.pyplot as plt from scipy.constants import g def fun(x, y): return np.vstack((ptb / y[4] * y[5] / np.sqrt(y[5]**2 + y[6]**2) * function_deo(y[4], y[5], y[6], y[9], ptb, mqb, pes) - 1 / y[2]**2 + y[1]**2 / y[2], ptb / y[4] * y[6] / np.sqrt(y[5]**2 + y[6]**2) * function_deo(y[4], y[5], y[6], y[9], ptb, mqb, pes) - y[0] * y[1] / y[2]), y[0], y[1] / y[2], -mqb * function_deo(y[4], y[5], y[6], y[9], ptb, mqb, pes), y[6] * y[1] / y[2] - y[7], -y[5] * 2.0 * y[1] / y[2] + y[6] * y[0] / y[2] - y[8] * 1.0 / y[2], y[5] * (-2.0 / y[2]**3 + y[1]**2 / y[2]**2) + y[6] * (-y[0] * y[1]) / y[2] + y[8] * y[1] / y[2]**2, 0, ptb / y[4]**2 * (np.sqrt(y[5]**2 + y[6]**2)) * function_deo(y[4], y[5], y[6], y[9], ptb, mqb, pes)) #Implement evaluation of the boundary condition residuals: def bc(ya, yb): return np.array([ya[-0.03899746484, 1.05800280714, -0.30648856279, -0.605427, 1, -0.065851, 1.361805, 1.419320, -8.219418e-5, 0.6], yb[3.230021179060866e-17, 0.5519654178809713, 2.221001221001221, np.pi]]) #Define the initial mesh with 20 nodes: x = np.linspace(0.0, 6.804, 20) #To obtain solutions, different initial guesses for y are used. They are denoted by subscripts a and b. y_a = np.zeros((10, x.size)) y_b = np.zeros((10, x.size)) y_b[0] = 3.230021179060866e-17 res_a = solve_bvp(fun, bc, x, y_a) res_b = solve_bvp(fun, bc, x, y_b) x_plot = np.linspace(0, 6.804, 100) y_plot_a = res_a.sol(x_plot)[0] y_plot_b = res_b.sol(x_plot)[0] #plt.plot(x_plot, y_plot_a, label='y_a') #plt.plot(x_plot, y_plot_b, label='y_b') plt.legend() plt.xlabel("x") plt.ylabel("y") plt.show()