Я пытаюсь найти фундаментальную ТЕ-моду диэлектрического волновода. Я пытаюсь решить эту проблему, чтобы вычислить две функции и попытаться найти их пересечение на графике. Однако у меня возникли проблемы с получением точки пересечения на графике. Мой код:
def LHS(w):
theta = 2*np.pi*1.455*10*10**(-6)*np.cos(np.deg2rad(w))/(900*10**(-9))
if(theta>(np.pi/2) or theta < 0):
y1 = 0
else:
y1 = np.tan(theta)
return y1
def RHS(w):
y = ((np.sin(np.deg2rad(w)))**2-(1.440/1.455)**2)**0.5/np.cos(np.deg2rad(w))
return y
x = np.linspace(80, 90, 500)
LHS_vals = [LHS(v) for v in x]
RHS_vals = [RHS(v) for v in x]
# plot
fig, ax = plt.subplots(1, 1, figsize=(6,3))
ax.plot(x,LHS_vals)
ax.plot(x,RHS_vals)
ax.legend(['LHS','RHS'],loc='center left', bbox_to_anchor=(1, 0.5))
plt.ylim(0,20)
plt.xlabel('degree')
plt.ylabel('magnitude')
plt.show()
Точка пересечения составляет около 89 градусов, однако мне сложно вычислить точное значение x. Я пробовал fsolve, решить, чтобы найти решение, но все равно напрасно. Кажется, невозможно распечатать решение, если это не единственное решение. Можно ли найти решение только в том случае, если x находится в определенном диапазоне? Может ли кто-нибудь дать мне здесь какое-нибудь предложение? Спасибо!
изменить: уравнение выглядит так (m = 0):
и я пытаюсь решить тета здесь, найдя точку пересечения
edit: Один из способов, который я пробовал, таков:
from scipy.optimize import fsolve
def f(wy):
w, y = wy
z = np.array([y - LHS(w), y - RHS(w)])
return z
fsolve(f,[85, 90])
Однако это дает мне неправильный ответ. Я тоже пробовал что-то вроде этого:
import matplotlib.pyplot as plt
x = np.arange(85, 90, 0.1)
f = LHS(x)
g = RHS(x)
plt.plot(x, f, '-')
plt.plot(x, g, '-')
idx = np.argwhere(np.diff(np.sign(f - g)) != 0).reshape(-1) + 0
plt.plot(x[idx], f[idx], 'ro')
print(x[idx])
plt.show()
Но он показывает: ValueError: истинное значение массива с более чем одним элементом неоднозначно. Используйте a.any () или a.all ()
fsolve
или что-то подобное. (С другой стороны, проблема совершенно не связана с matplotlib.) - person ImportanceOfBeingErnest   schedule 12.02.2018fsolve
предполагает плавный аргумент. Во-вторых, ваш RHS отличается от того, что вы показываете на своем участке. В-третьих, ваша RHS не является реальной функцией, т.е. аргументsqrt(x)
становится отрицательным, когдаw
приближается к значению 82. - person Dmitri Chubarov   schedule 12.02.2018sqrt(x)
. - person Alex Dubrovsky   schedule 12.02.2018