Shifted BiCG法

とあるシミュレーションの問題では,シフト方程式と呼ばれる線形方程式 という,係数行列Aの対角成分がシフト量σだけ変化した方程式を解く必要が出てくるそうだ.Aは大規模で疎なものを対象としており,σは複数個現れるそうだ.これを解く方法としては,σだ…

Strassenのアルゴリズム

行列の積を求めるアルゴリズムに、シュトラッセンのアルゴリズムと言うのがあるそうだ。シュトラッセンのアルゴリズム - Wikipedia Strassen algorithm - Wikipedia Part II: The Strassen algorithm in Python, Java and C++ · Martin Thomaまあ、wikipedia…

Matrix Market形式の行列を読み込む

Matrix Market形式の行列を読み込んで2次元配列に突っ込んでみよう、というもの。Matrix Market形式のファイルは、こんな感じになっている。 %hoge %------------------------------------------------------------------------------- 148 148 1527 1 1 -99…

WinGW版OCamlのocamloptをcygwinなしで実行……

ここでのOCamlは公式サイトからダウンロードしたインストーラを使ってぶち込んだ4.00.1 MinGWはMinGW32(たぶん)ocamloptというのを使ってみよう。 ↓ 'i686-w64-mingw32-as' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイ…

PowerShellでsayコマンドっぽいのを

やってみたいなと、ふと思ったので調べてみたらこんなのを見つけた。PowerShell を使用してコマンドラインでしゃべらせる方法(.NET版) - CX's PowerShell Diary - PowerShellグループこれをそのまま使わせていただこう、ということで関数にちょこちょこっ…

.tex->.pdfにするのにコマンド2回たたくのが面倒だからまとめる

タイトルのごとく、コマンドを続けて実行する関数を作った。 ファイル名を受け取り、platexとdvipdfmxを実行してpdfファイルを生成する。 pdfファイルができたら、ファイルを既定のプログラムで開く。 もしすでに何かのプログラムで同じ名前のファイルを開い…

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

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

環境変数Pathの要素を1つ削除するスクリプト

前回Pathに追記するスクリプトを書いたので今回は要素を1つ削除するスクリプトを書いてみた。 大まかな流れとしては、 今Pathに登録されている要素を、番号を付けてすべて表示 ↓ 数字を入力する 要素に対応しない数字や文字を入力するとキャンセルされる ↓ …

環境変数(Path)に追記するスクリプト

PowerShellからユーザー環境変数Pathに追記するスクリプトを書いてみた。プロファイルに書き加えたかったので関数にした。 使い方 addpath 追加したいパス成功すると path length: (元からあったPathの長さ) + (今追記したPathの長さ) 成功: 指定した値は保…

環境変数(Path)をほんのちょっとだけ見やすくする

コントロールパネルから環境変数を編集するとき、編集ウィンドウがアレすぎて見づらいことこの上ない。特にPathなんかはたくさん通すと編集するのがツラくてしょうがない。 PowerShell上では少し見やすくはなるけれども、一つの変数に対して値が改行なしで出…

PowerShellで色付きlsをつくる

なんとなくPowerShellで遊んでみようかなと思ったのでlsに色を付けてみた。以下のコードをプロファイルに追加して再読み込みすると動く。 先頭2行のコメントアウトを外すとmyslのエイリアスにlsを設定することができる。エイリアスの上書きはどうやらできな…

移流方程式とかCIP法とかのメモ

CIP法についてふれたのでメモ程度にまとめてみる。移流方程式は、を伝播速度(ここではとりあえず一定)とすると、で表される。 元の関数の空間微分に対する移流方程式を考えると、と表すことができる。この微分方程式をコンピュータで解いてやると、割と良…

Tkinterで簡易アニメ

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

らんたくいっくそーと

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

Fortranでの配列の要素へのアクセス順序について

Fortranの配列では列優先でメモリに格納されるそうだ。 Fortranの多次元配列は列優先 (Column Major) です。(C/C++言語では行優先)例えば3行4列の2次元整数配列は integer a(3,4) のように宣言され、メモリ上には以下の順番で数値が格納されます。 a(1,1)…

お手製timeコマンドをつくってみたい

Windowsでもtimeコマンド使いたいなーなんてときがしばしばあるので試しに作ってみようってことで書いてみた。 Windowsだと別の役割を持つtimeコマンドがすでにあるのでtimeitという名前に。 WindowsAPIのCreateProcess関数とGetProcessTimes関数を用いた。 …

VimでF5を押してコンパイル&実行する

vim

Vimで編集中のファイルをコンパイルして実行する方法を紹介しているサイト(参考にしたところ1)を見つけて、「これは便利だ!」ってことで真似してみることにした。 参考にしたところに載せたWebサイトを読みながら以下をvimrcに追加した。 とりあえずC、Fo…

数字→ローマ数字変換

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

vim-indent-guidesを入れてみた

vim

ある日vimテクニックバイブルをちらりと読んでみたらvim-indent-guidesというものを見つけた。Python使うしインデントが見えると助かるよなってことで導入することにした。ファイルは次のサイトでダウンロードできる。・GitHub - nathanaelkane/vim-indent-g…

Processingを触ってみた

最近、Processingというものを知った。詳しくは以下のサイトで。ググるといろんなサイトが出てくる。 ・Processing.org ・ポケットサーバー 格安レンタルサーバーOpenProcessingというサイトに行くといろんな作品を見ることができて楽しい。ソースコードも一…

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 …