Seite 1 von 1

3d Plot Fehler

Verfasst: Samstag 18. März 2017, 19:11
von shatzman
Guten Abend zusammen,
Ich bin ganz neu bei python und muss für meine Bachelorarbeit einen 3d-Plot erstellen.
Ich kriege aber beim Ausführen immer den Fehler :
raceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\Boris\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
execfile(filename, namespace)
File "C:\Users\Boris\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/Boris/surface3d_demo.py", line 42, in <module>
B=mag(25,Y,X,100,100)
File "C:\Users\Boris\Anaconda3\lib\site-packages\numpy\lib\function_base.py", line 2218, in __call__
return self._vectorize_call(func=func, args=vargs)
File "C:\Users\Boris\Anaconda3\lib\site-packages\numpy\lib\function_base.py", line 2281, in _vectorize_call
ufunc, otypes = self._get_ufunc_and_otypes(func=func, args=args)
File "C:\Users\Boris\Anaconda3\lib\site-packages\numpy\lib\function_base.py", line 2243, in _get_ufunc_and_otypes
outputs = func(*inputs)
File "C:/Users/Boris/surface3d_demo.py", line 21, in Magfield
k=math.sqrt(4*a*p/Q)
ValueError: math domain error


Ich wäre wirklich sehr dankbar, wenn mir jemand helfen könnte.


Code: Alles auswählen

# Funktion um die Komponente des Magnetfeldes zu bestimmen
# Abstand der Spulen voneinander entspricht dem Spulenradius
# Inputvariablen:
# a : Radius der Spulen
# p : Radialerabstand von der Achse
# xa : Abstand von der Mitte des Helmholtzspulenpaares
# I : Strom
# N : Anzahl derWicklungen

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np
import scipy.special as spy
import math

def Magfield(a,p,xa,I,N):
    
    x =np.array([a/2+xa,-a/2+xa])
    Q=np.empty(2)
    k=np.empty(2)
    s=np.empty(2)
    Hx=np.empty(2)
    Hp=np.empty(2)
    
    for i in range(2):
        Q[i]=(a+p)**2+x[i]**2
        k[i]=math.sqrt(4*a*p/Q[i])
        s[i]=spy.ellipe(k[i])/(1-k[i]**2)
        Hx[i]=abs(2*I*(spy.ellipk(k[i])+(a**2-p**2-x[i]**2)*s[i]/Q[i])/math.sqrt(Q[i]))
        Hp[i]=abs(2*I*(-spy.ellipk(k[i])+(a**2+p**2+x[i]**2)*s[i]/Q[i])/math.sqrt(Q[i]))
    
    Hxges=np.sum(Hx)
    Hpges=np.sum(Hp)
    H=math.sqrt(Hxges**2+Hpges**2)
    
        
    return (H)
    

fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(-30, 30, 1)
Y = np.arange(-30, 30, 1)
X, Y = np.meshgrid(X, Y)

mag=np.vectorize(Magfield)

B=mag(25,Y,X,100,100)

Z = B
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
                       linewidth=0, antialiased=False)
#ax.set_zlim(0, 1000)

ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))

fig.colorbar(surf, shrink=0.5, aspect=5)
#plt.savefig('testss.pdf')
plt.show()

Re: 3d Plot Fehler

Verfasst: Samstag 18. März 2017, 22:15
von BlackJack
@shatzman: Lass Dir doch einfach mal die Werte und Zwischenergebnisse ausgeben die in der Zeile verwendet werden.