• ベストアンサー

三角関数を含む方程式の解について

以下の方程式を解きたいのですが解き方がわかりません。 X+1/tan(X)=K (X;変数 K;既知の定数) 幾何的にある値を求めようとした際に出てきた方程式です。 変数が1つなのでこの式から解が出せると思い、いろいろと考えてみましたがわかりませんでした。 わかる方がいましたらヒントだけでもいいのでお教えください。

質問者が選んだベストアンサー

  • ベストアンサー
  • info22
  • ベストアンサー率55% (2225/4034)
回答No.3

#1です。 ニュートン法については次のサイトをご覧下さい。 ニュートン法の解説やプログラミングのサイト。 http://next1.cc.it-hiroshima.ac.jp/MULTIMEDIA/numeanal1/node8.html ニュートン法の解説と漸化式 http://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%88%E3%83%B3%E6%B3%95 EXCELでのニュートン法計算 http://www.ie.reitaku-u.ac.jp/~ykago/lectures/fe_basic/fe_basic03.html なお、フリーの数式処理ソフト「wxMaxima」 http://www1.bbiq.jp/kougaku/maxima.html をパソコンにインストールすれば簡単にニュートン法で計算できます。 Maximaでの x-1/tan(x)-k=0 の解き方: 下記のコマンドを入力するだけです。 (%i2)ではk=0,初期値x0=3,計算精度seido=1/10000での解の近似値が求まる。 (%i3)ではk=-1,x0=3,seido=1/10000の解の近似値が求まりまる。 (%i4)ではk=1,x0=3,seido=1/10000の解の近似値が求まりまる。 以下Maximaの操作です。 (%i1)load(newton1); (%i2)k:0;x0:3;newton(x-1/tan(x)-k,x,x0,1/10000); (%i3)k:-1;x0:3;newton(x-1/tan(x)-k,x,x0,1/10000); (%i4)k:1;x0:3;newton(x-1/tan(x)-k,x,x0,1/10000);

ssschihiro
質問者

お礼

丁寧な回答ありがとうございました。 紹介していただいたサイトを参考にやってみます。

その他の回答 (3)

  • inara1
  • ベストアンサー率78% (652/834)
回答No.4

以下にExcelのマクロを使った計算法(ニュートン法でなく二分法)を紹介します。これは方程式    f(x) ≡ x + 1/tan(x) -K = 0 の解を求めるものです。この関数は m*π < x < (m+1)*π の範囲(mは整数)では1個しか解がないので簡単に求めることができます。基本アルゴリズムは   (1) 解の検索範囲を x1~x2 とする   (2) x1 と x2 の中間値 x = ( x1 + x2 )/2 での f(x) の符号と f(x1) の符号を比較する   (3) 符号が異なるなら解は x1 と x の間にあるので、次の検索範囲の上限(x2)を ( x1 + x2 )/2 に変更する       符号が同じなら解は x と x2 の間にあるので、次の検索範囲の下限(x1)を ( x1 + x2 )/2 に変更する   (4) x1 と x2 の相対誤差の絶対値 | ( x1 - x2 )/x2 | が ε 未満になるまで(2)を繰り返す です。ε が x の精度で、プログラムでは eps = 10^(-10) としています。Excelのユーザ関数は2つあって、func1 は 0<x<π の範囲の解、、func2 は π<x<2*π の範囲の解を求めるものです。プログラム中の Atn(1) * 4 は π のことです(直接 3.14159265358979と書いてもいい)。x = 0 と x = π のときは f(x) を計算できないので、解を探す範囲の初期値を x1 = h、x2 = π - h としています(プログラムでは h = 10^(-15) )。 【Excel VBA を使ったユーザ関数の作り方】 Excel のメニューバーの [ツール] → [マクロ] → [Visual Basic Editor] → [挿入] → [標準モジュール] で出た空白の画面に以下のプログラムを貼り付ける。 ↓ここから Function func1(K) As Double ' 0<x<πの範囲の解 Dim N As Integer, eps As Double, h As Double N = 10 ' 解の有効数字桁数( 1 < N <15 ) eps = 10 ^ (-N) h = 10 ^ (-15) Dim x As Double, x1 As Double, x2 As Double, s As Double, s1 As Double x1 = h: x2 = Atn(1) * 4 - h '検索範囲 While Abs((x1 - x2) / x2) > eps s1 = x1 + 1 / Tan(x1) - K x = (x1 + x2) / 2 s = x + 1 / Tan(x) - K If Sgn(s1 * s) < 0 Then x2 = x Else x1 = x End If Wend func1 = x End Function Function func2(K) As Double ' π<x<2πの範囲の解 Dim N As Integer, eps As Double, h As Double N = 10 ' 解の有効数字桁数( 1 < N <15 ) eps = 10 ^ (-N) h = 10 ^ (-15) Dim x As Double, x1 As Double, x2 As Double, s As Double, s1 As Double x1 = Atn(1) * 4 + h: x2 = Atn(1) * 8 - h '検索範囲(func1とはここだけ違う) While Abs((x1 - x2) / x2) > eps s1 = x1 + 1 / Tan(x1) - K x = (x1 + x2) / 2 s = x + 1 / Tan(x) - K If Sgn(s1 * s) < 0 Then x2 = x Else x1 = x End If Wend func2 = x End Function ↑ここまで その後、Excelシートに戻って、セルに =func1(K) または = func2(K) と書けば( Kは具体的な数値またはセル)、そのセルに解 X が書き込まれます。 【Excelのセキュリティーレベルの設定】 Excelのセキュリティーレベルが「高」になっていると、マクロを含むファイルを開いたときに、マクロを使っているという警告が出てマクロを使うことができません。その場合、警告ダイアログでOKをクリックした後、以下の手順でセキュリティーレベルを「中」に変更してください(Excel2002の場合)。   メニューバーの [ツール] → [オプション] → [セキュリティー]タブ → [マクロセキュリティー] → [中] を選択 → OK → OK セキュリティーレベルを「中」に変更した後にファイルを開くと、マクロを使っているという注意が出ますが、「マクロを有効にする」を選択すればマクロを使うことができます。

  • inara1
  • ベストアンサー率78% (652/834)
回答No.2

K の値が分かれば計算して差し上げます。ただし、 ANo.1 さんがおっしゃるように解は無限にあるので、解 X の範囲(有限)を指定して頂かないとここに書ききれません。解 X の有効数字は何桁くらい必要ですか。 Excelのマクロで解を求めるプログラム(ユーザ関数)を書くことも可能です。その場合、解 X の範囲(Xmin ≦ X ≦ Xmax)を指定して、その範囲で、Xの小さいほうからN番目の解を求めるという関数になります。具体的には funcX( K, Xmin, Xmax, N ) という関数で呼び出すと、解が帰ってくるようなものになります。

ssschihiro
質問者

補足

Xの範囲は(0<X<π/2)です。有効数字は小数点以下三桁です。 Kは既知の定数ですが、実はそれ以前の計算で決定される値(この計算を行う時点で既知というだけで、値はその時々で変わる)です。 やはりニュートン法を使おうと思うのですが、解はC言語やExcelで求めるようですね。 現在ExcelではなくC言語で求めようと思っているのですが、恥ずかしながらニュートン法自体が理解しがたいためどのように書いていけばよいかわかりません。ニュートン法での解法の手順を教えていただけますでしょうか。

  • info22
  • ベストアンサー率55% (2225/4034)
回答No.1

これは初等関数の範囲で解けません。 一般のKのままでは解の式を書けません。 y=x+{1/tan(x)}のグラフと y=K のグラフの交点のx座標が解となりますが、 グラフから分かるとおり交点の数が無数にありますので 解の個数も無数に存在します。 無数に解が存在しますので、 kに数値を与え、xの範囲を指定すれば、 Newton法で、数値計算による近似解が求められます。 例えば 0<x<π におけるKの幾つかの値に対する解は以下のように求まります。 K=0でx≒2.798493 K=1でx≒2.576488 K=-1でx≒2.88997

ssschihiro
質問者

お礼

ご回答ありがとうございます。 やはり単純な方法ではできないのですね。 Newton法、あまり馴染みが無いですががんばってみます。

関連するQ&A