• 締切済み

中心極限定理をエクセルで確かめる問題(まとめ方)

1.まずX1+X2+…+X8の分布を畳み込みの方法により求めるマクロをVBAを用いて作る。 VBAに以下のものを入力する。 Function f(x As Double) If x >= 1 And x <= 6 Then f = 1 Else f = 0 End If End Function Function g(z As Double) Dim x As Double, k As Double k = 0 For x = 1 To z k = k + f(x) * f(z - x) Next x g = k End Function Function h(z As Double) Dim x As Double, k As Double k = 0 For x = 1 To z k = k + g(x) * g(z - x) Next x h = k End Function Function u(z As Double) Dim x As Double, k As Double k = 0 For x = 1 To z k = k + h(x) * h(z - x) Next x u = k End Function 2.エクセルワークシートで実行する。そのためにA1のセルにxを入力し、A2からA42のセルにX1+X2+…+X8の取る値としての8~48を入力する。 3.B1のセルにu(x)を入力し、B2からB42のセルに関数u(x)の値を求める。そのためにB2の説に=u(A2)を入力し、オートフィルの方法で求める。 4.(X1+X2+…+X8)/8 = Xのバー の取る値をx/8=zで表すことにする。そこでC1のセルにzを入力し、C2のセルに=A2/8を入力し、C2からC42のセルをオートフィルの方法で満たす。 5. 3.で求めたu(x)の値を6^8で割り、それをΔz=1/8で割った値、即ち8倍した値を密度関数g(z)とする。そこでD1のセルにg(z)を入力し、D2のセルに=B2/6 8*8を入力し、オートフィルの方法で求める。 6.平均値と分散が等しい正規分布N(3.5,35/(12*8))の密度関数と比較する。C2からC42にあるzの値に対応するN(3.5,35/(12*8))の密度関数の値をE2からE42のセルにエクセルのNORMDIST関数で用いて満たす。 という問題ですが、以下のようにエクセルで作成してみましたが、合っていますでしょうか。 また、最終的にどのようなところまで持って行き、どのようにまとめれば良いのでしょうか。 x u(x) z g(z) 確率密度 8 1 1 4.76299E-06 0.000125166 9 8 1.125 3.81039E-05 0.000288691 10 36 1.25 0.000171468 0.000637921 11 120 1.375 0.000571559 0.001350479 12 330 1.5 0.001571788 0.002739026 13 792 1.625 0.003772291 0.005322208 14 1708 1.75 0.008135193 0.009907745 15 3368 1.875 0.016041762 0.017670353 16 6147 2 0.029278121 0.030192771 17 10480 2.125 0.049916171 0.049425163 18 16808 2.25 0.080056394 0.077514085 19 25488 2.375 0.121399177 0.116466366 20 36688 2.5 0.174744704 0.167651637 21 50288 2.625 0.239521414 0.231207786 22 65808 2.75 0.313443073 0.3054812 23 82384 2.875 0.392394452 0.386681952 24 98813 3 0.470645671 0.468932891 25 113688 3.125 0.541495199 0.54482229 26 125588 3.25 0.598174821 0.606438017 27 133288 3.375 0.63484987 0.646703706 28 135954 3.5 0.647548011 0.660711187 29 133288 3.625 0.63484987 0.646703706 30 125588 3.75 0.598174821 0.606438017 31 113688 3.875 0.541495199 0.54482229 32 98813 4 0.470645671 0.468932891 33 82384 4.125 0.392394452 0.386681952 34 65808 4.25 0.313443073 0.3054812 35 50288 4.375 0.239521414 0.231207786 36 36688 4.5 0.174744704 0.167651637 37 25488 4.625 0.121399177 0.116466366 38 16808 4.75 0.080056394 0.077514085 39 10480 4.875 0.049916171 0.049425163 40 6147 5 0.029278121 0.030192771 41 3368 5.125 0.016041762 0.017670353 42 1708 5.25 0.008135193 0.009907745 43 792 5.375 0.003772291 0.005322208 44 330 5.5 0.001571788 0.002739026 45 120 5.625 0.000571559 0.001350479 46 36 5.75 0.000171468 0.000637921 47 8 5.875 3.81039E-05 0.000288691 48 1 6 4.76299E-06 0.000125166

みんなの回答

noname#227064
noname#227064
回答No.1

> という問題ですが、以下のようにエクセルで作成してみましたが、合っていますでしょうか。 あっているかどうかについては、今使っているコンピュータにExcelをインストールしていないので確認はできませんが、手順どおりにしていればOKでしょう。 > また、最終的にどのようなところまで持って行き、どのようにまとめれば良いのでしょうか。 私の回答は、前回記述したとおり(横軸はxよりzの方がいいかも?)ですので繰り返しませんが、この問題はタイトルにもあるように中心極限定理を確かめるためのものです。中心極限定理がどういうものか理解していれば、おのずとどうまとめればわかると思います。

参考URL:
http://ja.wikipedia.org/wiki/%E4%B8%AD%E5%BF%83%E6%A5%B5%E9%99%90%E5%AE%9A%E7%90%86
mamoru1220
質問者

お礼

やっと理解できました^^; ご回答ありがとうございました。

関連するQ&A

  • 中心極限定理をエクセルで確かめる問題

    1.まずX1+X2+…+X8の分布を畳み込みの方法により求めるマクロをVBAを用いて作る。 VBAに以下のものを入力する。 Function f(x As Double) If x >= 1 And x <= 6 Then f = 1 Else f = 0 End If End Function Function g(z As Double) Dim x As Double, k As Double k = 0 For x = 1 To z k = k + f(x) * f(z - x) Next x g = k End Function Function h(z As Double) Dim x As Double, k As Double k = 0 For x = 1 To z k = k + g(x) * g(z - x) Next x h = k End Function Function u(z As Double) Dim x As Double, k As Double k = 0 For x = 1 To z k = k + h(x) * h(z - x) Next x u = k End Function 2.エクセルワークシートで実行する。そのためにA1のセルにxを入力し、A2からA42のセルにX1+X2+…+X8の取る値としての8~48を入力する。 3.B1のセルにu(x)を入力し、B2からB42のセルに関数u(x)の値を求める。そのためにB2の説に=u(A2)を入力し、オートフィルの方法で求める。 4.(X1+X2+…+X8)/8 = Xのバー の取る値をx/8=zで表すことにする。そこでC1のセルにzを入力し、C2のセルに=A2/8を入力し、C2からC42のセルをオートフィルの方法で満たす。 5. 3.で求めたu(x)の値を6^8で割り、それをΔz=1/8で割った値、即ち8倍した値を密度関数g(z)とする。そこでD1のセルにg(z)を入力し、D2のセルに=B2/6 8*8を入力し、オートフィルの方法で求める。 6.平均値と分散が等しい正規分布N(3.5,35/(12*8))の密度関数と比較する。C2からC42にあるzの値に対応するN(3.5,35/(12*8))の密度関数の値をE2からE42のセルにエクセルのNORMDIST関数で用いて満たす。 という問題です。 【質問1】 5.に=B2/6 8*8というのがありますが、=B2/((6^8)*8)ということでしょうか。 【質問2】 A2には8、A3には9、A42には48と表記されています。 B2にはu(A2)、B3にはu(A3)、B42にはu(A42)と表記されています。 C2には1、C3には1.125、C42には6と表記されています。 D2~D42にはすべて#VALUE!と表記されています。 #VALUE!と出ているのは間違いでしょうか。 【質問3】 =NORMDIST(C2:C42,3.5,(35/(12*8))^(1/2),FALSE) と打つと、0.167651637と出ます。 この数値は何を示しているのでしょうか。 【質問4】 定理の確かめをエクセルで行い、プリントアウトしたいです。 A~D列はこのままとしても、どのようにまとめるべきでしょうか。

  • 偏微分と、極限の問題です。

    次の問題をお教えください。 1)z=f(x,y),x=uv,y=u^2 +v^2のとき、∂z/∂u,∂z/∂vを求めよ。ですが、 変数変換の公式、∂z/∂u=∂z/∂x ∂x/∂u+∂z/∂y ∂y/ ∂zを使うのでしょうが、zが、f(x,y)の形になっているので足り方がわかりません。どうしたらよいのでしょうか。 2)lim x→∞x^n/e^xの値を求めよ。 この問題は全くわかりません。とくに、x^nのnがどうなるかが。 よろしくお願いします。

  • Excelにおけるセルの値をVB2005に配列として取り込みたい

    Excelのセルの値をVB2005に配列として取り込みたいのですが、Excel.Rangeと配列の整合性が取れず困っています。 なんらかヒントになるような助言をお願いします。 以下は今までに作成中のコードです。 Public Class Form1 Dim xlsapp As New Excel.Application Dim xlsbook As Excel.Workbook Dim xlssheet As Excel.Worksheet Dim fn As String = "sample.xls" Dim Q(,,) As Double Dim i, j, x, y, z As Integer Dim k As Double Dim w(i), v(i), u(i) As Double Dim As Object Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click xlsbook = xlsapp.Workbooks.Open(fn) xlssheet = xlsbook.Worksheets(1) k = 1 w(i) = xlssheet.Cells(1, 3) v(i) = xlssheet.Cells(1, 2) u(i) = xlssheet.Cells(1, 1) For x = 2 To 11 If w(i) = 1 Then For y = 2 To 11 If v(i) = 1 Then Q(1, 1, k) = u(i) k = k + 1 End If Next End If Next z = k For k = 1 To z TextBox1.Text = Q(1, 1, k) Next End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close() xlsapp.DisplayAlerts = False xlssheet = Nothing xlsbook.Close() xlsbook = Nothing xlsapp.Quit() xlsapp = Nothing End Sub End Class

  • エクセル VBA セル範囲を指定

    functionプロシージャを作ろうとしてます。いわゆるユーザ定義関数です。 エクセルの関数でSUMが用意されており、SUM(セル範囲)のように書けば合計を返します。 同じようにセル範囲の指定を受けて計算結果を返すfunctionを作りたいのです。 function example(セル範囲 As double,・・・) As double 任意の範囲を指定して、その値を使って計算したいのです。 ・セル範囲の書き方というか、フォーマットの書き方 ・プロシージャ内で計算に使うために配列に読み込む方法

  • フォートランですが。。

    以下のように関数を定義したのですが、 double precision function theata(x, u, ns, i) のところでwarningがでて、"関数の戻り値が定義されていない"みたいなことを言ってるんですが、何がいけないのでしょう? double precision function theata(x, u, ns, i) implicit double precision(a-h, o-z) dimension y(51), u(51) do 100 i=1, ns y(i)=cos(x)-sin(u(i)) 100 continue return end

  • エクセルユーザー定義関数(1)

    エクセル初心者です。 複数のセル範囲(例えばRange("A1:A100"))を入力させ、入力されたセル範囲すべてのセルを3乗した総和を求めるユーザー定義関数は作ること可能でしょうか? Function Y(a As Range) As Variant ここに、aで選択されたセル全てを3乗して総和を求める関数Yを定義したい。 End Function よろしくお願い致します。

  • VBA上で定義された関数のワークシート上での実行

    Ecxel2003 のマクロ上で、複素数の構造体を以下のように定義しました。 Public Type Complex R As Double I As Double End Type 2つの実数(引数)を複素数に変換する関数を、以下のように定義しました。 Public Function setComplex(x As Double, y As Double) As Complex setComplex.R = x setComplex.I = y End Function 複素数の絶対値を計算する関数を以下のように定義しました。 Public Function absComplex(A As Complex) As Double absComplex = Sqr(A.R * A.R + A.I * A.I) End Function これらの定義式を用いて、ワークシート上の数値を参照して 計算しようとしても、なぜかうまくいくません。 うまくいかない例 → =absComplex(setComplex(B6,C6)) (セル"B6"には 2 、セル"C6"には 3 が格納済み) マクロ上で計算する場合はうまくいきます。 Public Function test() As Double Dim varC1 As Complex varC1 = setComplex(2, 3) test = absComplex(varC1) End Function 適当なセル上で、=test() と打ち込むと、√13に相当する少数が表示されます。 なぜ、=absComplex(setComplex(B6,C6)) では計算してくれないのでしょうか?。 そもそも、マクロ上で定義した構造体を、セル上で用いようとするのがいけないのでしょうか? どなたか、ご教授願います。

  • エクセルのマクロ

    Sub test() x = Selection.Row y = Selection.Column z = Selection.Columns.count Range(Cells(x, y), Cells(x, y + z - 2)).Select Selection.ClearContents End Sub 上記マクロは、同一行の連続するセルを二つ以上選択状態にして実行すると、範囲内の最も右にあるセルの値のみが残って他のセルの値は全て消去されます。 上記マクロを、複数のセレクションに対して対応できるようにするには、どうすればいいでしょうか? 例えば、c1~f1、d3~h3、e10~g10を選択して実行すると、f1とh3とg10の値のみ残って他の値は消えるということです。

  • エクセル 半角英数6文字以上 8文字の入力制限

    エクセルのあるセル内に入力させた文字のチェックにあたり で半角英数(0,1,2,3,4,5,6,7,8,9)と(a,b,c,d,e,f,g,h,i,j,k,l,n,m,o,p,q,r,s,t,u,v,w,x,y,z) (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,) の組み合わせによる6文字以上8文字以内、さらに数字のみの 組み合わせを禁止したチェックを行ないたいのです。 現状 LENB関数で6未満 LENB関数で9以上をエラー ISNUMBER関数でTRUEの場合エラーとしているのですが 半角カタカナや記号に対してチェックをかける関数が 分かりません。 入力されてくるセルに対するチェックの関数は 半角カタカナチェックの関数式 記号チェックの関数式と別に分けていただいても構いませんので アドバイスいただけましたら幸いです。

  • vba 自作関数

    Function zei(myRng As Range) As Double Dim c As Range Dim goukei As Double 'Volatileについて 'シート内のどこかのセルを参照しているものとする 'シートのどこかに変更があったらそのセルが自動的に再計算される Application.Volatile goukei = Application.WorksheetFunction.Sum(myRng) zei = Int(goukei * 5 / 100) End Function これを標準モジュールに貼り付けてワークシート上で関数を呼び出し、 100を入れると#VALUE!が返るのですがどうしてでしょうか? 違う値を入れても必ず#VALUE!が返ります。