Я новичок в python/numpy. Мне нужно сделать следующий расчет: для массива дискретных времен t вычислить $e^{At}$ для матрицы $2\times 2$ $A$
Что я сделал:
def calculate(t_,x_0,v_0,omega_0,c):
# define A
a_11,a_12, a_21, a_22=0,1,-omega_0^2,-c
A =np.matrix([[a_11,a_12], [a_21, a_22]])
print A
# use vectorization
temps = np.array(t_)
A_ = np.array([A for k in range (1,n+1,1)])
temps*A_
x_=scipy.linalg.expm(temps*A)
v_=A*scipy.linalg.expm(temps*A)
return x_,v_
n=10
omega_0=1
c=1
x_0=1
v_0=1
t_ = [float(5*k*np.pi/n) for k in range (1,n+1,1)]
x_, v_ = calculate(t_,x_0,v_0,omega_0,c)
Однако я получаю эту ошибку при умножении A_ (массив, содержащий n раз A ) и temps (содержащий время, для которого я хочу вычислить exp(At) :
ValueError: операнды не могли передаваться вместе с формами (10,) (10,2,2)
Насколько я понимаю векторизацию, каждый элемент в A_ будет умножаться на элемент с тем же индексом из temps; но я думаю, что я не понимаю это правильно. Любая помощь/комментарии очень ценятся
np.matrix
? Создатели Numpy в основном хотят, чтобы его не существовало, поэтому, как правило, лучше использовать многомерныйnp.array
, за исключением очень избранного количества операций. - person roganjosh   schedule 06.02.2018