+发表新主题
hongboli2000 发布于2025-4-8 17:37 422 次浏览 24 位用户参与讨论
跳转到指定楼层
skywho 发表于 2025-4-20 17:38:50
恩,还不错。。。
回复

使用道具 举报

skywho 发表于 2025-4-20 17:47:26
好东西啊!!!#
回复

使用道具 举报

skywho 发表于 2025-4-20 17:54:11
恩!!!
回复

使用道具 举报

imust_zxm 发表于 2025-4-24 10:48:31
恩!!!
回复

使用道具 举报

imust_zxm 发表于 2025-4-24 10:57:59
九年前我发布的此贴,希望他对大家有所帮助。想想当时是无意中发现有一个人发了一个帖子说他们公司的以为德国工程师,给他展示了一个用迭代法计算反渐开线函数的方法。当时他还用手工计算展示了一下结果。我当时看到心里一震欢喜。要知道2001年当我在大学学习机械原理的时候,我们可是翻着一个黄的小册子,通过渐开线的值,去查渐开线角度。那过程叫一个郁闷。我当时就问过叫我们的教授,能不能算出来,哪怕麻烦一些。得到的答案是No!!后来参加工作,在技术科,每每遇到齿轮计算时,看到老工程师还是在按照机械设计手册,用手去算,到了反渐开线时就翻那本“小黄书”,渐开线那几篇都翻烂了。我当时用Fortran77编了个DOS下运行的齿轮计算程序。(这要摆我大学计算机课所赐,这么个古董却被2000后的机械专业的计算机课教授着,记得当时还舔着脸有个计算机等级考试,考Fortran和QB,TMD就光想收钱,不想提升)。思路回来呀,别吐槽!后来又用不是很熟的C语言把Fortran那个程序写了一遍,但没到要通过inv值算角度时,没办法就是让计算机停止,等着我“小黄书”,输入角度值后再继续进行。后来看到那个帖子时,我已经用VB编一些常用的机械设计方面计算程序了。我如获至宝地连夜把程序写完,一直的问题就是计算不够精确,看起来不完美,但实际使用精度的确够用了。后来过了3年左右,就把它发到论坛来。也感谢有人提出精度相对不好的问题。本着实用主义,我还是继续用它,但每每运行,总是想到帖子里面的大家的意见。从大前天,我是从零开始学python。理由很简单,就是看到美国大学的里面有宣传页说python课程60小时595刀,妈的这不抢钱吗?我在那里学英语比这还贵,我就忍了,谁让我对英语没天分呢?但python这东西,我作为一名机械从业人员,这么也曾经被人家称呼过“工”之类的,python走起。当然还有另外一个原因,我爱人是搞生物研究的,她之前和我提过python,说想学就是没时间,应为有很多成千上百万条数据要用别人变得程序去筛选,出图等(太专业我不懂), 那些程序都是用python编的。我曾经用我有限的Excel知识,帮着弄过一些数据,不到30兆的Excel竟然被我弄司机了。好吧,这就是我学python的两个动力。如果非要给第三个原因的话,那就是奥巴马不也提倡过python吗?这TMD太牵强了。总之,我想最关键的就是我的好奇心。我把这小20年和反渐开线函数磕磕绊绊的这点事都捣鼓出来了,扯得太多了。
回复

使用道具 举报

imust_zxm 发表于 2025-4-24 11:05:45
这个帖子是我将近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')
回复

使用道具 举报

imust_zxm 发表于 2025-4-24 11:12:46
这个帖子是我将近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')
回复

使用道具 举报

imust_zxm 发表于 2025-4-24 11:22:36
这个帖子是我将近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')
回复

使用道具 举报

imust_zxm 发表于 2025-4-24 11:32:30
这个帖子是我将近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')
回复

使用道具 举报

imust_zxm 发表于 2025-4-24 11:38:31
上次说过,这个反算渐开线的程序是基于十多年前我在网发现的一个迭代的方法。我照的抄下来,用计算机程序辅助迭代运算。可我并不知这其中的道理。就像16年前学机械原理时,当教授回答我,已知inv的值无法计算角度,只能去查表一样,我没有去质疑弄明白为什么不能。直到发现网上的迭代方法。今天我无意中又有个新发现,就是牛顿迭代,这个东西在大四优化设计时学过,但我当时没有把它和渐开线反算的事联系起来。14年后的今天我抄起笔推导公式,发现反算渐开线的一种解决途径,经过我修改之前的计算程序,验证该方法成立。对于一个放下数学十几年的人,能自己推到出个公式,还是有点小成就的。至少反算渐开线的事也算找到了一个根本的途径,而不是最早的教授说不行就信,到后来抄了别人一个自己都不理解为什么的算法变了个小程序使用了十几年。我把基于牛顿迭代的程序贴在下面,感兴趣的朋友可以看看。Xn+1=Xn+f(Xn)/f(Xn)导(分母是函数的求导)。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ| Archiver|手机版|小黑屋| 碧波制图网 Published by Stonespider

Copyright © 2021-2023 Kangli Wu   All Rights Reserved.

Powered by Discuz! X3.5( 苏ICP备18011607号-1 )

快速
回复
返回
列表
返回
顶部