メイン bin.html   Last modified: Sep 01, 2009
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html;CHARSET=EUC-JP">
<link rel="shortcut icon" href="../favicon.ico">
<TITLE>root of equation</TITLE>
<script src="io.js">document.write("io.js ファイルが見つかりません??<br>")</script>

<SCRIPT LANGUAGE="JavaScript">
<!--
var pi = Math.PI
var e =  Math.E

function fixed(x, d)
{
  return Math.round(x*Math.pow(10,d))/Math.pow(10,d)
}

function binsec(form, func, lower, upper)
{
  var x, m, l, u, ym, yl, yu, i
  var EPSILON = 1e-14
  var l = lower
  var u = upper
  x = l; yl = eval(func)
  x = u; yu = eval(func)
  if (yl*yu > 0) {
    return 0
  }
  for (i = 1; ; i++) {
    x = l; yl = eval(func)
    x = u; yu = eval(func)
    x = (l+u)/2; ym = eval(func)
    if (i % 100 == 0 && confirm("区間("+fixed(lower, 5)+", "+fixed(upper, 5)+")で解を探索しています。反復回数が "+i+" 回になっても,まだ収束しません。この区間での探索を続けますか?") == false) break
    if (yu*ym > 0) {
      u = x
    }
    else {
      l = x
    }
    if (Math.abs((u-l)/(l == 0 ? u : l)) < EPSILON) {
      x = (l+u)/2; ym = eval(func)
      printf("%20.7g%20.7g\n", x, ym)
      return 1
    }
  }
  return 0
}

function calc(form, func, lower0, upper0, ndiv0)
{
  var lower = parseFloat(lower0)-1e-11
  var upper = parseFloat(upper0)
  var ndiv = parseFloat(ndiv0)
  var interval = upper-lower
  var nsol = 0
  var l2, u2, i
  if (isNaN(lower) || isNaN(upper) || isNaN(ndiv) || Math.floor(ndiv) != ndiv || lower > upper) {
    printf("指定に誤りがあります。\n")
    return
  }
  printf("%s = 0 の解を二分法により求める\n", func)
  printf("解を探索する区間 [ %s , %s ]", lower0, upper0)
  if (ndiv != 1) {
    printf(" を %s 分割してそれぞれの区間で解を探索\n", ndiv0)
  }
  printf("\n\n%16s%22s\n", "x", "f(x)")
  for (i = 0; i < ndiv; i++) {
    l2 = lower+i/ndiv*interval
    u2 = lower+(i+1)/ndiv*interval
    nsol += binsec(form, func, l2, u2)
  }
  if (nsol == 0) {
    printf("\n解は見つかりませんでした。区間,分割数を変えて再度実行してみてください。\n")
  }
  sep(60)

}

function sin(x)
{
  return Math.sin(x)
}

function cos(x)
{
  return Math.cos(x)
}

function tan(x)
{
  return Math.tan(x)
}

function asin(x)
{
  return Math.asin(x)
}

function acos(x)
{
  return Math.acos(x)
}

function atan(x)
{
  return Math.atan(x)
}

function exp(x)
{
  return Math.exp(x)
}

function log(x)
{
  return Math.log(x)
}

function log10(x)
{
  return Math.log(x)/Math.log(10)
}

function sqrt(x)
{
  return Math.sqrt(x)
}

function pow(x,y)
{
  return Math.pow(x,y)
}
// --> JavaScript対応ブラウザでないと動作しません。
</SCRIPT>
</HEAD>
<body bgcolor="#ffffff">
<form name="Result">

<font size="+2"><b>二分法による方程式 f(x)=0 の解</b></font> <a  href="src/bin.html"><img src="png/src.png" width=35 height=11 alt="src" align=top></a>     Last modified: Jun 01, 2006<hr noshade><p>
<font color="#ff0000" size="+2">以下のプログラムのサポートは終了しました。自己責任でお使い下さい。</font>

<table>
<tr>
  <td nowrap colspan=3>関数 f(x)= <input NAME="func" VALUE="sin(x)/x" SIZE=70></td>
</tr>
<tr>
  <td nowrap align=right>下限値 x<sub>l</sub>= <input NAME="lower" VALUE="-10" SIZE=10></td>
  <td nowrap align=right>上限値 x<sub>u</sub>= <input NAME="upper" VALUE="10" SIZE=10></td>
  <td nowrap align=right>分割数 = <input NAME="ndiv" VALUE="10" SIZE=5></td>
</tr>
<tr>
  <td colspan=3><p><hr></td>
</tr>
<tr>
  <td align=right><input type="button" VALUE="解を求める" onClick="calc(this.form, this.form.func.value, this.form.lower.value, this.form.upper.value, this.form.ndiv.value)"></td>
  <td align=right><input type="button" VALUE="出力欄クリア" onClick="this.form.result.value=''"></td>
  <td align=right><img src="../gra/button3.png" width=9 height=9 alt="・"> <a href="exa/bin.html">使用法</a></td>
</tr>
<tr>
  <td nowrap colspan=3>解<br><textarea name="result" rows=20 cols=80></textarea></td>
</tr>
</table>
</form>
<p><hr noshade>
<img src="../gra/button3.png" width=9 height=9 alt="・"> <A HREF="javascript:history.go(-1)">直前のページへ戻る</A>  <img src="../gra/button3.png" width=9 height=9 alt="・"> <a href="../mail.html">E-mail to Shigenobu AOKI</a>
<p><center><IMG SRC="../gra/ume5.png" width=121 height=37 ALT="Made with Macintosh"></center>
</body>
</html>


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI

Made with Macintosh