+发表新主题
hongboli2000 发布于2025-4-8 17:37 491 次浏览 23 位用户参与讨论
跳转到指定楼层
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 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)导(分母是函数的求导)。
回复

使用道具 举报

imust_zxm 发表于 2025-4-24 11:46:26

最近学python有点痴迷,结合GUI终于搞出和以前用VB一样的GUI交互界面,而不是单纯的和命令行打交道,又改了改计算精度。就有了现在这个计算精度。从当初够用就好的实用主义,到现在弄个程序非要算的有多精确。纯属个人娱乐了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

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

本版积分规则

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

Copyright © 2021-2023 Kangli Wu   All Rights Reserved.

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

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