gpt4 book ai didi

algorithm - 确定不同频率和开始时间的 2 个正弦波何时同时为零的离散方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:38:13 25 4
gpt4 key购买 nike

我知道我可以将它扔进 wolfram alpha 并使用正弦函数得到答案,但假设我的所有数据都是整数,它也应该像它们一样可解。

所以我有两个波,它们总是有整数波长。对于我的示例,它是一个 3 波长波和一个 4 波长波。在两者都从 0 秒开始的最简单情况下,它们在开始时和之后每 12 秒都为 0。使用 lcm 来确定这些交叉点在我认为的每种情况下都有效,但如果它们在不同时间开始,它只能预测它们都为零的频率,而不是何时开始。

例如,如果长度为 3 的波从时间 1 开始,长度为 4 的波在时间 0 开始,则它们在时间 4 时均为 0,然后每 12 次。但是如果4个长度从第2时刻开始,第3个长度从第1时刻开始,那么它们在第10时刻和之后的每12时刻都为0。

第一次一起为0的方法是什么?

最佳答案

您正在寻找以下形式的方程的解:

sin((2π*A)(x-B)) == 0 

sin((2π*C)(x-D)) == 0

通过相乘,还要注意:

sin(2πAx - 2πAB) == 0

和类似的

sin(2πCx - 2πCD) == 0

或者:

Ax - AB == 0
Cx - CD == 0

在这些函数为零的情况下,它提供了以下完全不令人震惊的值:

x = B + 2π/(2π*A) * k
x = D + 2π/(2π*C) * k

其中 K 是一个整数。

由于您限制自己使用波长为整数的值的函数,因此 1/A 和 1/C 的值同样保证为整数。所以这进一步简化了:

x = B mod a
x = D mod c

这里 a 和 c 是频率。

您可以选择自己喜欢的求解联立模方程的形式,我将演示其中最简单的一种:

x = B + k*a
B+ k*a = D mod c
k * a = D - B mod c
k = (a^-1M) (D-B) mod c
k = (a^-1M) (D-B) + j*c
x = B + a*(a^-1M)*(D-B) + (a*j-c)
x = B + a*(a^-1M)(D-B) mod ac

请注意,a^-1m 是 a mod c 的模逆,您必须使用扩展欧几里得算法来计算它。 (我将省略它,因为您的示例的值非常小):

x = 1 + 3(3)(0-1) mod ac
x = -8 mod ac

给定这样的值,您可以在脚本中使用右侧的 mod ac 并获得正确的第一个值;但是请注意,某些 scrub 语言(如 Javascript)将允许绝对值小于 ac 的负结果。

所以你想要这样的东西:

( ( (B + a*(a^-1M)*(D-B) ) % ac) + ac ) % ac)

a^-1M 是 a 在 c 中的模数倒数。如果 a%c == 0 或 c%a == 0,你的函数也应该呕吐,因为这些波永远不会相交

关于algorithm - 确定不同频率和开始时间的 2 个正弦波何时同时为零的离散方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12749484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com