2

これを wolfram alpha に放り込んで正弦関数を使用して答えを得ることができることは承知していますが、すべてのデータが整数であると仮定すると、それも解けるはずです。

2 つの波があり、それらは常に整数の波長を持ちます。私の例では、3 波長の波と 4 波長の波です。両方が時間 0 秒で開始する最も単純なケースでは、開始時とその後 12 秒ごとに両方とも 0 になります。lcm を使用してこれらの交差点を決定することは、私が考えるすべてのケースで機能しますが、それらが異なる時間に開始する場合、両方の周波数がゼロになることしか予測できず、開始時は予測できません。

たとえば、時間 1 で長さ 3 の波が開始し、時間 0 で長さ 4 の波が開始する場合、時間 4 で両方とも 0 になり、その後は 12 ごとになります。しかし、4 の長さが時間 2 で始まり、3 の長さが時間 1 で始まる場合、それらは両方とも時間 10 とその後の 12 ごとに 0 です。

最初に両方が一緒に 0 になることを決定する方法は何ですか?

4

2 に答える 2

2

次の形式の方程式の解を探しています。

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 する必要があります。

于 2012-10-05T16:34:34.400 に答える
2

各波について、波が 0 である時間のリストを生成します。リストの交点を取る; 交差点から最も早い時間を取る。それよりも複雑にする必要がありますか?無限のデータ構造を処理できるシステムを持っていない限り、各リストに有限数の要素のみを生成したいと思うでしょう。

(1+3m)他のアプローチは、あなたの例では、各波の項を算術級数として書き、(0+4n)方程式を解くことです

(1+3m)-(0+4n) == 0

無限の解決策があります。しかし、設定m==1した場合n==1; 設定した場合m==2、整数の解はありませんn。お気に入りの言語で小さな関数を記述して、整数の解を 1 つずつ吐き出すのは簡単です。

そして、もう少し代数は、与えられた例では、(m,n)値のシーケンスが であることを示しています(1,1),(5,4),(9,7), ...,(m,n),(m+4,n+3),...

前と同じように、これを一般化するために、利害関係者への演習として残します。

于 2012-10-05T15:42:15.077 に答える