Python Forum
Error: _vhstack_dispatcher() takes 1 positional argument but 9 were given
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Error: _vhstack_dispatcher() takes 1 positional argument but 9 were given
#1
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:
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()
Reply
#2
Please post error message and trace.

The documentation for vstack says it takes one tuple.

https://numpy.org/doc/stable/reference/g...stack.html

You are providing 9 arguments.

Let's count.
        (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]),  #1
                
        y[0],  #2

        y[1] / y[2],  #3
        
        -mqb * function_deo(y[4], y[5], y[6], y[9], ptb, mqb, pes),  #4
        
        y[6] * y[1] / y[2] - y[7],  #5
        
        -y[5] * 2.0 * y[1] / y[2] + y[6] * y[0] / y[2] - y[8] * 1.0 / y[2],  #6

        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,  #7
        
        0,  #8
        
        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)  #9
        )
I count 9.

Number 1 is a doozy. Unlike the others, it is a tuple all by iteself, and it does this twice:
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)
Reply
#3
Thanks, I corrected equations. Now, there are 10 arguments:

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))
Here are error message and trace:

TypeError                                 Traceback (most recent call last)
<ipython-input-7-5b67a8d7cfc5> in <module>()
     19 # y = myFn(R, x, cc)
     20 
---> 21 res_a = solve_bvp(fun, bc, x, y_a)
     22 res_b = solve_bvp(fun, bc, x, y_b)
     23 

2 frames
<ipython-input-6-6f15cb472e1d> in fun(x, y)
      5                       -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],
      6                       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,
----> 7                        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))

<__array_function__ internals> in vstack(*args, **kwargs)

TypeError: _vhstack_dispatcher() takes 1 positional argument but 10 were given
How can I change the code to fix the error? Is there something I could use instead of vstack?
Reply
#4
As far as vstack is concerned you are passing 10 numbers. It wants a tuple. How can you change 10 numbers into a tuple (list is acceptable too)?
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Strange argument count error rowan_bradley 3 732 Aug-06-2023, 10:58 AM
Last Post: rowan_bradley
  Error TypeError: output_type_handler() takes 2 positional arguments but 6 were given paulo79 1 1,955 Oct-17-2022, 06:29 PM
Last Post: paulo79
  What is positional argument self? Frankduc 22 5,751 Mar-06-2022, 01:18 AM
Last Post: Frankduc
  positional argument: 'self' mcmxl22 8 3,309 Dec-13-2021, 10:11 PM
Last Post: deanhystad
  TypeError: run_oracle_job() missing 1 required positional argument: 'connection_strin python_student 1 1,977 Aug-06-2021, 08:05 PM
Last Post: SheeppOSU
  int() argument Error.... but it's not :) LeoT 2 1,875 Feb-24-2021, 06:58 PM
Last Post: buran
  TypeError: sum() missing 1 required positional argument: 'num2' Insen 3 5,486 Jan-06-2021, 04:25 PM
Last Post: Insen
  TypeError: forward() missing 1 required positional argument: 'x' sveto4ka 4 12,321 Jun-17-2020, 07:25 PM
Last Post: sveto4ka
  missing 1 required positional argument: 'self' yasser 7 11,513 Jun-07-2020, 06:48 AM
Last Post: ndc85430
  random.choice() takes two positional arguments, but three were given. ShakeyPakey 5 11,728 May-31-2020, 03:13 PM
Last Post: deanhystad

Forum Jump:

User Panel Messages

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