FORTRANでは実数と整数を区別して変数に格納します. 正しい型の変数を用意しておかないと計算結果がおかしくなります. 変数の型には注意をはらうこと!
implicit none
integer m, n, l
double precision a, b, c, d, s
real f, r
l=1/2
a=1/2
m=1.D0/2.D0
b=1.D0/2.D0
n=5/2.D0
c=5/2.D0
r = 16.1
s = 3.D0
s = s + r
write(*,'(3(I2,x),2(E24.16,x))') l, m, n, a, b
write(*,'(2(E24.16,x))') c, d
write(*,'(2(E24.16,x))') s, r
end
結果はどうなったであろうか? dの値は?
gnuplotで行われる.
-1.0 -3.2 0.0 -0.9 1.0 1.2 2.0 2.8 3.0 5.0といった形で与えられる.左側のデータをx座標,右側のデータ(ファイル名を plot.datとする)をy座標とおもってxy平面上にプロットするときは,gnuplotを起動した画面で
plot 'plot.dat'とするとグラフが描かれる.さらに
plot 'plot.dat' w lとするとデータ点を線で結ぶ.また,gnuplotにはいろいろな関数が用意されていて,
plot sin(x)とするとサインカーブを描いてくれる.三次元プロットも可能で
sp x**2 + y**2とすると z=x**2 + y**2を描画する.
double precision a(10)a(1)からa(10)まで要素を10個持つ倍精度実数型配列を宣言
integer i(-1:8)i(-1)からi(8)まで要素を10個もつ整数型配列を宣言
implicit none
integer i
double precision a(10)
a(1)=1.D0
a(2)=2.D0
a(3)=3.D0
do i=1,10
write(*,*) i,a(i)
enddo
end
a(4)以降の要素はどう表示されたでしょうか?
次のプログラムを改造して,
implicit none
integer i
double precision a(10),b(10),sum(3)
do i=1,3
sum(i)=0.D0 ! 三つの和をゼロにリセットする
enddo
do i=1,10
a(i)=1.D0*i ! a(i)には実数の1.D0, 2.D0,... 10.D0が格納される
b(i)=2.D0*i ! b(i)には実数の2.D0, 4.D0,... 20.D0が格納される
enddo
**ここに必要なプログラムを書き足して下さい**
end
上のプログラムを改造して,
最小二乗法では, 測定されたデータの組(x,y)にフィットする直線を求める. データxは正確に求められているとし, またデータyのバラツキは正規分布をしているものとする. この場合, フィットする直線をy=A+Bxとすると, A,Bはそれぞれ
![]() |
|||
![]() |
となる. したがって切片Aと傾きBを算出するためには次の和をもとめればよい.
plot 'plot.dat', 2.2 + 3.4 * xのように,コンマで続ける.2.2や3.4は自分で求めたA, Bの値に変更すること.