高校数学「統計とコンピュータ」 山中和義 2008/01/24 16:09:40 └つづき 山中和義 2008/01/24 16:12:39 └つづき2 山中和義 2008/01/24 16:13:40 (修正2回)
高校数学「統計とコンピュータ」 山中和義 2008/01/24 16:09:40 ツリーへ
高校数学「統計とコンピュータ」 |
返事を書く ノートメニュー |
山中和義 <drdlxujciw> 2008/01/24 16:09:40 | |
プログラム言語での必要性もあろうかと思いサブルーチンをつくってみました。
!統計関数 !変数 N: 個数。※1以上 !配列 A(i): 対象の数値。※個数はNとする。 !作業変数は、i,j,ma,mb,s !関数名をEXCEL準拠 FUNCTION SUM(N,A()) !総和 LET s=A(1) FOR i=2 TO N LET s=s+A(i) NEXT i LET SUM=s END FUNCTION FUNCTION FMAX(N,A()) !最大値(maximum) LET s=A(1) !まず仮の最大値とする FOR i=2 TO N IF A(i)>s THEN LET s=A(i) !大きければ NEXT i LET FMAX=s END FUNCTION FUNCTION FMIN(N,A()) !最小値(minimum) LET s=A(1) FOR i=2 TO N IF A(i)<s THEN LET s=A(i) NEXT i LET FMIN=s END FUNCTION SUB sort(N,A()) !降順に並べ替える FOR i=1 TO N-1 FOR j=i+1 TO N IF A(i)<A(j) THEN swap A(i),A(j) NEXT j NEXT i END SUB DEF AVERAGE(N,A())=SUM(N,A)/N !平均(mean) ※相加平均 FUNCTION GEOMEAN(N,A()) !相乗平均(幾何平均) LET s=A(1) FOR i=2 TO N LET s=s*A(i) NEXT i LET GEOMEAN=s^(1/N) END FUNCTION FUNCTION HERMEAN(N,A()) !調和平均 LET s=1/A(1) FOR i=2 TO N LET s=s+1/A(i) NEXT i LET HERMEAN=N/s END FUNCTION FUNCTION MEDIAN(N,A()) !中央値(median) CALL sort(N,A) IF MOD(N,2)=0 THEN !偶数個なら LET MEDIAN=(A(N/2)+A(N/2+1))/2 ELSE LET MEDIAN=A((N+1)/2) END IF END FUNCTION FUNCTION RANK(N,A(),m) !順位 ※変数 m: 順位を求める数値 LET s=1 !まず、1位とする FOR i=1 TO N !全部調べる IF A(i)>m THEN LET s=s+1 !大きければ順位を下げる NEXT i LET RANK=s END FUNCTION |
└つづき 山中和義 2008/01/24 16:12:39 ツリーへ
Re: 高校数学「統計とコンピュータ」 |
返事を書く ノートメニュー |
山中和義 <drdlxujciw> 2008/01/24 16:12:39 | |
つづき
FUNCTION VARP(N,A()) !分散(variance) LET ma=AVERAGE(N,A) LET s=(A(1)-ma)^2 FOR i=2 TO N LET s=s+(A(i)-ma)^2 NEXT i LET VARP=s/N END FUNCTION !DEF VARP(N,A())=DOT(A,A)/N-AVERAGE(N,A)^2 !分散(variance) ※別解 DEF STDEVP(N,A())=SQR(VARP(N,A)) !標準偏差σ(standard deviation) FUNCTION COVAR(N,A(),B()) !共分散(covariance) LET ma=AVERAGE(N,A) LET mb=AVERAGE(N,B) LET s=(A(1)-ma)*(B(1)-mb) FOR i=2 TO N LET s=s+(A(i)-ma)*(B(i)-mb) NEXT i LET COVAR=s/N END FUNCTION DEF CORREL(N,A(),B())=COVAR(N,A,B)/STDEVP(N,A)/STDEVP(N,B) !相関係数(correlation coefficient) !関数名を「高校数学の公式」準拠 DEF EX(A(),P())=DOT(A,P) !確率変数の平均(期待値(expected value)) ※E(X)=ΣXi*P(X=Xi) FUNCTION EX2(A(),P()) !E(X^2) LET s=A(1)^2*P(1) FOR i=2 TO UBOUND(A) LET s=s+A(i)^2*P(i) NEXT i LET EX2=s END FUNCTION DEF VX(A(),P())=EX2(A,P)-EX(A,P)^2 !確率変数の分散 ※V(X)=E((X-E(X))^2)=E(X^2)-E(X)^2 DEF DX(A(),P())=SQR(VX(A,P)) !確率変数の標準偏差 ※D(X)=SQR(V(X)) !-------------------- ここまでがサブルーチン !例.数学の試験結果 LET N=12 !標本数 DATA 70,60,25,15,88,46,65,20,88,100,25,75 DIM X(N) MAT READ X PRINT USING "平均点 ###.##":AVERAGE(N,X) PRINT USING "最高点 ###.## 最低点 ###.##":FMAX(N,X),FMIN(N,X) !!!PRINT FMAX(N,X)-FMIN(N,X) !範囲(range) PRINT USING "中央値 ###.##":MEDIAN(N,X) LET m=AVERAGE(N,X) LET sx=STDEVP(N,X) PRINT "点数 順位 偏差値" FOR k=1 TO N PRINT USING "### ###":X(k),RANK(N,X,X(k)); PRINT USING " ###.##":(X(k)-m)*10/sx+50 !偏差値 NEXT k DIM H(5) !ヒストグラム(度数分布) MAT H=ZER FOR k=1 TO N LET m=MIN(INT(X(k)/20),4)+1 !20点刻み LET H(m)=H(m)+1 NEXT k PRINT "点数","人数" PRINT "100 〜 80",H(5) FOR k=4 TO 1 STEP -1 PRINT k*20-1;"〜";(k-1)*20,H(k) NEXT k !例.ガソリンの販売量と価格の関係? LET N=10 !データ数 DATA 45.8,47.1,47.8,50.1,51.0,52.8,54.2,55.4,56.8,58.2 !販売量 DIM A(N) MAT READ A DATA 127.1,123.7,123.7,120.5,114.2,106.6,103.0,93.4,93.6,101.3 !価格 DIM B(N) MAT READ B PRINT VARP(N,A),STDEVP(N,A) PRINT VARP(N,B),STDEVP(N,B) SET WINDOW -10,150,-10,150 !散布図 DRAW grid(25,25) FOR k=1 TO N PLOT POINTS: A(k),B(k) NEXT k DEF F(x)=AVERAGE(N,B)+(COVAR(N,A,B)/STDEVP(N,A)^2)*(x-AVERAGE(N,A)) !回帰方程式 PLOT LINES: 25,F(25); 100,F(100) PRINT COVAR(N,A,B),CORREL(N,A,B) |
└つづき2 山中和義 2008/01/24 16:13:40 (修正2回) ツリーへ
Re: つづき |
返事を書く ノートメニュー |
山中和義 <drdlxujciw> 2008/01/24 16:13:40 ** この記事は2回修正されてます | |
つづき2
!例.度数分布表から平均、分散、標準偏差を計算する !階級 度数 !20〜30 5 !30〜40 17 !40〜50 32 !50〜60 12 !60〜70 4 ! 計 70 LET N=5 DATA 25,35,45,55,65 !階級値x=(上限+下限)/2 DATA 5,17,32,12,4 !度数f DIM Z1(N),Z2(N) MAT READ Z1 MAT READ Z2 LET m=DOT(Z1,Z2)/SUM(N,Z2) !平均={Σx*f}/Σf PRINT m LET s=0 FOR k=1 TO N LET s=s+(Z1(k)-m)^2*Z2(k) NEXT k LET s=s/SUM(N,Z2) !分散={Σ(x-E(X))^2*f}/Σf PRINT s,SQR(s) !標準偏差=SQR(分散) DIM Z3(N) !別解 MAT Z3=(1/SUM(N,Z2))*Z2 !相対度数=度数/総度数 PRINT EX(Z1,Z3) !平均 PRINT VX(Z1,Z3),SQR(VX(Z1,Z3)) !分散、標準偏差 DIM Z4(N) !累計度数 LET Z4(1)=Z2(1) FOR k=2 TO N LET Z4(k)=Z4(k-1)+Z2(k) NEXT k MAT PRINT Z4 !35の位置を確認 PRINT (Z1(2)+Z1(3))/2+(SUM(N,Z2)/2-Z4(2))*10/Z2(2) !中央値 !例.300kmの距離を行きは時速60km、帰りは50kmとすると、往復の平均時速? DIM Y(2) LET Y(1)=60 LET Y(2)=50 PRINT HERMEAN(2,Y) !例.サイコロを1回振ったときに出る目の数Xの平均値E(X)? DIM D(6),P(6) FOR k=1 TO 6 LET D(k)=k !確率変数X={X1,X2,…,Xn} LET P(k)=1/6 !確率P(X=Xn) NEXT k PRINT EX(D,P) PRINT VX(D,P) !例.2個のさいころを同時に投げたときに出る目の和の期待値、分散? PRINT EX(D,P)+EX(D,P) !E(a*X+b*Y)=a*E(X)+b*E(Y) PRINT VX(D,P)+VX(D,P) !V(a*X+b*Y)=a^2*V(X)+b^2*V(Y) ※独立 END 参照 SAMPLEフォルダ内 STAT1.BAS、STAT2.BAS |