该代码利用Python实现解方程功能
使用了scipy.optimize root 求解方程
- 可以正常调用numpy提供的数学计算函数
- 可以给创建的方程传参
# 导入所需的模块
from scipy.optimize import root
import numpy as np
# 定义待求解方程
def Equation1(n_eff2, b_1, n_0, n_1, n_2, mode_n):
# 参数定义
k_0 = 1. / 1550e-9
# 计算方程中的中间变量
K_y = (k_0 ** 2 * n_1 ** 2 - k_0 ** 2 * n_eff2 ** 2) ** 0.5
p_y = (k_0 ** 2 * n_eff2 ** 2 - k_0 ** 2 * n_0 ** 2) ** 0.5
q_y = (k_0 ** 2 * n_eff2 ** 2 - k_0 ** 2 * n_2 ** 2) ** 0.5
# 定义方程
eq = mode_n * np.pi - np.arctan(K_y / p_y) - np.arctan(K_y / q_y) - (K_y * b_1)
return eq # 返回方程
def Cal_Ex_MODE_neff(a, b_1, b_2, n_0, n_1, n_2, n_3, mode_m, mode_n):
# 初始猜测值
n_eff2 = np.array([3.2])
# 参数打包,供root函数使用
args = (b_1, n_0, n_1, n_2, mode_n)
# 使用root函数来求解该方程
sol = root(Equation1, n_eff2, args=args)
# 打印求解结果的有效折射率
print(sol.x)
# 主程序代码
if __name__ == "__main__":
n_0 = 3.1
n_1 = 3.3
n_2 = 1.44
n_3 = 3.1
a = 1.5e-6
b_1 = 500e-9
b_2 = 1000e-9
mode_n = 1
# 调用计算函数
Cal_Ex_MODE_neff(
a=a,
b_1=b_1,
b_2=b_2,
n_0=n_0,
n_1=n_1,
n_2=n_2,
n_3=n_3,
mode_m=0,
mode_n=0
)