#python #arrays #numpy #matrix #mathematical-optimization
#python #массивы #numpy #матрица #математическая оптимизация
Вопрос:
У меня есть набор функций, которые, как правило, являются элементами матрицы, и я должен выполнить некоторые
*
/
операции и и над ними, а также между каждым элементом матрицы. Для этого я использую Numpy, Sympy, и вот код, написанный на Python 2.7.
import numpy as np
import math
import cmath
import matplotlib.pyplot as pl
from cmath import*
from sympy import*
# delta, deltz and some other numbers are simple float number I changed varibles in for loop to the first value to test this section of my whole cod
f1 = Matrix([[1, 0],[ 0, 1]]) #an empty matrix from sympy
delta = 2.0*np.pi*1.6*((1.0/1530)-(1.0/(2.0*1550))) #this is a simple float number
deltz = (5*(10.0**6))/50
def apdFunc(x):
return np.exp(-2*np.log(2)*((x-(5/2))/5)**2)
def modFunc(x):
return (1 np.cos((2*np.pi/1)*x))
d1 = np.linspace(-20.0, 20.0, 5000)
apdFunc = apdFunc(d1)
modFunc = modFunc(d2)
Profile = modFunc*apdFunc
sig = (np.pi/1530)*fbgProfile delta
kaa = (np.pi/1530)*fbgProfile
j = sqrt(-1)
gammab = np.sqrt(kaa**2.0-sig**2.0)
#Matrix elements definition
f11 = np.cosh(gammab*deltz)-1j*(sig/gammab)*np.sinh(gammab*deltz)
f22 = np.cosh(gammab*deltz) 1j*(sig/gammab)*np.sinh(gammab*deltz)
f12 = -1j*(kaa/gammab)*np.sinh(gammab*deltz)
f21 = 1j*(kaa/gammab)*np.sinh(gammab*deltz)
f1 = f1*Matrix([[f11, f12],[ f21, f22]])
PO=f1[0,0]
NO=f1[1,0]
REF=abs((NO/PO)**2)
pl.plot(d3,REF)
pl.show()
print f1[0,0]
print PO
print REF
- Первая проблема заключается в том,
gammab=np.sqrt(kaa**2.0-sig**2.0)
что numpy не может принимать комплексное число, под которым я подразумеваю отрицательное значениеsqrt
, и если я не использую Numpy, я не могу выполнять с ними операции, потомуkaa
что иsig
являются функциями. - Во-вторых: я не могу распечатать элементы матрицы (после реверсирования
kaa**2.0-sig**2.0
и решения первой проблемы), поэтому я не могу построить графикREF=abs((NO/PO)**2)
, и появляется сообщение об ошибкеAttributeError: 'ImmutableDenseNDimArray' object has no attribute 'as_coeff_Mul'
Любая помощь приветствуется, и если вы можете ввести ссылку, чтобы узнать, как решить проблему.
Комментарии:
1.
np.sqrt(-1 0j)
работает.sqrt
также упоминаетсяscipy
альтернатива.*
импорт вносит путаницу в код. По крайней мере, вы не импортируетеnumpy
таким образом) Трудно сказать, где (или почему) вы используетеsympy
. Подобные строкиapdFunc = apdFunc(d1)
сбивают с толку перезаписьdef
функции ее результатом массива. Как правило, я не рекомендую использоватьnumpy
andsympy
вместе.