Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Word / Матрица v2

.1.doc
Скачиваний:
23
Добавлен:
07.01.2014
Размер:
24.06 Кб
Скачать

Sub matrix()

Dim A!(3, 2), B!(2, 3), C!(3, 1), d!(2, 1), At!(2, 3), AtA!(2, 2), Bt!(3, 2), BtB!(2, 2), AtA_BtB!(2, 2), AtA_BtB_d!(2, 1)

Dim i%, j%, s1!, s2!, norm1!, norm2!, result!

For i = 1 To 3

For j = 1 To 2

A(i, j) = Cells(i + 2, j)

B(j, i) = Cells(j + 6, i)

d(j, 1) = Cells(6 + j, 5)

Next j

C(i, 1) = Cells(i + 2, 5)

Next i

Call obratnie_matrici(A, B, At, Bt)

Call ymnozenie_matric(A, B, At, Bt, AtA, BtB)

Call vi4itanie_ymnozenie(AtA, BtB, AtA_BtB, AtA_BtB_d, d)

Call normi_and_result(AtA_BtB_d, C)

End Sub

Sub obratnie_matrici(A!(), B!(), At!(), Bt!())

For i = 1 To 3

For j = 1 To 2

At(j, i) = A(i, j)

Cells(1 + j, 9 + i) = At(j, i)

Cells(1, 10) = "At"

Bt(i, j) = B(j, i)

Cells(5 + i, 9 + j) = Bt(i, j)

Cells(5, 10) = "Bt"

Next j

Next i

End Sub

Sub ymnozenie_matric(A!(), B!(), At!(), Bt!(), AtA!(), BtB!())

Cells(1, 7) = "At*A": Cells(4, 7) = "Bt*B"

For i = 1 To 3

For j = 1 To 2

AtA(j, 1) = AtA(j, 1) + At(1, i) * A(i, j): AtA(j, 2) = AtA(j, 2) + At(2, i) * A(i, j)

Cells(1 + j, 7) = AtA(j, 1): Cells(1 + j, 8) = AtA(j, 2)

BtB(j, 1) = BtB(j, 1) + Bt(i, 1) * B(j, i): BtB(j, 2) = BtB(j, 2) + Bt(i, 2) * B(j, i)

Cells(4 + j, 7) = BtB(j, 1): Cells(4 + j, 8) = BtB(j, 2)

Next j

Next i

End Sub

Sub vi4itanie_ymnozenie(AtA!(), BtB!(), AtA_BtB!(), AtA_BtB_d!(), d!())

Cells(7, 7) = "At*A-Bt*B": Cells(10, 7) = "(At*A-Bt*B)*d"

For i = 1 To 3

For j = 1 To 2

AtA_BtB(j, 1) = AtA(j, 1) - BtB(j, 1): AtA_BtB(j, 2) = AtA(j, 2) - BtB(j, 2)

Cells(7 + j, 7) = AtA_BtB(j, 1): Cells(7 + j, 8) = AtA_BtB(j, 2)

AtA_BtB_d(j, 1) = AtA_BtB(j, 1) * d(1, 1) + AtA_BtB(j, 2) * d(2, 1)

Cells(10 + j, 7) = AtA_BtB_d(j, 1)

Next j

Next i

End Sub

Sub normi_and_result(AtA_BtB_d!(), C!())

Cells(13, 7) = "||(At*A-Bt*B)*d||": Cells(13, 9) = "||C||"

s1 = 0

For i = 1 To 3

s1 = s1 + C(i, 1) * C(i, 1)

Next i

s2 = 0

For j = 1 To 2

s2 = s2 + AtA_BtB_d(j, 1) * AtA_BtB_d(j, 1)

Next j

norm1 = Sqr(s1)

norm2 = Sqr(s2)

Cells(14, 9) = norm1

Cells(14, 7) = norm2

result = norm2 - norm1

Cells(10, 2) = result

End Sub

Соседние файлы в папке Word