Python 学習:二分法で求根

2014-07-05 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での、blogramのランクインカテゴリは、
3、3、1、1、1、 0、0、0、0(41)で、換算ポイント 66pt 。
「Firefox」今朝方、5位にダウン。
・-・ - -・

さて、本文。

昨日(2014-07-04)の記事:
Python 学習:math.hypot
に続いて、
IFS:フラクタル次元の算出
で書いた
  「Python recipes 578048」:
  「IFS fractal dimension calculation (Python recipe)
から。

当該ソース・コードには、
こんな関数も定義している。

# Equation Solver using Bisection method
# http://en.wikipedia.org/wiki/Bisection_method
# function values must have opposite signs for f(a) and f(b)
def SolveEq( fun, a, b ):
eps = 1e-7
ya = fun( a )
yb = fun( b )
y0 = ya
yc = yb
while abs( yc - y0 ) > eps:
y0 = yc
c = ( a + b ) / 2.0
yc = fun( c )
if ya * yc < 0:
b = c
yb = yc
elif yb * yc < 0:
a = c
ya = yc
else:
break
return c



コードの最初にあるコメントは、(当然ですが)英語。
日本語ページなら。
二分法
ですね。
そして、
  方程式が連続であり、なおかつ関数値の符号が異なる初期条件を与える
  ことができれば必ず収束する。
と云うこと。


“FindRoot”“Solve”“求根”“解”・・・呼び名は色々?
<紙>ブログ内では、・・・
FindRoot Solve
だけでは不足。
scipy.optimize
recipe
も加えて。


それで、・・・

これまでは、

多元1次連立方程式・・・ブログ#1937(2014-03-18)
行列 A と、ベクトル b から、ベクトル x を求める:
  x = numpy.linalg.solve( A, b )


多元(任意)連立方程式・・・ブログ#1928(2014-03-02)
関数 F に対して、第2引数 ( Initial guess )、f_tol 規定値は、1e-6:
  x = scipy.optimize.broyden1( F, [0,0], f_tol=1e-14 )


1元多項式の求根・・・ブログ#2008(2014-06-09)
  f = numpy.poly1d( [ 1, 2, 3 ] )
で定義した“f == x^2 + 2 x + 3”における、
方程式“f = 0”の根を求める:
  f.r


レシピ#303396( recipe-303396-1.py )・・・ブログ#1948(2014-04-02)
A simple equation solver
 using attribute access and introspection
1元(任意)方程式:
  x = Solver( f ).x

以上、4種類。


5つ目として、今回の“二分法”。

1元(任意)方程式:
  x = SolveEq( f, a, b )
a, b は、f(a)とf(b)は異符号であること

例えば、

from math import *
def SolveEq( f, a, b ):
eps = 1e-7
ya = f(a)
yb = f(b)
y0 = ya
yc = yb
while abs(yc - y0) > eps:
y0 = yc
c = (a + b) / 2.0
yc = f(c)
if ya * yc < 0:
b = c
yb = yc
elif yb * yc < 0:
a = c
ya = yc
else:
break
return c
def fx( x ):
return 2*cos(x)-exp(x)
x = SolveEq( fx, 0, 1 ) # ===> 0.539785157889


また1つ勉強しました。


本日はここまで。


Python 学習は続く、・・・


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


140702
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク