- ベストアンサー
三角関数を含む方程式
下記の(1)、及び(2)が y という 数値を共有するときの 角度(K1)を求めたいのですが、どのような方法がありますでしょうか。 道筋をどなたかお願いします。 尚、K1以外の数値は 全て既知の実数です。角度単位は ラヂアンです。 y = (R + Xx) * Cos(K1) + (R * K1 - Yy) * Sin(K1) - R1 * Cos(K1 + B)・・・・(1) y = R * Cos(K1) + R * K1 * Cos(At) * Sin(K1 + At)・・・(2) B = Atn((R * K1 - Yy) / (-Xx))
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
「(1)、及び(2)が y という数値を共有するときの角度(K1)を求めたい」ということを「連立方程式を解く」と言います。 この場合、 (1)の右辺 = (2)の右辺 という式を作れば、これで未知数yが消去され、ひとつの方程式になります。 この方程式は、Cos(K1+B)を加法定理を使って展開する事で多少は整理できますが、式の上で綺麗な答が出る所まではどうも行かないようです。なので、数値的に解くしかない。 すなわち、R, R1, Xx, Yy, At に具体的な値を与えた上で、 f(K1) = (R + Xx) * Cos(K1) + (R * K1 - Yy) * Sin(K1) - R1 * Cos(K1 + Atn((R * K1 - Yy) / (-Xx))) - (R * Cos(K1) + R * K1 * Cos(At) * Sin(K1 + At)) という関数を計算するプログラム(excelでも良いのです)を用意して、 f(K1) = 0 になるようなK1をコンピュータで探す、ということです。 まず、f(K1)のグラフをコンピュータに描かせてみて「f(K1)=0を満たすK1」(つまり、f(K1)のグラフが横軸と交差するところ)の近似値をグラフから読み取ります。その近似値よりちょっと小さい値をp、ちょっと大きい値をqとしましょう。 f(p)とf(q)を計算し、これらをそれぞれfp, fqとします。すると、fpとfqの符号は異なっており、p<K1<qです。 (step 1) f((p+q)/2)を計算し、これをfrとします。 (step 2) もしf((p+q)/2)がfpと同符号なら、pを(p+q)/2で置き換え、fpをfrで置き換えます。 もしf((p+q)/2)がf(q)と同符号なら、qを(p+q)/2で置き換え、fqをfrで置き換えます。 こうすれば、「fpとfqの符号は異なっており、p<K1<q」という性質が成り立ったまま、pとqの差が半分になりますね。 以後、(step 1)(step 2)を何度も繰り返せば、pとqはどんどん答K1に近づくという仕掛けです。
お礼
ありがとうございました。これは2分法ですね。これで行なうしかないかと 諦めていました。別スレッドで微分式をご教授いただいたので、今、この式を検証しています。
補足
追伸ですが f(K1) = (R + Xx) * Cos(K1) + (R * K1 - Yy) * Sin(K1) - R1 * Cos(K1 + Atn((R * K1 - Yy) / (-Xx))) - (R * Cos(K1) + R * K1 * Cos(At) * Sin(K1 + At)) この式の本当の解の近くのK1 値は求めれられていますので、VBAで可能ですね。今検証しています。