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 enda(4)以降の要素はどう表示されたでしょうか?
次のプログラムを改造して,
implicit none integer i double precision a(10),b(10),sum(3) do i=1,3 sum(i)=0.D0 ! 三つの和をそれぞれsum(1),sum(2),sum(3)に格納する. 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の値にすること.