Numpy: ValueError: Einstellung der ein array-element mit einer Sequenz
Ich bin einfach zu spielen mit python-wissenschaftliche Bibliotheken, besonders die Beispiele von hier: http://faculty1.coloradocollege.edu/~sburns/toolbox/ODE_II.html
Ich modifizierte es durch die Definition eines "force-Funktion" und versucht, eine einfache (aber nicht physikalischen Beispiel), wo die Kraft hängt von der x-und y-position des Objekts. Zusätzlich möchte ich eine Darstellung der Kraft-Feld mit quiever. Das problem ist, dass ich nicht verstehen, wie man die Kraft richtig funktionieren, hängen von (einer Funktion) die x-und y-Komponenten der position des Objekts, vor allem bekomme ich die Fehlermeldung, die unten genannten.
from pylab import *
from scipy.integrate import odeint
import numpy as np
## set initial conditions and parameters
g = 9.81 # acceleration due to gravity
th = 91 # set launch angle
th = th * pi/180. # convert launch angle to radians
v0 = 100 # set speed
x0=0 # specify initial conditions
y0=0
vx0 = v0*sin(th)
vy0 = v0*cos(th)
## define force Funktion
def F_func(x):
F = zeros(2)
F[0] = x[1] #
F[1] = x[0] #
return F
## define function to compute f(X,t)
def f_func(state,time):
f = zeros(4) # create array to hold f vector
f[0] = state[2] # f[0] = x component of velocity
f[1] = state[3] # f[1] = x component of velocity
f[2] = F_func(state[:2])[0] # f[2] = acceleration in x direction
f[3] = F_func(state[:2])[1] # f[3] = acceleration in y direction
return f
## set initial state vector and time array
X0 = [ x0, y0, vx0, vy0] # set initial state of the system
t0 = 0.
tf = 10
tau = 0.1
#tf = input("Enter final time: ")
#tau = input("Enter time step: ")
# create time array starting at t0, ending at tf with a spacing tau
t = arange(t0,tf,tau)
## solve ODE using odeint
X = odeint(f_func,X0,t) # returns an 2-dimensional array with the
# first index specifying the time and the
# second index specifying the component of
# the state vector
print X
# putting ':' as an index specifies all of the elements for
# that index so x, y, vx, and vy are arrays at times specified
# in the time array
x = X[:,0]
y = X[:,1]
vx = X[:,2]
vy = X[:,3]
## plot the trajectory
fig = figure()
ax = fig.add_subplot(1,1,1)
## Enlarge Limits by en Percent
en = 0.05
#xMin,xMax = 0,10
xMin,xMax = min(x),max(x)
yMin,yMax = min(y),max(y)
xMin,xMax = xMin - (xMax-xMin)*en,xMax + (xMax-xMin)*en
yMin,yMax = yMin - (yMax-yMin)*en,yMax + (yMax-yMin)*en
#plot(x,y,[xMin,xMax],[yMin,yMax])
#plot(x,y,[0,10],[0,10])
ax.plot(x,y)
ax.axis('tight')
xlim([xMin,xMax])
ylim([yMin,yMax])
xG,yG = meshgrid(linspace(xMin,xMax,10),linspace(yMin,yMax,5))
ax.quiver(xG,yG,F_func(zip(xG,yG))[0],F_func(zip(xG,yG))[1],pivot='middle',minshaft=5,minlength=1,alpha=0.1)
xlabel('x')
ylabel('y')
show()
Mit diesem code bekomme ich folgende Fehlermeldung:
ValueError Traceback (most recent call last)
/usr/lib/python2.7/dist-packages/IPython/utils/py3compat.pyc in execfile(fname, *where)
176 else:
177 filename = fname
--> 178 __builtin__.execfile(filename, *where)
/home/myuser/python/test.py in <module>()
87 xG,yG = meshgrid(linspace(xMin,xMax,10),linspace(yMin,yMax,5))
88
---> 89 ax.quiver(xG,yG,F_func(zip(xG,yG))[0],F_func(zip(xG,yG))[1],pivot='middle',minshaft=5,minlength=1,alpha=0.1)
90
91
/home/myuser/python/test.py in F_func(x)
20 def F_func(x):
21 F = zeros(2)
---> 22 F[0] = x[1] #
23 F[1] = x[0] #
24 return F
ValueError: setting an array element with a sequence.
Kann jemand das erklären und wie es zu lösen ist?
InformationsquelleAutor student | 2014-02-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie es mit
statt Ihre
F_func
.Und ersetzen Sie den Aufruf von Köcher mit
Finden Sie heraus, warum numpy gibt einen Fehler, indem Sie ein
print x
auf die erste Zeile in derF_func
.F
ist nur ein zwei-element-array, und Sie versuchen, zuweisen von arrays an jedem seiner beiden Elemente (Daher der Fehler "- Einstellung ein array-element mit einer Sequenz").Dies geschieht, weil
zip(xG, yG)
tut etwas, das Sie wahrscheinlich nicht wollen, es zu tun. (Versuchen Sie es, spielen mit ihm inipython
).Dies ist die daraus resultierende Handlung des ODE-Lösung, die ich bekommen, wenn Ihr code:
InformationsquelleAutor ibab