операция над матрицами с элементами в форме функции

#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


 
  1. Первая проблема заключается в том, gammab=np.sqrt(kaa**2.0-sig**2.0) что numpy не может принимать комплексное число, под которым я подразумеваю отрицательное значение sqrt , и если я не использую Numpy, я не могу выполнять с ними операции, потому kaa что и sig являются функциями.
  2. Во-вторых: я не могу распечатать элементы матрицы (после реверсирования 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 and sympy вместе.