c# - 在 C# 中查找 sin/cos 曲线的最小值和最大值的最有效方法

标签 c# algorithm math curve numerical-analysis

背景: 我的程序中有一个函数,它获取一组点并在这些点生成的曲线上找到最小值和最大值。问题是它非常慢,因为它使用 while 循环根据近似误差计算出最小值/最大值。不完全确定这是什么正式方法,因为我不是自己写的,但我知道我们需要一种新的、更高效的方法。

问题:我的问题是,使用 C# 查找曲线上的最小最大值点的最佳和最有效的方法/算法是什么,它也非常准确?

关于曲线:我附近有大学的《数值分析》一书,所以我只需要一个方法名称和正确方向的插入。我可以生成尽可能多的点来近似曲线,但我想将点数保持在有效的最小值。该曲线始终是 Sin/Cos 曲线的一段形状,但并不总是相同的曲线,并且总是小于一个周期。 Theta 的范围是 0° 到 359.999...° 它有一些相位和幅度偏移,Y 永远不会是负数。该函数/算法必须快速运行,因为它会随着曲线的变化每隔几百毫秒运行一次。

如有任何建议,我们将不胜感激。

编辑

关于曲线的更多信息: 这些点是在鼠标移动时生成的。这些点是一组基于带有惰轮的驱动设计中橡胶带长度的点,例如汽车中的蛇形皮带。惰轮的位置决定了皮带的长度,我得到了曲线 [皮带长度 (y) 与惰轮位置 (x)]。在这种情况下,惰轮是一个枢转惰轮,并将进行恒定的圆周运动。如果驱动器设计发生变化,则曲线将发生变化,因为长度点发生变化,或者因为惰轮的运动范围受到限制。惰轮的运动范围可能是 0° 到 359.999...°,并且是如上所述的 theta。对于开槽惰轮,最大范围是曲线周期的 1/2(更容易的问题)。

我想我需要的是两种类型惰轮的通用求解器,但真正的问题在于旋转惰轮。

最佳答案

如果您有一个二次方程,那么最大值或最小值将始终位于方程的微分为 0 的点。如果您的二次方程的公式为 ax^2 + bx + c = 0,则该点将当 x = -b/2a 时。

是否是最大opr最小值可以通过看a来判断。如果 a > 0 则它是最小值,如果 a < 0 则它是最大值(如果 a = 0 则它不是二次方)。

希望对您有所帮助。如果您没有这种形式的曲线方程,您能说说您必须从哪里开始工作吗?

编辑:问题已更改,因此曲线是正弦曲线的一部分,不再是二次曲线。因此,此答案不再适用。

编辑2:

对于正弦曲线,一般方程为 y = a sin(mx+t) + c。您将永远无法准确确定原始方程式,因为对于任何解决方案,都会有一个更高频率的解决方案也匹配。我不确定目前需要多少点才能精确计算 a 的值(这将给出曲线的最小值和最大值)。

关于c# - 在 C# 中查找 sin/cos 曲线的最小值和最大值的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3187667/

相关文章:

algorithm - Golang 读取文本文件并从其中一个读入值中取出一部分

javascript - 如何从一个数字生成反菱形?

function - Swift、数学函数和协议(protocol)

c# - 如果流大小超过1024字节,则NamedPipeServer拆分数据

algorithm - 二叉树的实现

Python - 加速 A Star 寻路算法

python - 找到python中分数列表的最小公分母

c# - 在意图中提示用户缺少实体并等待他们响应

c# - 标准 java 类的 .Net 实现

c# - 将 TCP 客户端从 c# 转换为 nodejs