次の形式の方程式の解を探しています。
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 を使用して、正しい最初の値を取得できます。ただし、Javascript などの一部のスクラブ言語では、絶対値が ac 未満の負の結果が許容されることに注意してください。
したがって、次のようなものが必要です。
( ( (B + a*(a^-1M)*(D-B) ) % ac) + ac ) % ac)
a^-1M は c の a の係数の逆数です。これらの波は決して交差しないため、 a%c == 0 または c%a == 0 の場合も、関数は puke する必要があります。