Код MATLAB выглядит следующим образом
for i=1:length(wdth_var)
gp_wdth(i)=gp_org+2*(wdth_org-wdth_var(i));%gap
N1(i)=k0*wdth_var(i)/2*sqrt(n_e^2-(beta_s/k0)^2);
N2(i)=k0*wdth_var(i)/2*sqrt((beta_s/k0)^2-n_f^2);
f1=tan(2*N1(i));
f2=((N1(i)*N2(i)*(1+tanh(2*N2(i)*(gp_wdth(i)/2)/wdth_var(i))))/(N1(i)^2-(N2(i)^2*tanh(2*N2(i)*(gp_wdth(i)/2)/wdth_var(i)))));
f3=((N1(i)*N2(i)*(1+coth(2*N2(i)*(gp_wdth(i)/2)/wdth_var(i))))/(N1(i)^2-(N2(i)^2*coth(2*N2(i)*(gp_wdth(i)/2)/wdth_var(i)))));
n_effe_wdth(i)=vpasolve(f1-f2==0,beta_s,[10 20])
n_effo_wdth(i)=vpasolve(f1-f3==0,beta_s,[10 20])/k0;
end
Я хочу эмулировать точный код MATLAB в Python. Когда я использую пакет sympy Python, код переходит в бесконечное число l oop. Позже я использовал пакет numpy, ответы которого нигде не похожи на то, что я получаю в MATLAB
Python numpy код пакета:
for in range (len(wvl)):
k0wvl = 2*pi/wvl[i]
n_e_wvl_demo = n_e_wvl[i]
f3 = lambda beta_s: np.tan(k0wvl*wdth_org/2*(np.sqrt((n_e_wvl_demo**2 - (beta_s/k0wvl)**2)))) - ((((k0wvl*wdth_org/2*(np.sqrt((n_e_wvl_demo**2 - (beta_s/k0wvl)**2))))) * (k0wvl*wdth_org/2*(np.sqrt(((beta_s/k0wvl)**2 - n_f**2)))) * (1 + np.tanh(2 * (k0wvl*wdth_org/2*(np.sqrt(((beta_s/k0wvl)**2 - n_f**2)))) * (gp_org / 2) / wdth_org))) / (((k0wvl*wdth_org/2*(np.sqrt((n_e_wvl_demo**2 - (beta_s/k0wvl)**2)))))**2 - ((k0wvl*wdth_org/2*(np.sqrt(((beta_s/k0wvl)**2 - n_f**2))))**2 * np.tanh(2 * (k0wvl*wdth_org/2*(np.sqrt(((beta_s/k0wvl)**2 - n_f**2)))) * (gp_org / 2) / wdth_org))))
f4 = lambda beta_s: np.tan(k0wvl*wdth_org/2*(np.sqrt((n_e_wvl_demo**2 - (beta_s/k0wvl)**2)))) - ((((k0wvl*wdth_org/2*(np.sqrt((n_e_wvl_demo**2 - (beta_s/k0wvl)**2)))))* (k0wvl*wdth_org/2*(np.sqrt(((beta_s/k0wvl)**2 - n_f**2)))) * (1 + (1/(np.tanh(2 * (k0wvl*wdth_org/2*(np.sqrt(((beta_s/k0wvl)**2 - n_f**2)))) * (gp_org / 2) / wdth_org))))) / (((k0wvl*wdth_org/2*(np.sqrt((n_e_wvl_demo**2 - (beta_s/k0wvl)**2)))))**2 - ((k0wvl*wdth_org/2*(np.sqrt(((beta_s/k0wvl)**2 - n_f**2))))**2 * (1/(np.tanh(2 * (k0wvl*wdth_org/2*(np.sqrt(((beta_s/k0wvl)**2 - n_f**2)))) * (gp_org / 2) / wdth_org))))))
a = (fsolve(f3, [10, 20]))/k0wvl
a_1.append(a[0])
b = (fsolve(f4, [10, 20])) / k0wvl
b_1.append(b[0])
Я хотел бы знать, если В Python есть любой другой решатель, который может работать точно так же, как vpasolve, и давать те же ответы, что и MATLAB.