3d Plot Fehler

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
shatzman
User
Beiträge: 1
Registriert: Samstag 18. März 2017, 19:00

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()
Zuletzt geändert von Anonymous am Samstag 18. März 2017, 22:11, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@shatzman: Lass Dir doch einfach mal die Werte und Zwischenergebnisse ausgeben die in der Zeile verwendet werden.
Antworten