В питоне я пытался решить этот символический интеграл
t = symbols('t')
inte = sympy.Matrix( " long and complex expresion with many exp(t*numbers) in a matrix " )
Gam = sympy.integrate( inte , (t , 0 , 0.1 ) )
Gam = Gam.evalf()
Gam = np.array( Gam ) # to turn the expression into a numpy array
В Matlab я пытался решить одно и то же выражение
syms t
inter = eval( int( inte , t , 0 , 0.1 ) ) % to turn the expression into a numerical array
Дело в том:
В Matlab я получил результат, который (до того, как он будет оценен в eval) содержит форму cos (t) внутри, и когда он будет оценен в eval, он дал мне массив только с действительными числами, также это правильный ответ в целом упражнение.
Но когда я делаю ту же задачу в python, я получаю выражение, которое не содержит символического результата с cos (t), вместо этого оно имеет много exp (I * t). Итак, когда я оцениваю результат, чтобы получить массив, у меня есть массив только с комплексными числами.
Из-за этого можно подумать, что Matlab лучше решает символические интегралы, чем Python.
Мой вопрос: есть ли способ достичь того же результата в python? Я отказываюсь верить, что невозможно получить тот же результат с помощью некоторых алгебраических манипуляций или, может быть, путем решения интеграла другим способом.
Конечно, я уже сделал обычное, упростил и расширил. Если вы хотите запустить код Python, он здесь.
t = symbols( 't ' )
init_printing(use_unicode=True)
tini = 0
tfin = 10
T = 1e-1
time = np.array( np.arange( tini , tfin , T ) , ndmin=2 )
A = np.array([[-8, 1, 0, ],
[-5, 0, 1, ],
[-6, 0, 0, ]])
B = np.array([[0],
[1],
[0]])
V , R = np.linalg.eig(A) # Eigvalues in a vector, Matrix Diagonalizante
M = np.round( np.linalg.inv(R) @ A @ R , 4) # Diagonal Matrix
ExpA_t = np.diag( e**(V*t) )
R = smp.Matrix(R)
B = smp.Matrix(B)
ExpA_t = smp.Matrix(ExpA_t)
inte = ( R @ ExpA_t @ R**-1 ) @ B
Gam = integrate( inte , (t , tini , T) ) # here is the issue
Gam = np.array( Gam , dtype = complex )
Спасибо.
numpy
иsympy
не интегрированы. Было бы неплохо различать по именам переменные числовыеnumpy
, объектные dtypenumpy
с символическими элементами (все, что связано с символомt
) и чистыеsympy
выражения. Не смешивайте случайноnumpy
иsympy
— делайте это только с явным намерением. - person hpaulj   schedule 08.08.2020R
имеет комплексные значения, которые переносятся до конца. - person hpaulj   schedule 08.08.2020