齿轮论坛 www.gearbbs.com

 找回密码
 注册
搜索
查看: 1108|回复: 14
收起左侧

[软件] 改编:excel建立一个反渐开线计算函数,involuteFunction()

[复制链接]
发表于 2024-5-17 23:13 | 显示全部楼层 |阅读模式

本帖子中包含更多资源。

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

x
  • 打开VBA编辑器:
    • 在Excel中,按下 Alt + F11 打开VBA编辑器。
  • 插入一个新模块:
    • 在VBA编辑器中,点击“插入”菜单,然后选择“模块”。
  • 粘贴代码:
    • 在新模块的代码窗口中,粘贴您提供的VBA代码。
  • 运行函数:
    • 关闭VBA编辑器,返回Excel工作表。
    • 在工作表中的任何单元格输入公式,使用您自定义的函数,例如 =InvoluteFunction(x),其中 x 是您想要计算的具体数值。
  • 保存工作簿:
    • 保存您的工作簿为宏启用的工作簿格式(.xlsm),这样自定义函数将会被保存。

```vba
Public Function invFunction(x As Double)
    Dim IP1, OP2, R1, R2, Mate, PN, i As Double
    IP1 = x ' 输入值
    R1 = 0 ' 初始下界
    R2 = 90 ' 初始上界
    Mate = (R2 - R1) * 0.6180339887498 + R1 ' 使用黄金分割比例初始化Mate

    For i = 1 To 3000 ' 迭代1000次
        OP2 = Tan(Mate * 3.1415926535898 / 180) - Mate * 3.1415926535898 / 180 ' 计算当前Mate的函数值
        PN = OP2 - IP1 ' 计算当前Mate与目标值的差
        If PN > 0 Then
            R2 = Mate ' 如果PN为正,则减小上界
            Mate = (R2 - R1) * 0.3819660112502 + R1 ' 使用黄金分割的倒数调整Mate
        Else
            R1 = Mate ' 如果PN为负,则增大下界
            Mate = (R2 - R1) * 0.6180339887498 + R1 ' 使用黄金分割比例调整Mate
        End If
    Next

    invFunction = Mate ' 返回逼近的解
End Function
```

### 可能的改进:

1. **增加错误处理**:如果输入值 `x` 不在某个有效范围内,函数可能无法正确工作。可以添加一些错误检查来确保输入值是合理的。

2. **优化迭代次数**:硬编码迭代次数为1000可能不是最佳选择。可以根据问题的具体情况来调整迭代次数,或者使用更高级的停止条件,比如当解的精度达到某个阈值时停止迭代。

3. **提高精度**:如果需要更高的精度,可以考虑使用更精确的数学常数,或者使用更复杂的数值方法。

4. **函数命名**:避免使用与Excel内置函数同名的名称,比如将 `inv` 改为 `InverseInvolute` 或其他不会冲突的名称。

5. **注释**:添加更多的注释来解释代码的每一步,这对于理解和维护代码非常重要。

6. **性能优化**:如果性能是一个问题,可以考虑使用更高效的算法或者并行计算方法。

### 使用自定义函数:

在Excel中,您可以像使用其他内置函数一样使用这个自定义函数。假设您已经将上述代码保存在一个宏启用的工作簿中,并且函数名是 `InverseInvolute`,那么您可以在Excel单元格中输入以下公式:

```
=InverseInvolute(您的输入值)
```

将 `“您的输入值”` 替换为您想要计算的具体数值。这将调用您的自定义函数,并返回计算结果。

发表于 2024-5-18 18:53 | 显示全部楼层
太复杂啦。极简风格如截图,单变量求解渐开线函数,给定目标值,角度为可变量。

屏幕截图 2024-05-18 185133.png
发表于 2024-5-18 20:59 | 显示全部楼层
cwhcn1 发表于 2024-5-18 18:53
太复杂啦。极简风格如截图,单变量求解渐开线函数,给定目标值,角度为可变量。

太复杂啦。极简风格如截图,无需单变量求解渐开线函数.
无标题45.png
 楼主| 发表于 2024-5-18 21:29 | 显示全部楼层
迭代次数少了误差大,你说的这个我试过,不如这个精确,这个以后都就成为一个excelr的函数了,方便精确
发表于 2024-8-5 16:15 | 显示全部楼层
都是大神级别的存在
发表于 2024-8-6 08:50 | 显示全部楼层
用最简单的MathCAD来求解吧
别用Excel了。
a01.png
用数学软件,可以将函数用到其它计算中,与编程是一个道理。定义一次,就可以重复使用!

发表于 2024-8-6 22:22 | 显示全部楼层
mrmrw 发表于 2024-8-6 08:50
用最简单的MathCAD来求解吧
别用Excel了。

invandainv.png

不如用国产软件,计算不求人 ,啥都能自己搞定。
发表于 2024-8-6 22:35 | 显示全部楼层
speed_long 发表于 2024-8-6 22:22
不如用国产软件,计算不求人 ,啥都能自己搞定。



在计算不求人软件里,想自己编写计算工具也是很方便快捷的,写什么就能计算什么。
ainvcode.png
 楼主| 发表于 2024-8-8 10:21 | 显示全部楼层
speed_long 发表于 2024-8-6 22:35
在计算不求人软件里,想自己编写计算工具也是很方便快捷的,写什么就能计算什么。

34545 - 84831我下载了一个2013版本,这是申请码,最新的是2014吗?你的主页在哪
发表于 2024-8-9 23:54 | 显示全部楼层
sz202 发表于 2024-8-8 10:21
34545 - 84831我下载了一个2013版本,这是申请码,最新的是2014吗?你的主页在哪

注册:

F01611-X16355-T88096
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-2 23:26 , Processed in 0.239462 second(s), 14 queries , MemCache On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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