【发布时间】:2010-07-06 15:24:47
【问题描述】:
背景: 我的程序中有一个函数,它采用一组点并在这些点生成的曲线上找到最小值和最大值。问题是它非常慢,因为它使用 while 循环根据近似误差来计算最小值/最大值。不完全确定这是什么正式方法,因为我不是自己编写的,但我知道我们需要一种新的更高效的方法。
问题:我的问题是使用 C# 在曲线上找到最小最大点的最佳和最有效的方法/算法是什么,也非常准确?
关于曲线:我附近有一本大学的数值分析书,所以我只需要一个方法名称和一个正确的方向。我可以生成尽可能多的点来逼近曲线,但我想将点数保持在有效的最小值。曲线总是呈正弦/余弦曲线的一段形状,但并不总是相同的曲线,而且总是小于一个周期。 Theta 的范围是 0° 到 359.999...° 它有一些相位和幅度偏移,并且 Y 永远不会是负数。这个函数/算法必须快速运行,因为它会随着曲线的变化每隔几百毫秒运行一次。
欢迎提出任何建议。
编辑
关于曲线的更多信息:这些点是在鼠标移动时生成的。这些点是基于带惰轮的驱动设计中的橡胶带长度的一组点,例如汽车中的蛇形皮带。惰轮的位置决定了皮带的长度,我得到曲线[皮带长度(y)与惰轮位置(x)]。在这种情况下,惰轮是一个可旋转的惰轮,将具有恒定的圆周运动。如果驱动设计改变,曲线也会改变,要么是因为长度点改变,要么是因为惰轮的运动范围受到限制。惰轮的运动范围可能是 0° 到 359.999...°,并且是如上所述的 theta。对于开槽惰轮,最大范围是曲线周期的 1/2(更简单的问题)。
我想我需要的是这两种惰轮的通用求解器,但真正的问题是旋转惰轮。
【问题讨论】:
-
您的积分是如何产生的?起初我以为它们是从其他地方采样的,但现在我发现它们随着您移动鼠标而发生变化。这是否意味着您有一个方程正在以某种方式被鼠标移动改变?如果您以编程方式创建这些点,那么您应该拥有(或能够推导出)曲线的方程...
-
@Chris,在帖子中添加了有关您的问题的更多信息。
-
某个范围内 sin(或 cos)的最小值/最大值为 -1、1 或端点的 sin(或 cos)。你还需要什么?
-
@Mike:你的值是数组还是列表?
-
听起来你应该能够直接计算最小值/最大值,但不幸的是我不完全理解手头问题的机制 - 主要是因为我不确定闲人是什么或确实(并且对传动带的细节有点模糊,等等。除非你有时间做一个图表或向可怜的小我解释问题到底是什么样的,否则我将退出这里。;-)希望其他人能更好地理解您的问题并能够提供帮助。 :)
标签: c# algorithm math curve numerical-analysis