データの入出力(1)

データの入出力(1)
出力の書式指定
PRINT ’(1X, I3, 2X, 3F10.5)’, k, s, c, p
WRITE(*, ’(1X, I3, 2X, 3F10.5)’) k, s, c, p
Iw
Fw.d
Ew.d
Aw
nX
/
整数データをw文字幅に右詰めで書く
実数データをw文字幅に右詰めで、小数点以下d桁で書く
実数データを10の指数表式で書く
文字データをw文字幅に右詰めで書く
n桁スキップ
改行
例) PRINT ’(3F12.5)’) t, x, v
WRITE(*, ’(3F12.5)’) t, x, v
2
データの入出力(2)
ファイル入出力
WRITE(装置番号, 書式識別子 [,制御項目])
READ(装置番号, 書式識別子 [,制御項目]) 入力リスト
装置番号 5: キーボード(入力), 6: ディスプレイ(出力)
入出力ファイルの割り当て
OPEN(装置番号, FILE=ファイル名 [,制御項目])
CLOSE(装置番号 [,制御項目])
制御項目 FORM=‘UNFORMATTED’: binary(入出力)
例) OPEN(10, FILE=’a.dat’)
READ(5, ’(I6)’) k
WRITE(10, ’(A10,F10.5)’) s, c
WRITE(10, ’(3F12.5)’) t, x, v
CLOSE(10)
3
データのプロット
GNUPLOTを利用
マニュアル 例えばhttp://graph.pc-physics.com/
WINDOWS版だと入力補助機能あり
データのプロット
設定
ファイルへ出力
set size square
set xlabel 'x'
set ylabel 'y'
plot 'a1.dat' using 2:3 with lines title 'Euler'
replot 'a2.dat' using 2:3 with lines title 'R-K'
set terminal postscript eps color
set output 'a.eps'
replot
set terminal wxt (最初に確認
したもの)
set output
スクリプトファイルを作成しておけば再利用が可能
例) load 'a.gp'
gnuplot起動時にgnuplot 'a.gp'としてもよい
EPS形式の場合
JPG形式の場合
set terminal jpeg
set output 'a.jpg'
show terminal
4
変数が増えた場合
偏微分方程式
安定に時間発展を計算するために技法が必要
(数値粘性、陰解法)
2 Dt
 r 
拡散方程式

2 
D 2
t
r
2
 1 を満たすようtを十分小さくとる
区間をn分割
差分化
微分
  ri 
r
r(n)=1
r(0)=0
r(1)
r(2)...

i 1  i
t
 2  ri 
r 2

i 1  2 i  i 1
t 2
各iについて方程式の右辺を評価し、時間発展を計算
(境界点以外)
境界条件
Euler法、Runge-Kutta法...
  r0 
0  0
値を固定
もしくは
 0  0  1
r
微分値を固定
5