「旧課程(-2012年度)高等学校数学B/数値計算とコンピューター」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎2分法: 【バグ・フィックス】Python版のループの終了条件に誤りがあり、機械イプシロンまで回っていた。結果的に hat could hardly be true (ありえへん)に必ず到達していた。
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
→‎2分法: ラムダ式と範囲をパラメーター化。assertでleftが異常なのかrightが異常なのかの検査を分離。イプシロン判定を絶対値に変更。実行結果を追加。
タグ: 2017年版ソースエディター
80 行
この方法は元々の範囲[a,b]の中点を取り、解が中点から見てどちらにあるかを判断し、範囲を狭めていく方法である。
 
;[[Python]]による[https://paiza.io/projects/mslsT2vksLfwnt8HqWmn-A?language=python3 コード例]:<syntaxhighlight lang="python">
[[Python]]によるプログラム例
def bisection(func, left, right):
<syntaxhighlight lang="python">
assert and (type(rightleft) == float),"ThatThe left side is not a real numbersnumber."
def bisection():
assert (type(right) == float),"The right side is not a real number."
#Could be a too simple function. But seems ok,
#it just is an example.
def func(x):
return x**2-1
#2 magic variables
left = 0.0
right = 3.0
assert (type(left) == float
and type(right) == float),"That is not real numbers"
mid = (left +right)/2
while not (-1.0e-10 <abs(func(mid)) < +1.0e-10):
mid = (right + left)/2
if (func(mid) < 0):
104 ⟶ 96行目:
return mid
 
print (bisection(lambda x: x-1, 0.0, 3.0))
print(bisection(lambda x: x*x-1, 0.0, 3.0))
 
#ok that work well if I put
#func (x):
# x-1 or x**2 - 1
#The result of both calculation was 1.0.
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="python"text>
このコードはf(x)=x-1、または、f(x)=<math>x^2-1</math>のときに試された。結果はどちらもx=1.0となり、正しい値を返している。
0.9999999999417923
 
1.0000000000291038
[[Scheme]]によるコード例
</syntaxhighlight lang="Scheme">
:このコードはf<math>\lambda(x)=x-1</math>、または、f<math>\lambda(x)=<math>x^2-1</math>のときに試された。結果はどちらもx= 0.9999999999417923 および 1.0とな0000000000291038 であり、正しい値を返している。
: &nbsp;
;[[Scheme]]によるコード例:<syntaxhighlight lang="Scheme">
(define (bisection f a b) ;手順1。
(let ((e (expt 10 -10))
131 ⟶ 122行目:
;;1.0000000000291038
</syntaxhighlight>
:このコードもλ<math>\lambda(x)=x-1</math>、または、λ<math>\lambda(x)=<math>x^2-1</math>のときに試された。[[Python]]版と違うが、同じ結果はどちらもx=1.0に極めて近い値を返している。計算精度の違い、である。
 
==== 台形公式====