齿轮论坛 www.gearbbs.net

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 2768|回复: 10
收起左侧

用VB实现反求渐开线函数方程的根

[复制链接]
发表于 2008-9-15 17:48 | 显示全部楼层 |阅读模式

本帖子中包含更多资源。

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

x
用VB实现反求渐开线函数方程的根
Public Function Inv(a As Double) As Double
Inv = Tan(a) - a
End Function

Public Function AInv(num As Double) As Double
Dim lowangle As Double
Dim highangle As Double
Dim midangle As Double
lowangle = 0
highangle = Atn(1) * 2
Do While highangle - lowangle > 10 ^ -12
midangle = (lowangle + highangle) / 2
If Inv(midangle) > num Then
highangle = midangle
Else
lowangle = midangle
End If
Loop
AInv = (lowangle + highangle) / 2 / Atn(1) * 45
End Function

加个牛顿法的
Public Function AInv2(num As Double) As Double
Dim x1 As Double
Dim x2 As Double
x2 = Atn(1)
Do
x1 = x2
x2 = x1 - (Tan(x1) - x1 - num) / (1 / Cos(x1) ^ 2 - 1)
Loop While Abs(x2 - x1) > 10 ^ -12
AInv2 = x2 / Atn(1) * 45
End Function
发表于 2008-9-15 18:34 | 显示全部楼层
vb不懂,只懂点c++。不知道invα=0时误差有多大:)
发表于 2008-9-15 19:17 | 显示全部楼层
太复杂了,有公式,迭代三次到五次即可,精度小数点后5-6位,用计算器也可很快计算,用电子表格迭代很方便,
发表于 2008-9-16 19:20 | 显示全部楼层
上传一个自己用VB做的程序,精度非常高,可以将上面框格里的计算结果复制粘贴到下面的框格中来验证。 渐开线函数计算器.rar (5.92 KB, 下载次数: 40)
发表于 2008-9-17 12:06 | 显示全部楼层

回复 4# chen_yh 的帖子

0的时候没有显示:)
发表于 2008-9-17 21:12 | 显示全部楼层

你的意思是输入0时也要给出结果来吗?算是一个小小缺陷吧,不过不影响使用,改好后再发上来。
发表于 2008-9-18 11:56 | 显示全部楼层

回复 6# chen_yh 的帖子

0.00000000001时有较高的精度。
发表于 2008-9-19 20:53 | 显示全部楼层
反算时精度可达到秒的第六位小数。
发表于 2008-9-20 18:51 | 显示全部楼层
用root函数的解法
Snap1.png
发表于 2008-9-20 18:53 | 显示全部楼层
find函数的解法
Snap1.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|齿轮论坛

GMT+8, 2024-5-19 18:07 , Processed in 0.181955 second(s), 12 queries , MemCache On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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