你的算法太直接了,显得有些笨拙。运算次数太多。
其实只要采用中间值进行探索,就能大大提高效率。
我调试的时候发现,一般只要循环运算7、8次就已经很精确了。
这是我的vc代码(摘自圆柱齿轮的几何计算程序代码):
//中间值探索法求alfatp(已知inv(alfatp),求alfatp)
double inv_x,inv_alfatp,alfatpmin,xt1,xt2,alfatpmax,inv_alfat;
xt1=xn1*cos(alfa);
xt2=xn2*cos(alfa);
inv_alfat=tan(alfat)-alfat;
inv_alfatp=inv_alfat+2*(xt1+xt2)/(z1+z2)*tan(alfat);
alfatp=pi/4;
alfatpmin=0;
alfatpmax=pi/2;
inv_x=tan(alfatp)-alfatp;
while (fabs(inv_x-inv_alfatp)>1e-8)
{
if (inv_x-inv_alfatp>0 )
alfatpmax=alfatp;
else
alfatpmin=alfatp;
alfatp=(alfatpmin+alfatpmax)/2;
inv_x=tan(alfatp)-alfatp;
};
// alfatp求值完毕 |