Python

偶数・奇数を判定するコード

twitterのタイムラインでたまにこいつが流れてくる。 偶数/奇数の判定 - Visual Basic 締切済み| 【OKWAVE】書いてみた。 これを実行するとcのソースコードができる。こんな感じ。 #include<stdio.h> #include<stdlib.h> int a(b){ int res; switch(b){ case 0: res = 1; break</stdlib.h></stdio.h>…

Pythonでinfinityを使う

Pythonでinfinityを扱う方法が気になったので調べた。そのメモ。 >>> n = float('inf') >>> n inf >>> m = float('-inf') >>> m -inf 文字列'inf'を変換すれば得られる。http://tingq.blogspot.jp/2009/12/infinity-in-python.html

Tkinterで簡易アニメ

Tkinterでグラフのアニメーションをやってみたい、ということでとりあえずアニメーションだけやってみた。 これを実行すると、円が画面左端から右に向かってずずずっと動いていくアニメーションが表示される。 0.1秒間隔でupdateを行うことで再描画する。sle…

らんたくいっくそーと

数学ガール4巻を読んでいたら乱択クイックソートが出てきたのでPythonで書いてみた。本には疑似コードまで載せてあって読みやすい。 ・普通のクイックソート ・乱択クイックソート main()内でソートするリストの要素をrandint()で100万生成してそれをクイッ…

数字→ローマ数字変換

なんとなく数字をローマ数字に変換するスクリプトを書いてみた。1から9999までの数字を変換することができる。数字を受け取ったら1の位から順にチェックしていくってだけのもの。 実行例がこちら。 >>> 153 CLIII >>> 48531 Error: input 1 ~ 9999 3587 MMMD…

gnuplotとGiamでアニメーション

gnuplotを使ってグラフのアニメーションを作りたい、せめて連番のファイルをまとめてグラフにしたい、ということで調べていたら次のサイトにたどりついた。 ・http://www.cfca.nao.ac.jp/~takedatk/COMPUTER/HowToMakeAnimation/gnuplot+perl+imagemagick/Ho…

SOR法

ガウス・ザイデル法の効率を上げたSOR法をやってみた。 ・http://www.akita-nct.ac.jp/yamamoto/lecture/2004/5E/linear_equations/relaxation/html/node6.html ・SOR法 - Wikipedia import math def sor(matrix, dim, omega): count = 0 check = 1.0e-10 ol…

ガウス・ザイデル法

今回はガウス・ザイデル法をやった。ヤコビ法を改良した感じ。次のサイトを参考にした。 ・dfltweb1.onamae.com – このドメインはお名前.comで取得されています。 import math def g(matrix, dim): count = 0 check = 1.0e-10 oldx = [] for i in range(dim)…

ヤコビ法(連立方程式)

ヤコビ法をやってみた。固有値を求める方ではなく連立方程式を解く方の。 次のサイトを参考にした。 ・http://next1.cc.it-hiroshima.ac.jp/MULTIMEDIA/numeanal2/node13.html import math def jacobi(a, b, oldx): newx = [0.0,0.0,0.0,0.0] d = len(oldx) …

LU分解

そういえばLU分解やってなかった事に気づいたのでやってみた。つぎのサイトを参考にした。 ・http://next1.cc.it-hiroshima.ac.jp/MULTIMEDIA/numeanal1/node32.html ・LU分解 - [物理のかぎしっぽ] import copy def lu(matrix, dim): up = copy.deepcopy(ma…

オイラー法と修正オイラー法とルンゲ・クッタ法との比較

これまでオイラー法、修正オイラー法、ルンゲ・クッタ法とやってきたけど、差がどれだけあるかいまいちピンと来ないので、違いを見るためにグラフにしてみた。 今回例に使ったのは今までと同じ某教科書に載っていた例を使った。(今更だけど、全く同じ例をそ…

ルンゲ・クッタ法(4次)

修正オイラー法と同じ要領でテイラー展開した式を4次の項まで残してやると精度があがる。詳しくは次のサイトで。 ・ルンゲクッタ法 ・ルンゲ=クッタ法 - Wikipedia ・微分方程式の数値計算(ルンゲ・クッタ法)-数学アルゴリズム演習ノート- def runge_kutt…

修正オイラー法

テイラー展開を用いると誤差を小さくすることができる。詳しくは次のサイトで。・http://www.geocities.jp/supermisosan/syuseieulerprogram.html ・修正オイラー法 def euler(x0, y0, dx, endx): x = x0 y = y0 res = [[x, y]] while x <= endx: s1 = f(x, …

テキトーな行列を作る

ふと数百×数百の行列を掃き出してみたくなったので作ってみた。各要素は1〜9の整数をランダムに入れることにした。少数とか使うと見づらくてしょうがない。 import random def main(): f = open('matrix.txt', 'w') n = 100 #n行n+1列の行列を作る for i in …

オイラー法

今回はオイラー法。例として解いているのは dy/dx = (x^2+x+1)-(2x+1)y+y^2。 某教科書と同じものを使った。 次のサイトが参考になる。・3 オイラー法 ・オイラー法 def euler(x0, xn, y0, n): x = x0 y = y0 h = (xn - x0) / n #刻み幅を求める。今回は0.1…

微分(中心差分)

前進差分に続いて今度は中心差分をやってみた。 import math def central_difference(x, h): return (f(x + h) - f(x - h)) / (2 * h) #前進差分との違いはここ def f(x): return math.sin(x) def output(l, filename): f = open(filename, 'w') for i in l:…

微分(前進差分)

今回は微分をやってみた。計算自体は定義に沿ってやるだけなのでそんなに難しくない。ただ、どのくらい小さい数で割るか結果が違ってきてしまうので本当は注意しないといけない。次のサイトが参考になる。 http://next1.cc.it-hiroshima.ac.jp/MULTIMEDIA/nu…

最小2乗法

ラグランジュ補間、スプライン補間と続いて今度は最小2乗法をやってみた。データからそれっぽい直線や曲線を求めるやつ。次のサイトが参考になる。・http://szksrv.isc.chubu.ac.jp/lms/lms1.html ・http://www.geocities.jp/supermisosan/saisyounizyouhou2…

スプライン補間(3次)

スプライン補間をやってみた。隣り合う2点を3次式で結ぶやつ。詳しくは次のサイトが参考になる。 ・http://next1.cc.it-hiroshima.ac.jp/MULTIMEDIA/numeanal1/node16.html ・http://www.akita-nct.ac.jp/~yamamoto/lecture/2004/5E/interpolation/text/html…

ラグランジュ補間

ラグランジュ補間をやってみた。次のサイトが参考になる。 ・ʪÍý¤Î¤«¤®¤·¤Ã¤Ý¡§·×»»ÊªÍý³Ø¡§Êä´ÖË¡¡§¥é¥°¥é¥ó¥¸¥åÊä´° ・http://next1.cc.it-hiroshima.ac.jp/MULTIMEDIA/numeanal1/node13.html def lagrange(point, x): l = 0.0 for i in range(len(point)…

掃き出し法

線形代数でおなじみ掃き出し法をやってみた。 def hakidashi(matrix, dim): for i in range(dim): num = matrix[i][i] for j in range(dim + 1): matrix[i][j] = matrix[i][j] / num for j in range(dim): if i == j: pass else: a = matrix[j][i] for k in …

台形公式

数値積分の中でも簡単な方法に分類される台形公式をやってみた。区分求積にひと手間加えた感じでいいのかな。図形を細長い台形で分割してそれらの和で近似する。次のサイトが参考になる。誤差についても書かれているので読んでみるといいかもしれない。・dfl…

ベアストウ法

ベアストウ法を勉強したのでPythonで書いてみた。 ベアストウ法を使うと、代数方程式にしか使えないけど複素解も含むすべての解を求めることができる。無理やり2次式で因数分解して積の形で表すって感じになる。詳しくはググってください。コードを書く際、…

Pythonの再帰の深さについてあれこれ

この前、コードを書いていたら次のエラーが出た。 RuntimeError: maximum recursion depth exceededどうやら再帰の回数の限界を超えてしまったようだ。で、調べてみるとこれらが引っかかった。・http://hep.planet-koo.com/index.php?g=tech&sid=py_reclimit…

2変数のニュートン法

今度は2変数についてのニュートン法をやってみた。今度は2変数のテイラー展開を利用する。詳しくはググってください。 今回用いた式は某教科書に例として載っていたものをそのまま利用した。 import math import sys chk = 0.00000001 #誤差の範囲 count = 0…

ニュートン法

Pythonでニュートン法をやってみた。ニュートン法って何?って方はググってください。 def newton(x, num): #nextx = (2 * (x*x*x) + x*x - 3) / (3 * (x*x) + 2*x - 5) #x - (g / dg)をまとめた場合 g = f(x) dg = df(x) nextx = x - (g / dg) num.append(n…

メンガーのスポンジ

はい。blenderとpythonでメンガーのスポンジを作るよ。メンガーのスポンジって何?って人はWikipedaでも見るといいかもしれない。・メンガーのスポンジ - Wikipedia コードはこちら import bpy check = [1,1,1, 1,0,1, 1,1,1, 1,0,1, 0,0,0, 1,0,1, 1,1,1, 1…

PythonでBlender―オブジェクトをいじる

Pythonでオブジェクトの大きさや位置をいじる方法を知ったのでメモ。今回は例として次の操作を行った。 >>>ob = bpy.context.object >>>ob.scale = (2,6,5) >>>bpy.ops.object.scale_apply() 1行目の操作を行ったあとの画像がこちら↓ 選択(というか、フォー…

Pythonでスリープソートっぽいことをやる。

最近スリープソートが話題になってたのでPythonでやってみる import time import threading num = [9,4,1,6,0,30,2,5,7,8,20,14] #今回はこいつをソートする。別にグローバル変数である必要はない。 def sleep_sort(i, result): result.append(i) print resu…

PILで延々とスクリーンキャプチャ

import ImageGrab import time import os import shutil import datetime def capture(): img = ImageGrab.grab() dt = datetime.datetime.now() img.save(dt.strftime('%Y%m%d_%H-%M-%S') + '.png') def folder(): print (os.getcwd()) if os.path.isdir(os…