2014-11-23 2 views
-1

Недавно, по типу ответа элемента stackoverflow, я узнал, как выполнять операции над meshgrids с функциями, которые не были смежными с numpy, используя трюк for-loop для итерации по каждому из элементов в сетке. Я обнаружил, что он работал в большинстве случаев, однако, ниже, по какой-то причине он, кажется, терпит неудачу:
Emag - это длинная функция, которую я создал.Numpy Итерационные вычисления в meshgrid

import numpy as np 
X, Y = np.mgrid[0.1:0.15:3j, 0.1:0.15:3j] 
Z = np.zeros_like(Y)      
po = np.sqrt(X**2 + Y**2) 
phio = np.arctan2(Y,X) 
print po 
print phio 

for i in range(po.shape[0]):      
    for j in range(po.shape[1]): 
     print po[i,j] 
     print phio[i,j] 
     Z[i,j] = Emag(po[i,j], phio[i,j], 0) 
     print Z[i,j] 

Ниже приводится ответ

%run C:/Users/Nigel/Desktop/Nigel07112014.py 
[[ 0.14142136 0.16007811 0.18027756]   <--- po 
[ 0.16007811 0.1767767 0.19525624] 
[ 0.18027756 0.19525624 0.21213203]] 
[[ 0.78539816 0.89605538 0.98279372]   <--- phio 
[ 0.67474094 0.78539816 0.87605805] 
[ 0.5880026 0.69473828 0.78539816]] 
0.141421356237 <--- po[0,0] 
0.785398163397 <--- phio[0,0] 
732.46186213  <--- Z[0,0] 
0.160078105936 <--- po[0,1] 
0.896055384571 <--- phio[0,1] 
--------------------------------------------------------------------------- 
OverflowError        Traceback (most recent call last) 

кажется, что для второго элемента meshgrid, компьютер имеет проблемы продуцирующие выход для Z. Однако, когда я исполняю Emag для вторых элементов ро и phio отдельно - это прекрасно работает (см ниже):

Emag(0.160078105936, 0.896055384571, 0) 
> 589.541876301 

, который должен быть вторым элементом Z meshgrid.

Итак, где это происходит? я вставить гораздо более длинное сообщение об ошибке, если запрошенного

Полного сообщения об ошибке ниже:

--------------------------------------------------------------------------- 
OverflowError        Traceback (most recent call last) 
C:\Users\Nigel\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.4.1.1975.win-x86_64\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glob, loc) 
    195    else: 
    196     filename = fname 
--> 197    exec compile(scripttext, filename, 'exec') in glob, loc 
    198  else: 
    199   def execfile(fname, *where): 

C:\Users\Nigel\Desktop\Nigel07112014.py in <module>() 
    220   print po[i,j] 
    221   print phio[i,j] 
--> 222   Z[i,j] = Emag(po[i,j], phio[i,j], 0) 
    223   print Z[i,j] 
    224 

C:\Users\Nigel\Desktop\Nigel07112014.py in Emag(p, phi, z) 
    149 def Emag(p, phi, z): 
    150  if z >=0: 
--> 151   VE1p = (p * (z-z0) * ((MuZ)/(4 * pi * Eps0 * Eps1)) * exp(j * k1 * R0/(R0**3)) * ((3/(R0**2))- (3 * j * k1/R0)-(k1**2))) - (j * ((MuZ)/(4 * pi * Eps0 * Eps1)) * INTEGRATEZI(lambda kp: J1(kp * p) * A1(kp) * kp * k1z(kp) * (exp(1j * k1z(kp) * (z + z0))))) 
    152 
    153   VE1phi = 0 

OverflowError: math range error 
+0

Как подсказка для быстрой отладки, измените 'Emag' для печати своих аргументов. – gboffi

+1

Для чего это стоит, я попробовал ваш код с помощью «Emag», и он безукоризненно ... возможно, вам нужно опубликовать полную трассу – gboffi

+0

Привет, gboffi. Я добавил полное сообщение об ошибке - имейте в виду, что Emag работает для отдельных значений - просто не когда они находятся в meshgrid – user3065619

ответ

1

Изменение exp(j ... в вашем Emag к exp(1j ..., если вы имеете дело с экспонентом мнимого аргумента. Когда он выполняется внутри цикла j может принимать bad значения от j индекс цикла.

Должен ли я быть прав по отношению к мнимым аргументам, я бы также утроил результаты вашей функции Emag.

+0

Привет. В начале кода я написал j = 1j (не видно выше) – user3065619

+0

Он также не объясняет - я думаю - почему при вводе значений отдельно он отлично работает. – user3065619

+2

Даже если вы попытались установить 'j = 1j', если вы позже перейдете к переменной с именем' j', она будет разрушать это значение снова и снова. Вы не сможете гарантировать, что это сложная единица позже. Действительно, вам нужно быть более осторожным с использованием в коде сложных чисел. – ely

Смежные вопросы