齿轮论坛 www.gearbbs.net

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 399|回复: 3
收起左侧

[软件] 改编: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的函数了,方便精确
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-17 05:10 , Processed in 0.166916 second(s), 13 queries , MemCache On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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