2016-09-07 3 views
1

Ich versuche, die Zeit, den Winkel und die Geschwindigkeit zu bestimmen, die etwas bewegen müsste, um sich mit einer sich bewegenden Ellipse zu kreuzen . Gerade jetzt minimale Zeit) ich habe versucht, Sympy zu verwenden, um mit diesem Abenteuer helfen Hier finden Sie den Code, die ich ausführen:.Get "TypeError: kann mph nicht erzeugen 'Bei Verwendung von sympy.nsolve()

import sympy as sp 
sp.init_printing() 

delta_x, delta_y, t = sp.symbols('delta_x delta_y t', real=True, positive=True) 
V, V_s, x_0, y_0, theta_s, theta_t = sp.symbols('V V_s x_0 y_0 theta_s theta_t', real=True) 
x, y = sp.symbols('x y', real=True) 

EQ1 = sp.Eq(((x-(x_0+V*sp.cos(theta_t)*t))/(delta_x+V*sp.cos(theta_t)*t))**2+((y-(y_0+V*sp.sin(theta_t)*t))/(delta_y+V*sp.sin(theta_t)*t))**2-1, 0) 
sx = sp.Eq(x, V_s*sp.cos(theta_s)*t) 
sy = sp.Eq(y, V_s*sp.sin(theta_s)*t) 

mysubs = [(V,5), (x_0, 10), (y_0, 10), (theta_t, 7*(sp.pi/4)), (delta_x, 0), (delta_y, 0)] 
sp.nsolve((EQ1.subs(mysubs), sx.subs(mysubs), sy.subs(mysubs)), (V_s, theta_s, t), (5, 0.0, 1)) 

das Ergebnis dieser Operation ergibt:

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/sympy/mpmath/calculus/optimization.py in findroot(ctx, f, x0, solver, tol, verbose, verify, **kwargs) 
    927   try: 
--> 928    fx = f(*x0) 
    929    multidimensional = isinstance(fx, (list, tuple, ctx.matrix)) 

<string> in <lambda>(_Dummy_75, _Dummy_76, _Dummy_77) 

/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/sympy/mpmath/matrices/matrices.py in __init__(self, *args, **kwargs) 
    300      for j, a in enumerate(row): 
--> 301       self[i, j] = convert(a) 
    302    else: 

/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/sympy/mpmath/ctx_mp_python.py in convert(ctx, x, strings) 
    661    return ctx.convert(x._mpmath_(prec, rounding)) 
--> 662   return ctx._convert_fallback(x, strings) 
    663 

/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/sympy/mpmath/ctx_mp.py in _convert_fallback(ctx, x, strings) 
    613     raise ValueError("can only create mpf from zero-width interval") 
--> 614   raise TypeError("cannot create mpf from " + repr(x)) 
    615 

TypeError: cannot create mpf from 0.08*(x - 13.535533905932737622)**2 + 0.08*(y - 6.464466094067262378)**2 - 1 

ist Dies, weil das System nicht eingeschränkt genug ist? Es gibt eine Familie von Winkeln und Geschwindigkeit s, mit dem die bewegliche Ellipse abgefangen werden könnte. Dieser Fehler scheint dies nicht zu implizieren. (Ja, auch wenn ich versuche, V_s in diesem Problem einzuschränken, erscheint der gleiche Fehler).

ich die folgenden Versionen der Dinge bin mit:

| Software | Version | 
|----------|-----------| 
| python | 3.5.2  | 
| sympy | 1.0  | 
| mpmath | 0.19  | 

Antwort

0

Die Variablen x und y sind noch symbolisch in den Gleichungen. nsolve erfordert alle Variablen angegeben werden und mindestens so viele Gleichungen wie Variablen. Sie müssen also entweder Werte für sie in mysubs aufnehmen oder für sie auflösen (aber um das mit nsolve zu tun, werden Sie zwei weitere Gleichungen benötigen).

Verwandte Themen