方程式 Asin(wt) = Bt + C をtについて解くとどうなるでしょうか?
研究でプログラムを組むために必要なのでぜひお願いします.

A 回答 (3件)

とてもスマートには行かないと思います。

本気で取り組むと、これだけで結構な仕事になっちゃう。
この方程式をいろいろな係数について何度も解くのかどうか、係数の精度がどの位か、値の範囲がどうか、などによってかなり事情が変わりますが、とりあえず一般論。

A=0,w=0,B=0のどれかの場合は簡単ですから、これらの場合は除外します。
T=wt, b=-B/(wA), c=-C/Aとおいて
sin(T) + b T + c = 0
|b|≧1なら解は1個だけですが、|b|<1だと|b|が小さくなるほど解の数が多くなる。全部の解を求めるということだとなかなか大変です。

まず、|bT+c|≦1の範囲だけ調べれば良いことは自明です。(特定の範囲の解を求めるなら、そこだけ検討すればよい。)nπが求めたい解Tに近いような整数nを選んで、
nが偶数→T=x+nπ
nが奇数→T=nπ-x
と変数変換して代入し、
f(x)=sin(x)+p x + q
f'(x)=cos(x)+p
と表します。すると、x∈-π/2~π/2の間でf(x)=0の解を探せばよい。この範囲には最大3個の解があり得ます。そこで、近似的な出発値x[0]を見つけてこれをNewton法
x[n+1]=x[n]-f(x[n])/f'(x[n])
で改良するのが簡単です。ただし重解(y=0がy=f(x)の接線になっている)に近い場合は数値的に不安定になります。これをきちんと処理するのは難しい。(Tをπで割った余りを精密に計算する必要があり、数値の有効桁数が不足する現象(桁落ち)が起こるため、本当にy=f(x)がy=0に交差しているのか、接しているのか、微妙に離れているのか区別できなくなる恐れがあるからです。)
出発値x[0]を得るには、例えば適当な次数のマクローリン展開でも結構ですが、何度も解くのなら単にsineの数表を作っておいてlook upするのが簡単です。
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございます.
プログラムで解く以外にはないのですね.
御指摘の通りの解の存在する|bT+c|≦1の範囲で,
sin関数と直線の交点はsin関数の1/4周期に最大1つあるようですので
これをもとに二分探索で探すことにいたします.
ありがとうございました.

お礼日時:2001/02/23 10:28

この方程式は解析的には解けません。



この方程式の場合図的に解く方法が直感的で分かり易いですが、
プログラムに使うとなると図的解法は使えないですね。
数値解法を使うことになります。
プログラムに使うコンピュータがどんなものか分かりませんが、
大型機なら数値解法のモジュールが入っているはずです。
大して難しくありませんから、自分で組むことも十分可能です。

数値解法にはいくつか方法がありますので、問題に応じて適切なものを選択するとよいと思います。
    • good
    • 0

こんにちは。


プログラムに使うのでしたら、「…展開」を使って近似して、そこからtについて解いてもいいような気がしますが…?
テイラー展開などどうでしょう?
あ、でも私は3次式の解法はよく分かりません。(^^;)
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます.
私も最終手段としては「・・展開」かなぁなどと考えているのですが,
もしもっとスマートな解があればそちらを使いたいです.
ないのかなぁ...

お礼日時:2001/02/22 19:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


人気Q&Aランキング

おすすめ情報