FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Python で方程式を数値的に解く

数値的に方程式を解く方法はいろいろと提案されており,有名なものに二分法やニュートン法(ニュートン・ラフソン法)などがあります.ウェブを調べると,アルゴリズムの原理や実装法などの情報は多く見つかりますが,実装したいわけではない人向けの情報は若干調べ難くなります.本記事では Python 用の科学計算ライブラリである Scipy を用いて方程式を解く方法を説明します.

Keywords: Python, Scipy, Newton-Raphson, bisection



作業環境
・Windows7 Professional 64bit
・Python 3.2.1
・Numpy 1.6.1
・Scipy 0.9.0

次のような関数 f(x) を Newton-Raphson と bisection で解きます.詳しい引数の解説は公式ドキュメントを参考にしてください.
\[
\begin{aligned}
f(x)&=\arctan(2x)+\arctan(x)\\
&=1
\end{aligned}
\]

import math
import scipy.optimize as opt


def main():
f = lambda x : math.atan(2.0 * x) + math.atan(x) - 1.0
fprime = lambda x : 2 / (1 + 4 * x**2) + 1 / (1 + x**2)

x0 = 0.01
a = opt.newton(
f, x0,
fprime=fprime, args=(),
tol=1e-5, maxiter=10000
)

xmin = 0.0
xmax = 0.5
b = opt.bisect(
f,
xmin, xmax,
xtol=1e-8, maxiter=10000
)

print(a, f(a))
print(b, f(b))


if __name__ == '__main__':
main()


結果は以下のようになります.
0.3739474266508991 -1.1233236563157334e-12
0.3739474192261696 -1.6037849048800012e-08

スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

Ishida Akihiko

Author:Ishida Akihiko
FC2ブログへようこそ!

免責事項
当サイトに掲載する記事内容は,必ずしも正確性,信頼性,妥当性,有用性,完成度などを保証しません.記事の利用はすべて自己責任でお願いします.当サイトに掲載された内容によって発生したいかなる損害に対しても,管理人は一切の責任を負いかねます.
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
アクセスカウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。