平成7年度 秋期 第二種 午後 問9

                        [更新日]1994.10.25
問9 次のFORTRANプログラムの説明及びプログラムを読んで、設問に答えよ。 [プログラムの説明]  ある地域で一定期間に起きた地震について、その規模と発生回数の対数値に は次のような直線関係 y=ax+bがあることが知られている。ここで、yは地震の 発生回数の対数値、xは地震の規模 M(マグニチュード)である。  log(規模 Mの地震の発生回数)= a × M + b … A式  プログラムは、日本付近での数十年間のマグニチュード5以上の地震につい て、地震の規模と地震の発生回数の散布図を作り、上式の a,bを求めるもので ある。 (1) 地震の発生回数と規模は表のデータ形式によって、地震の規模5.0から 0.1刻みに規模8.5まで入力される。地震の発生回数は最多のものでも1000 回以下であり、0回のものは入力されない。なお、入力データは2組以上で あり、入力データ数はプログラムでは変数 numに代入される。     表 入力データ例 ┌────────┬─────────┐ │ 入力データ  │         │ ├───┬────┤         │ │規模 │発生回数│log(発生回数)│ ├───┼────┼─────────┤ │5.0│ 520│    6.25 │ ├───┼────┼─────────┤ │5.1│ 471│    6.15 │  ├───┼────┼─────────┤  │ : │  : │    :    │  ├───┼────┼─────────┤ │8.1│   1│    0.0  │ └───┴────┴─────────┘ 注 log(発生回数)の値は入力  データではないが、散布図を作る  ときの目安として示してある。 (2) 散布図の印字例を図に示す。 1.横軸は地震の規模 Mの値とし、5.0から8.5まで0.1刻みで、2文字を0.1 にとって横72けたに印字する。 2.縦軸はlog(発生回数)の値とし、7.0から0.0まで0.2刻みで、1行 を0.2にとって印字する。ただし、縦軸左側に印字する目盛はlog(発 生回数)の値だけでは分かりにくいので、その値に対応する地震の発生 回数もともに印字する。 なお、方程式 y=log xにおいて、yの値が分かっているとき、xの値は x=e^yで求めることができる。 1.データは"@"で印字する。 (3) A式の a,bの値は、最小自乗法によって、サブルーチン副プログラム kaikiで求める。 1.各データの xy座標は、それぞれの配列 x,yに与えられる。 2.aとbは、次の式で求める。データの数を n、x座標の平均値とy座標の 平均値をそれぞれHx,Hyとする。    Sxx = (x1^2 + x2^2 + … + xn^2)/n-Hx^2    Sxy = (x1y1 + x2y2 + … + xnyn)/n-HxHy  とおくと、     Sxx    a = ―――,b =Hy-aHx     Sxy (4) 表と図に用いたデータは、日本付近で1961年から1991年までに起こった マグニチュード5以上の地震の実際のデータである。 [プログラム] real a,b,logy,kai,mag,x(100),y(100) integer dy,num,kx,ky character graph(50,85,0:35)*1 data graph/1296* do n = 1,100 read(8,*,end=100) mag,kai x(n) = mag y(n) = log(kai) end do 100 num = [ a ] call kaiki(x,y,num,a,b) write(*,1000) a,b do n= 1,num [ b ] [ b ] graph(kx,ky) = '@' end do write(*,1010) (n/10.0,n=50,85,5) write(*,1020) do n = 70,0,-2 [ c ] [ c ] ky = n / 2 write(*,1030) dy,logy,(graph(kx,ky),kx = 50,85) end do write(*,1020) write(*,1010) (n/10.0,n=50,85,5) 1000 format(' jishin hindo no kankei shiki, y=log(hindo),x=magnitude'/& & ' y= ',f10.5,' x ' ,sp,f10.5,ss) 1010 format(' ',9x,f6.1,7(4x,f6.1)) 1020 format(' ',13x,'+',7('---------+')) 1030 format(' ',i4,' ( ',f3.1,' ) ',' - ',36(a1,1x)) end subroutine kaiki(x,y,kosuu,a,b) real x(100),y(100),a,b,tx,ty,txx,txy.hx,hy,sxx,sxy integer kosuu tx = 0.0 ty = 0.0 txx = 0.0 txy = 0.0 do n = 1,kosuu tx = tx + x(n) ty = ty + y(n) txx = txx + x(n)**2 txy = txy + x(n)*y(n) end do hx = tx / kosuu hy = ty /kosuu [ d ] [ d ] a = sxy / sxx b = hy - a * hx end 設問 プログラム中の[ ]に入れる正しい答えを、解答群の中から選べ。 aに関する解答群 ア n - 1 イ n ウ n + 1 エ max(n,100) オ min(n,100) bに関する解答群 ア kx = nint(x(n)) イ kx = nint(x(n)*10.0-49.0)   ky = nint(y(n))   ky = nint(y(n)) ウ kx = nint(x(n)*0.1) エ kx = nint(x(n)*10.0)   ky = nint(y(n)*0.2)   ky = nint(y(n)*5.0) オ kx = nint(x(n)*10.0-49.0)   ky = nint(y(n)*5.0) cに関する解答群 ア logy = log(real(n)) イ logy = log(real(n))   dy = n   dy = nint(exp(logy)) ウ logy = real(n) エ logy = real(n)/10.0   dy = nint(exp(logy))  dy = nint(exp(logy)) オ logy = real(n)/10/0   dy = nint(log(logy)) dに関する解答群 ア sxx = tx - hx**2   sxy = ty - hx * hy イ sxx = tx / kosuu - hx**2   sxy = tx / kosuu - hx * hy ウ sxx = txx / (kosuu-1) - hx**2   sxy = txy / (kosuu-1) - hx * hy エ sxx = txx / kosuu - hx**2   sxy = txy / kosuu - hx * hy オ sxx = tx**2 / (kosuu-1) - hx**2   sxy = ty**2 / (kosuu-1) - hx * hy カ sxx = tx**2 / kosuu - hx**2   sxy = ty**2 / kosuu - hx * hy