У меня есть следующий код, где мне нужно решить выражение, чтобы найти корни. Выражение нужно решить для омеги.
import numpy as np
from sympy import Symbol,lambdify
import scipy
from mpmath import findroot, exp
eta = 1.5
tau = 5 /1000
omega = Symbol("omega")
Tf = exp(1j * omega * tau)
symFun = 1 + Tf * (eta - 1)
denom = lambdify((omega), symFun, "scipy")
Tf_high = 1j * 2 * np.pi * 1000 * tau
sol = findroot(denom, [0+1j,Tf_high])
Программа выдает ошибку и я не могу исправить. Ошибка: TypeError: невозможно создать mpf из 0,005Iomega
Изменить 1. Я попытался реализовать другой подход на основе комментариев. Первый подход заключался в использовании модуля sympy.solveset. Второй подход заключался в использовании fsolve из scipy.optimise. Оба не дают надлежащего вывода.
Для ясности я копирую соответствующий код для каждого подхода вместе с выводом, который я получаю.
Подход 1 - Симпи
import numpy as np
from sympy import Symbol,exp
from sympy.solvers.solveset import solveset,solveset_real,solveset_complex
import matplotlib.pyplot as plt
def denominator(eta,Tf):
return 1 + Tf * (eta - 1)
if __name__ == "__main__":
eta = 1.5
tau = 5 /1000
omega = Symbol("omega")
n = 1
Tf = exp(1j * omega * tau)
denom = 1 + Tf * (eta - 1)
symFun = denominator(eta,Tf)
sol = solveset_real(denom,omega)
sol1 = solveset_complex(denom,omega)
print('In real domain', sol)
print('In imaginary domain',sol1)
Output:
In real domain EmptySet
In imaginary domain ImageSet(Lambda(_n, -200.0*I*(I*(2*_n*pi + pi) + 0.693147180559945)), Integers)
Подход 2 Сципи
import numpy as np
from scipy.optimize import fsolve, root
def denominator(eta,tau,n, omega):
Tf = n * np.exo(1j * omega * tau)
return 1 + Tf * (eta - 1)
if __name__ == "__main__":
eta = 1.5
tau = 5 /1000
n = 1
func = lambda omega : 1 + (eta - 1) * (n * np.exp( 1j * omega * tau))
sol = fsolve(func,10)
print(sol)
Output:
Cannot cast array data from dtype('complex128') to dtype('float64') according to the rule 'safe'
Как исправить программу? Пожалуйста, предложите мне подход, который даст правильные результаты.
mpmath.findroot
, почему вы используетеscipy/numpy
вlambdify
? - person hpaulj   schedule 04.10.2020mpf from '0.005/omega'
иexponential function
. Я получаю только ошибку'mpc' object has no attribute 'exp'
. - person hpaulj   schedule 04.10.2020solve
вернет список выражений, если вы этого хотите. - person Oscar Benjamin   schedule 05.10.2020