Когда я копирую-вставляю код, если он работает (к счастью) и выдает сообщение об ошибке:
1231:~/mypy$ python3 stack53381357.py
Traceback (most recent call last):
File "stack53381357.py", line 105, in <module>
Z = Ek(X, Y)
File "stack53381357.py", line 67, in Ek
while s < 3.05 and t < 1e-7 :
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Обратите внимание, что полное сообщение говорит нам, где проблема - в Ek
функция в строке 67. Это важная информация.
Это подтверждает мой комментарий - Ek
вызывается с аргументами массива и распространяется по циклу, изменяя s
на массив.
Когда я добавляю печать в конец цикла Ek
:
print(type(s), s.shape)
Я получаю до появления ошибки:
<class 'numpy.ndarray'> (100, 100)
Итак, да, s
изменилосьот скаляра до массива numpy
, той же формы, что и массивы X
и Y
, которые вы передали Ek
.
Кажется, что ваши 3 функции были написаны для скалярных входов.Я не собираюсь пытаться выяснить, как они должны работать с meshgrid
входами.Вы можете перебирать элементы pa
и Ea
.Или вы можете изменить функции так, чтобы они вели себя при заданных значениях массива.По крайней мере,
while (s<3.05) and (t<1e-7):
должно быть записано, чтобы иметь смысл, когда s
является массивом.Могут быть другие проблемы с входами массива.