2011-08-01から1ヶ月間の記事一覧

ヤコビ法(連立方程式)

ヤコビ法をやってみた。固有値を求める方ではなく連立方程式を解く方の。 次のサイトを参考にした。 ・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…

GNU Octaveのインストール

最近、Octaveというものの存在を知ったのでインストールしてみた。MATLABのフリー版っていう認識でいいのかな。 ・GNU Octave - Wikipedia Windows向けのバイナリだと3.2.4が最新っぽいので解説サイトをいろいろ見つつそいつをインストール。 で、ためしに適…

微分(中心差分)

前進差分に続いて今度は中心差分をやってみた。 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…