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()