2007-12-05

ベクトルの扱い方

  1. 前回の解答

    Sub 相関係数()
    Dim x() As Single, y() As Single
    Rem 身長の個数を数えます。この個数は最後まで共通で使えます。
    i = 1
    Do While Selection.Cells(i, 1) <> "" And IsNumeric(Selection.Cells(i, 1))
    i = i + 1
    Loop
    n = i - 1
    Selection.Cells(n + 1, 1) = n

    Rem 身長を配列xに読み込みます。そして先週までの方法で、身長の合計、平均、分散、標準偏差を求めてB列に書いてください。
    ReDim x(n)
    For i = 1 To n
    x(i) = Selection.Cells(i, 1)
    Next i

    wa = 0
    For i = 1 To n
    wa = wa + x(i)
    Next i
    Selection.Cells(n + 2, 1) = wa

    heikin1 = wa / n
    Selection.Cells(n + 3, 1) = heikin1

    wa2 = 0
    For i = 1 To n
    wa2 = wa2 + (x(i) - heikin1) ^ 2
    Next i

    bunsan1 = wa2 / n
    Selection.Cells(n + 4, 1) = bunsan1

    hensa1 = Sqr(bunsan1)
    Selection.Cells(n + 5, 1) = hensa1

    Rem 同様に、座高を配列yに読み込んで,座高の合計、平均、分散、標準偏差を求めてC列に書いてください。
    Selection.Cells(n + 1, 2) = n
    ReDim y(n)
    For i = 1 To n
    y(i) = Selection.Cells(i, 2)
    Next i

    wa = 0
    For i = 1 To n
    wa = wa + y(i)
    Next i
    Selection.Cells(n + 2, 2) = wa

    heikin2 = wa / n
    Selection.Cells(n + 3, 2) = heikin2

    wa2 = 0
    For i = 1 To n
    wa2 = wa2 + (y(i) - heikin2) ^ 2
    Next i

    bunsan2 = wa2 / n
    Selection.Cells(n + 4, 2) = bunsan2

    hensa2 = Sqr(bunsan2)
    Selection.Cells(n + 5, 2) = hensa2


    Rem B2に書かれている一人目の身長の値から、身長の平均を引いた値をD2に書いてください。同じことを、D21まで繰り返してください。
    For i = 1 To n
    Selection.Cells(i, 3) = x(i) - heikin1
    Next i

    Rem C2に書かれている一人目の座高の値から、座高の平均を引いた値をE2に書いてください。同じことを、E21まで繰り返してください。
    For i = 1 To n
    Selection.Cells(i, 4) = y(i) - heikin2
    Next i

    Rem D2に書いた一人目の身長と身長の平均との差と、E2に書いた一人目の座高と座高の平均の差を掛け算してF2に書いてください。同じことを、F21まで繰り返してください。
    For i = 1 To n
    Selection.Cells(i, 5) = Selection.Cells(i, 3) * Selection.Cells(i, 4)
    Next i

    Rem F2からF21までの20個の平均を求めてF22に書いてください。それが共分散です。
    wa = 0
    For i = 1 To n
    wa = wa + Selection.Cells(i, 5)
    Next i
    kyobunsan = wa / n
    Selection.Cells(n + 1, 5) = kyobunsan

    Rem 共分散を身長の標準偏差と座高の標準偏差で割ってF23に書いてください。それが相関係数です。
    soukankeisu = kyobunsan / (hensa1 * hensa2)
    Selection.Cells(n + 2, 5) = soukankeisu

    End Sub

  2. 異なるシート上の演算

    今回はシート1、シート2にある数値の和をシート3に表示させてみましょう。
    例えば、シート1のセルA1に「5」、シート2のセルA1に「3」が入れると、シート3のセルA1に5+3の答「8」が入るようなプログラムを組んでみます。

    Sub ベクトル()
    Dim wa As Single, x As Single, y As Single

    Sheets(1).Select
    x = Cells(1, 1)

    Sheets(2).Select
    y = Cells(1, 1)

    wa = x + y
    Sheets(3).Select
    Cells(1, 1) = wa

    End Sub

  3. ベクトルの和

    次にシート1、シート2にあるベクトルの和をシート3に表示させてみましょう。
     +  → 
    例えば、シート1のセルA1から「5,4,3」、シート2のセルA1から「3,5,7」というベクトルが入っているとき、シート3のセルA1から「5+3,4+5,3+7」が入るようなプログラムを組んでみます。
    次のプログラムは一応動きますが、これでは縦に並んだ数が変わるとプログラムを書き直さなければなりません。

    Sub ベクトル()
    Dim x(3) As Single, y(3) As Single, z(3) As Single

    Sheets(1).Select
    x(1) = Cells(1, 1)
    x(2) = Cells(2, 1)
    x(3) = Cells(3, 1)

    Sheets(2).Select
    y(1) = Cells(1, 1)
    y(2) = Cells(2, 1)
    y(3) = Cells(3, 1)

    z(1)=x(1)+y(1)
    z(2)=x(2)+y(2)
    z(3)=x(3)+y(3)

    Sheets(3).Select
    Cells(1,1)=z(1)
    Cells(2,1)=z(2)
    Cells(3,1)=z(3)

    End Sub

  4. 練習問題

    (1)上のプログラムを、数字が3個ではなく100個並んだベクトル用に書き直しなさい。

    (2)3個とか100個とかに固定せずに、Sheet1に並んでいる数を数えて、ベクトルの足し算を行うプログラムを書きなさい。

  5. Sheet1に並んでいる個数とSheet2に並んでいる個数が違っていると、ベクトルの足し算は出来ません。例えば
    +
    では足し算できません。ですから、最初のベクトルと二番目のベクトルの型を 調べて、等しいときだけ足し算するプログラムを作りましょう。等しいかどうか 判定するには
    If 条件 Then
    条件が成立するときに実行するプログラム
    Else
    条件が不成立のときに実行するプログラム
    End If
    という形式の文を使います。

0 件のコメント: