• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JScriptの問題です。添削お願いします。【至急!】)

JScriptの問題!割線法でf(x)=cos(x)-x^2=0の解を求める方法

このQ&Aのポイント
  • JScriptの問題で、f(x)=cos(x)-x^2=0の解を割線法で求める方法について添削をお願いします。
  • 初期値 x1=1, x2=0.5 を使用して、割線法を適用します。
  • 割線法の公式 X_(n+1)=X_n-{(X_n-X_(n-1))/(f(X_n)-f(X_(n-1))} * f(X_n) を使用します。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

SplitLineの引数のx1とx2の扱いが逆ではありませんか 割線法の公式を X_(n+1)=X_n-{(X_n-X_(n-1))/(f(X_n)-f(X_(n-1))}*f(X_n) 考えたのであれば 最初はX_nがx2、X_(n-1)がx1であると考えます 次回は 初回の答えがX_n、X_(n-1)がx2となります つまり関数の中身は function SplitLine(N,e,x1,x2){   var Xn0=x2, Xn1=x1, Xn, str="";   str = "x1 1.0\n" + "x2 0.5\n"   for(var i=3; i<N; i++){    // 元の式と見比べてみましょう    //xn = x- ((x -(x-1)) /(f(x) -f(x-1)))*f(x);     Xn = Xn0-((Xn0-(Xn1-1))/(f(Xn0)-f(Xn1)))*f(Xn0);     if(Math.abs((xn-x)/x)<e) break;     str += "X" + i + " " + Xn + "\n";     // 前回の n0項を n1項に代入     Xn1 = Xn0;     // n0項に計算結果代入     Xn0 = Xn;   }   return str; } といった具合になるかと ・・・

mina37_sjt
質問者

お礼

参考になりました。 少し書き直す必要があったのですが、自分のプログラムも完成いたしました。 勉強頑張ります。 ありがとうございました。

その他の回答 (1)

  • x_jouet_x
  • ベストアンサー率68% (162/236)
回答No.2

変数名をx1, x2, xnとするとプログラムにしたとき混同しそうなので、変数名を変えて割線法のアルゴリズムを書き直してみました。 なお、Nは初期値が近似値から遠い場合に途中で処理を終わらせるために使用されていると思いますが、書き直したものでは使用していません。 do ... while ()構文で差がイプシロン(e)より小さくなるまでひたすら計算します。 ---------- var e = 0.001; function f(x) { return Math.cos(x) - x * x; } function secant(oldValue, newValue) { if (Math.abs(oldValue - newValue) < e) { return newValue; } do { var tmpValue = oldValue; oldValue = newValue; newValue = oldValue - (oldValue - tmpValue) / (f(oldValue) - f(tmpValue)) * f(oldValue); } while (Math.abs(oldValue - newValue) > e); return newValue; } ---------- 上記で関数secantに初期値を与えれば結果が返るはずです。

関連するQ&A