这个帖子是我将近9年前发的。感谢版主指出计算精度不足。我本着实用主义够用就好,就没去弄个究竟。是VB编程时,要采用双精度才能更精度,至少我犯懒没去算。不过这么多年也一直惦着这个事。直到前天从零开始学python,我发现python的计算可以计算很大的数,我觉得该拿这个渐开线程序练练手。结果有意外收获,python和VB采用同样的算法,精度提升不少。如下:请输入角度值20
INV 值 0.014904383867336446
角度值 20.000000000000004
ainv迭代精度 0.0
ainv迭代次数 4
大家感兴趣可以和版主回复精度不足中的数据去比较,VB的确有误差。Python现在是一个比较流行的东东,通过3天的学习感受其强大之处。也在此向大家推荐Python的学习,虽然用它去变机械上的顺序执行的程序有点大材小用,不管了,能讲重复的劳动,变成一个程序就是贡献。我也贴出我的渐开线计算python程序供大家参考,我是初学没有采用GUI交互的窗口,希望大牛们别笑话。这个渐开线的算法是关键。应为2002年学机械原理时问过教授,说知道渐开线值求角度只能查表,知道后来发现有个人贴出他们公司德国工程师的计算方法,印象中还是手工迭代计算的。从我上面的计算结果可以看出迭代的次数4次就可以达到很好的精度,所以手算也有存在的可能,毕竟不是64层汉罗塔。
Python程序:
——————————————————————————————————————————————————————————
import math
class calinv():
def ainv(self,degree):
b=float(degree**0.25)
a=0.0
i=0
while abs(b-a)>1e-30:
i+=1
a=b
b=-1/(a+degree)+a+1/math.tan(a)
print('角度值',b*180/math.pi)
print('ainv迭代精度',abs(b-a))
print('ainv迭代次数',i)
return b
def inv(self,val):
print('INV 值',(math.tan(val))-val)
return (math.tan(val))-val
cal=calinv()
flag=input('已知角度请输入d;已知INV值请输入i')
if flag=='d':
deg = float(input('请输入角度值'))
rad=deg/180*math.pi
temp1=cal.inv(rad)
cal.ainv(temp1)
elif flag=='i':
value=float(input('请输入INV值'))
temp2=cal.ainv(value)
cal.inv(temp2)
else:
print('我有些不明白,请检查你输入的指令--->d 或 i') |