数学2014年10月5日日曜日ペル方程式を解くPythonでペル方程式を解くプログラムを書きました。ペル方程式とはディオファントス方程式の一つで以下のような形をしているものです。解き方ペル方程式を変形すると、となります。y)が解の候補となりそうです。有理数近似には、連分数展開が使えそうです。y)とすると、x/yは√Dのconvergentとなる[1]ことが証明できます。よってconvergentを列挙し、方程式を満たすかどうか調べれば不足なくペル方程式の解を求めることが出来ます。上の計算手続きで方程式の解を求めることができますが、コンピュータを使って計算する場合は注意点があります。浮動小数点演算を使って平方根の連分数展開を行うと誤差が大きくなってしまい、正しい結果が得られないということです。これを回避するために、整数演算のみで平方根の連分数展開を行う方法が知られています[2]。...]が√Dの連分数展開となります。プログラムD=2の場合のペル方程式を解いています。解を10個列挙しています。ネイピア数を100桁まで求める連分数展開を使ってネイピア数を100桁まで求めてみました。ネイピア数を連分数展開すると、以下のように規則的な列になります。]上式の連分数を分数に変換し、さらに分数を小数に変換するという手順で計算します。以下の機能が標準でサポートされているPythonで書きました。2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427となりました。90番目あたりのconvergentからこの値に収束していました。ググってみると、正しいみたいです。単語が辞書に存在するかどうかを調べる暗号化された英語の文章を復号するという問題に挑戦しています。復号化された文章が正しい英単語から構成されていることを確認するために、単語が辞書に存在するかどうかをチェックする機能を実装しました。Ubuntuの場合は、/usr/share/dict/american-englishにアメリカ英語の単語リストが存在するので、それを使いました。0;}以下実行結果です。固有名詞も辞書に含まれているみたいです。文字列をreverseするリストにはreverseメソッドがありますが、文字列にはreverseメソッドがありません。文字列をreverseしたい場合は、以下のようにスライスを使うのがPythonicなやり方らしいです。olleh'のようにs[::-1]でsをreverseした文字列を取得出来ます。これを使って整数nをreverseする関数を書いてみました。Python2014年9月20日土曜日エンジニア日記(3)1000倍速くなった某システムのとある機能が大変に遅かった。ユーザーからも「遅い。」と苦情が多発していたらしい。