- ベストアンサー
JScriptの問題!割線法でf(x)=cos(x)-x^2=0の解を求める方法
- 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) を使用します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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; } といった具合になるかと ・・・
その他の回答 (1)
- x_jouet_x
- ベストアンサー率68% (162/236)
変数名を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に初期値を与えれば結果が返るはずです。
お礼
参考になりました。 少し書き直す必要があったのですが、自分のプログラムも完成いたしました。 勉強頑張ります。 ありがとうございました。