Word / Матрица v2
.1.docSub 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