メイン 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