有没有像MATLAB';Python中的vpasolve

有没有像MATLAB';Python中的vpasolve,python,matlab,solver,Python,Matlab,Solver,我正在用Python模拟MATLAB代码。问题是Matlab vpasolve的精确实现在Python中不可用。我使用了fsolve来求解这个方程,但在MATLAB和Python中的解是不同的 我想知道Python中是否有其他可用的解算器可以与vpasolve工作相同 vpasolve不精确,相反,它允许您以数字定义的更高精度进行求解。虽然MATLAB称之为可变精度,但其他领域大多称之为任意精度。与vpasolve最接近的等价物是在python中使用mpmath 如果你的目标是使用符号计算得到精

我正在用Python模拟MATLAB代码。问题是Matlab vpasolve的精确实现在Python中不可用。我使用了fsolve来求解这个方程,但在MATLAB和Python中的解是不同的


我想知道Python中是否有其他可用的解算器可以与vpasolve工作相同

vpasolve
不精确,相反,它允许您以数字定义的更高精度进行求解。虽然MATLAB称之为可变精度,但其他领域大多称之为任意精度。与vpasolve最接近的等价物是在python中使用mpmath


如果你的目标是使用符号计算得到精确解,那么你可以选择sympy

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
我想用Python模拟精确的MATLAB代码。当我使用Python的Symphy包时,代码会进入无限循环。后来,我使用了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相同的答案