Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ°Π±ΠΎΡΡ Ρ ΠΌΠ°ΡΡΠΈΡΠ°ΠΌΠΈ ΠΈΠ· ΡΠ΅ΠΎΡΠΈΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±ΡΡ / Π₯Π°Π±Ρ
ΠΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅
Π ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ°Π±ΠΎΡΡ Ρ ΠΌΠ°ΡΡΠΈΡΠ°ΠΌΠΈ (Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²ΡΠΌΠ΅ΡΠ½ΡΠ΅ ΠΌΠ°ΡΡΠΈΡΡ) Π»Π΅ΠΆΠΈΡ ΠΌΠΎΡΠ½Π°Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ΅ΠΎΡΠΈΡ ΠΈΠ· ΠΎΠ±Π»Π°ΡΡΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±ΡΡ. ΠΠ΄Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ, ΠΎΠ΄Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π΄ΡΡΠ³ΡΡ. ΠΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π° ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π½Π°Π΄ ΠΌΠ°ΡΡΠΈΡΠ°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ. Π ΡΠ°ΠΌΠΊΠ°Ρ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠΈ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ Π½Π° ΡΠ·ΡΠΊΠ΅ F# ΠΈ Π΄Π°Π΄ΠΈΠΌ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π’Π°ΠΊ ΠΊΠ°ΠΊ F# Π²Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎ .NET, ΡΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΠΌ Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π΄ΡΡΠ³ΠΈΡ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΡΠ·ΡΠΊΠ°Ρ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ C#.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΡΡ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° F#
ΠΠ°ΡΡΠΈΡΡ ΡΠ²Π»ΡΡΡΡΡ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΈ Π²Π°ΠΆΠ½Π΅ΠΉΡΠ΅ΠΉ ΡΠ°ΡΡΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±ΡΡ. ΠΠ°ΡΡΠΈΡΡ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² 3D-ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ»ΠΈ Π³Π΅ΠΉΠΌ-Π΄Π΅Π²Π΅Π»ΠΎΠΏΠΈΠ½Π³Π΅. Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄ ΡΠΆΠ΅ Π΄Π°Π²Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ΅ΡΠ΅Π½ ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΌΠ°ΡΡΠΈΡΠ°ΠΌΠΈ ΡΠΆΠ΅ Π³ΠΎΡΠΎΠ²Ρ, ΠΈ ΠΈΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. ΠΠ°Π½Π½Π°Ρ ΡΡΠ°ΡΡΡ Π½Π΅ ΡΡΠ°Π²ΠΈΡ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ΅Π»ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°, Π½ΠΎ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π±Π°Π·ΠΎΠ²ΡΡ
ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΌΠ°ΡΡΠΈΡΠ°ΠΌΠΈ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΡΠΈΠ»Π΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ F#. ΠΠΎ ΠΌΠ΅ΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΎΡΠΈΠΈ ΠΌΠ°ΡΡΠΈΡ ΠΈ ΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠΎΠ΄Π΅.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π²ΡΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΌΠ°ΡΡΠΈΡΠ°? Π’Π΅ΠΎΡΠΈΡ Π³ΠΎΠ²ΠΎΡΠΈΡ Π½Π°ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅
ΠΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° ΡΠΈΡΠ΅Π», ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ m ΡΡΡΠΎΠΊ ΠΈ n ΡΡΠΎΠ»Π±ΡΠΎΠ², Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ°ΡΡΠΈΡΠ΅ΠΉ ΡΠ°Π·ΠΌΠ΅ΡΠ° m x n
ΠΠ°ΡΡΠΈΡΡ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΡΡ ΠΏΡΠΎΠΏΠΈΡΠ½ΡΠΌΠΈ Π±ΡΠΊΠ²Π°ΠΌΠΈ Π»Π°ΡΠΈΠ½ΡΠΊΠΎΠ³ΠΎ Π°Π»ΡΠ°Π²ΠΈΡΠ° ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π² Π²ΠΈΠ΄Π΅
ΠΠ»ΠΈ ΠΊΠΎΡΠΎΡΠΊΠΎ
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΌΠ°ΡΡΠΈΡΠ°ΠΌΠΈ Π² F# ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π·Π°ΠΏΠΈΡΡ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΡ Π½Π° Π΄Π²ΡΠΌΠ΅ΡΠ½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅, ΠΊΠΎΡΠΎΡΡΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ Π±ΡΠ΄Π΅ΠΌ ΡΠ°ΡΡΠΈΡΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΎΠ²Π΅ΡΡΠ°ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ Π½Π΅ΠΉ.
type Matrix = { values: int[,] } with // Π·Π΄Π΅ΡΡ Π±ΡΠ΄Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ end
ΠΠΎΠ±Π°Π²ΠΈΠΌ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π°ΠΏΠΈΡΠΈ Π΄Π²ΡΠΌΠ΅ΡΠ½ΡΠΌ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ
static member ofArray2D (values: int [,]) = { values = values }
let a = array2D [[1;0;2] [3;1;0]] let A = Matrix.ofArray2D a
ΠΠ²Π΅ ΠΌΠ°ΡΡΠΈΡΡ A=(aij) ΠΈ B=(bij) Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΡΠ°Π²Π½ΡΠΌΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ ΠΏΠΎΡΠ»Π΅ΠΌΠ΅Π½ΡΠ½ΠΎ, Ρ.Π΅. aij=bij Π΄Π»Ρ Π²ΡΠ΅Ρ i=1,2…,m ΠΈ j=1,2…n
ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π° Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ == ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠ°ΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ Π½Π°ΠΌ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ.
static member sizes matrix = let rows = matrix.values.[*,0].Length let cols = matrix.values.[0,*].Length (rows, cols) static member isEquallySized matrix1 matrix2 = let dim1 = Matrix.sizes matrix1 let dim2 = Matrix.sizes matrix2 (dim1 = dim2) static member (==) (matrix1, matrix2) = if not (Matrix.isEquallySized matrix1 matrix2) then false else not (matrix1.values |> Array2D.mapi (fun x y v -> if matrix2.values.[x, y] <> v then false else true) |> Seq.cast<bool> |> Seq.contains false)
let rows = matrix.values.[*,0].Length
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ β ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠΎΠ»Π½ΡΠΉ ΡΡΠ΅Π· ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π΅Π΅ Π΄Π»ΠΈΠ½Ρ.
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ isEquallySized ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΡ Π΄Π²ΡΡ ΠΌΠ°ΡΡΠΈΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ == Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅ΠΌΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π΄Π²ΡΡ ΠΌΠ°ΡΡΠΈΡ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, Π½ΠΎ ΡΠ΅ΠΉΡΠ°Ρ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΡΡΠΎΠΉ.
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Π΄Π²Π΅ ΠΌΠ°ΡΡΠΈΡΡ, ΡΡΠ°Π²Π½ΠΈΠΌ ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΡ. ΠΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠ°Π²Π½Ρ, ΡΠΎ Π½Π΅Ρ Π΄Π°Π»ΡΡΠ΅ ΡΠΌΡΡΠ»Π° ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΆΠ΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΡΡΠΎ ΠΈ ΠΌΠ°ΡΡΠΈΡΡ Π±ΡΠ΄ΡΡ Π½Π΅ ΡΠ°Π²Π½Ρ.
if not (Matrix.isEquallySized matrix1 matrix2) then false
ΠΠ°Π»Π΅Π΅, Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΠΌΠ°ΡΡΠΈΡ matrix1 ΠΈ matrix2 ΠΌΡ ΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌ Π½ΠΎΠ²ΡΡ ΠΌΠ°ΡΡΠΈΡΡ, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡΡ true ΠΈΠ»ΠΈ false, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Π»ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ ΠΎΠ±Π΅ΠΈΡ ΠΌΠ°ΡΡΠΈΡ.
matrix1.values |> Array2D.mapi (fun x y v -> if matrix2.values.[x, y] <> v then false else true
Π€ΡΠ½ΠΊΡΠΈΡ Array2D. mapi ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅Ρ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ matrix1 ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°
x β ΠΈΠ½Π΄Π΅ΠΊΡ ΡΡΡΠΎΠΊΠΈ
y β ΠΈΠ½Π΄Π΅ΠΊΡ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ
v β ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ v ΠΌΡ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌ Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΠ΅ΠΉΠΊΠΎΠΉ matrix2 ΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΠ°Π²Π½Ρ, ΡΠΎ ΠΏΠΈΡΠ΅ΠΌ true, ΠΈΠ½Π°ΡΠ΅ β false.
ΠΡΠ»ΠΈ Π΅ΡΡΡ Ρ ΠΎΡΡ ΠΎΠ΄Π½Π° ΡΡΠ΅ΠΉΠΊΠ° Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ
Π’Π°ΠΊ ΠΊΠ°ΠΊ Array2D Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π² ΡΠ΅Π±Π΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠΈΡΠΊΠ°, ΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΡΡΠΎ ΡΠ°ΠΌΠΈ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ°Π·Π»ΠΎΠΆΠΈΠΌ ΠΌΠ°ΡΡΠΈΡΡ Π² Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ
|> Seq.cast<bool>
Π Π½Π°ΠΉΠ΄Π΅ΠΌ Ρ ΠΎΡΡ ΠΎΠ΄Π½ΠΎ Π½Π΅ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅
|> Seq.contains false
Π€ΡΠ½ΠΊΡΠΈΡ Seq.contains Π²Π΅ΡΠ½Π΅Ρ true Π΅ΡΠ»ΠΈ Π² ΡΠ°Π·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Ρ ΠΎΡΡ ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ false. ΠΠΎΡΡΠΎΠΌΡ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΡΡΠΎΠ±Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ == ΡΠ°Π±ΠΎΡΠ°Π» ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΌΡ Ρ ΠΎΡΠΈΠΌ
else not (matrix1.values |> Array2D.mapi (fun x y v -> if matrix2.values.[x, y] <> v then false else true) |> Seq.cast<bool> |> Seq.contains false)
ΠΠ°ΡΡΠΈΡΠ° O Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π½ΡΠ»Π΅Π²ΠΎΠΉ ΠΈΠ»ΠΈ Π½ΡΠ»Ρ-ΠΌΠ°ΡΡΠΈΡΠ΅ΠΉ, Π΅ΡΠ»ΠΈ Π²ΡΠ΅ Π΅Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠ°Π²Π½Ρ Π½ΡΠ»Ρ.
static member O rows cols = let array2d = Array2D.zeroCreate rows cols { values = array2d }
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ
let AO = Matrix.O 5 5
ΠΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ Π·Π΄Π΅ΡΡ Π½Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ, ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ.
ΠΠ°ΡΡΠΈΡΠ°, ΡΠΈΡΠ»ΠΎ ΡΡΡΠΎΠΊ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°Π²Π½ΠΎ ΡΠΈΡΠ»Ρ ΡΡΠΎΠ»Π±ΡΠΎΠ² ΠΈ ΡΠ°Π²Π½ΠΎ n, Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΠ΅ΠΉ ΠΏΠΎΡΡΠ΄ΠΊΠ° n
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½Π°Ρ ΠΌΠ°ΡΡΠΈΡΠ° ΠΈΠΌΠ΅Π΅Ρ Π²ΠΈΠ΄.
Π ΡΠ°ΠΌΠΊΠ°Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΡΠ΅Ρ Π² ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΡ ΠΏΡΡΠ΅ΠΌ ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π² ΠΊΠ²Π°Π΄ΡΠ°Ρ.
static member toSquare matrix = // ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ let dim = Matrix.sizes matrix // ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ let colCount: int = snd dim // ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠΎΠΊ let rowCount: int = fst dim // Π½Π°Ρ ΠΎΠ΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ let length = System.Math.Min (colCount, rowCount) // ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΡΡΡΠΎΠΉ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΡΡ // ΡΠ°Π²Π½ΠΎΠΉ Π½Π°ΠΈΠΌΠ΅Π½Π΅ΡΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Π΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ let zero = Array2D.zeroCreate length length // ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ Π² ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΡ let square = zero |> Array2D.mapi (fun x y _ -> matrix.values.[x, y]) // ΠΏΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ { values = square }
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΠΎΡΡΠ½ΡΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ.
ΠΠ²Π°Π΄ΡΠ°ΡΠ½Π°Ρ ΠΌΠ°ΡΡΠΈΡΠ° Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΎΠΉ, Π΅ΡΠ»ΠΈ Π²ΡΠ΅ Π΅Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π½ΠΈΠΆΠ΅ Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ ΡΠ°Π²Π½Ρ Π½ΡΠ»Ρ, Ρ.Π΅. ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½Π°Ρ ΠΌΠ°ΡΡΠΈΡΠ° ΠΈΠΌΠ΅Π΅Ρ Π²ΠΈΠ΄
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ Π² ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΡΡ. ΠΠΎ Π² Π½Π°ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΠ΅ΠΉ, ΡΠΎ Π΅ΡΡΡ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΠΎΠΉ. Π§ΠΈΡΠ°ΡΠ΅Π»Ρ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π»Π° ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΡ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΡΠ°Π½Π΅Π΅.
static member T matrix = let values = matrix.values |> Array2D.mapi (fun x y v -> if y < x then 0 else v) { values = values }
Π€ΡΠ½ΠΊΡΠΈΡ Array2D.mapi ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°Π΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ Π΄Π²ΡΠΌΠ΅ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² Π² Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°
x β Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ
y β Π½ΠΎΠΌΠ΅Ρ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ
v β ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ
if y < x then 0 else v
ΠΠ΄Π΅ΡΡ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ, Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½ΠΈΠΆΠ΅ Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ ΠΈ Π΅ΡΠ»ΠΈ Π΄Π°, ΡΠΎ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΡΠ΅ΠΉΠΊΡ 0. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ β ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
let a = array2D [[1;2;3] [4;5;6] [7;8;9] [10;11;12]] let A = Matrix. ofArray2D a let R = Matrix.triangular A printfn "origin = \n %A" A.values printfn "triangular = \n %A" R.values
ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ
origin = [[1; 2; 3] [4; 5; 6] [7; 8; 9] [10; 11; 12]] triangular = [[1; 2; 3] [0; 5; 6] [0; 0; 9] [0; 0; 0]]
ΠΠ²Π°Π΄ΡΠ°ΡΠ½Π°Ρ ΠΌΠ°ΡΡΠΈΡΠ° Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ, Π΅ΡΠ»ΠΈ Π²ΡΠ΅ Π΅Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π²Π½Π΅ Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ, ΡΠ°Π²Π½Ρ Π½ΡΠ»Ρ
static member D matrix = let diagonal = matrix.values |> Array2D.mapi (fun x y v -> if x <> y then 0 else v) { values = diagonal }
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΡΡ, ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
let a = array2D [[1;2;3] [4;5;6] [7;8;9] [10;11;12]] let A = Matrix.ofArray2D a let R = Matrix.D A printfn "origin = \n %A" A.values printfn "diagonal = \n %A" R.values
origin = [[1; 2; 3] [4; 5; 6] [7; 8; 9] [10; 11; 12]] diagonal = [[1; 0; 0] [0; 5; 0] [0; 0; 9] [0; 0; 0]]
ΠΠΈΠ°Π³ΠΎΠ½Π°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΡΠΈΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΎΠΉ ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΡΡ E, Π΅ΡΠ»ΠΈ Π²ΡΠ΅ Π΅Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ, ΡΠ°Π²Π½Ρ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ Π½Π° F# Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ
static member E rows cols = let array2d = Array2D. init rows cols (fun x y -> if x = y then 1 else 0) { values = array2d }
ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ ΠΌΠ°ΡΡΠΈΡΠ°ΠΌΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ F#
ΠΠ°Π΄ ΠΌΠ°ΡΡΠΈΡΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ ΠΈ Π½Π°Π΄ ΡΠΈΡΠ»Π°ΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΡΡΠ΄ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, ΠΏΡΠΈΡΠ΅ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌ Π½Π°Π΄ ΡΠΈΡΠ»Π°ΠΌΠΈ, Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ β ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅.
Π‘ΡΠΌΠΌΠΎΠΉ Π΄Π²ΡΡ ΠΌΠ°ΡΡΠΈΡ Amn=(aij)ΠΈ Bmn=(bij)ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ°ΡΡΠΈΡΠ° ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° A+B=Cmn=(cij), ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°Π²Π½Ρ ΡΡΠΌΠΌΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΡ A ΠΈ B, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΌΠ΅ΡΡΠ°Ρ
ΠΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π·Π°Π΄Π°Π½Π½ΡΡ ΠΌΠ°ΡΡΠΈΡ A ΠΈ B Π½Π°Ρ ΠΎΠ΄ΠΈΠΌ ΡΡΠΌΠΌΡ A+B
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π²ΡΡ ΠΌΠ°ΡΡΠΈΡ
static member (+) (matrix1, matrix2) = if Matrix.isEquallySized matrix1 matrix2 then let array2d = matrix1.values |> Array2D.mapi (fun x y v -> matrix2.values.[x, y] + v) { values = array2d } else failwith "matrix1 is not equal to matrix2"
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΡΡ, Π½ΡΠΆΠ½ΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ½ΠΊΡΠΈΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ
let a = array2D [[2;3] [1;-5] [0;6]] let A = Matrix.ofArray2D a let b = array2D [[-3;3] [1;7] [2;0]] let B = Matrix.ofArray2D b let R = A+B printfn "A+B =\n %A" R.values
A+B = [[-1; 6] [2; 2] [2; 6]]
ΠΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΡΡ A=(aij) Π½Π° ΡΠΈΡΠ»ΠΎ k Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ°ΡΡΠΈΡΠ° kA=(kaij) ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΡΡΠΎ ΠΈ ΠΌΠ°ΡΡΠΈΡΠ° A, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½Π°Ρ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΡΡ A Π½Π° ΡΠΈΡΠ»ΠΎ k
ΠΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ A Π½Π°Ρ ΠΎΠ΄ΠΈΠΌ ΠΌΠ°ΡΡΠΈΡΡ 3A
static member (*) (value, matrix) = let array2d = matrix.values |> Array2D.mapi (fun _ _ v -> v * value) { values = array2d }
ΠΠ°ΡΡΠΈΡΡ -A=(-1)*A Π±ΡΠ΄Π΅ΠΌ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΠ΅ A. ΠΠ· ΡΡΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ»Π°Π²Π½ΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ
Π Π°Π·Π½ΠΎΡΡΡΡ ΠΌΠ°ΡΡΠΈΡ A ΠΈ B ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠΌΠΌΠ° ΠΌΠ°ΡΡΠΈΡΡ A ΠΈ ΠΌΠ°ΡΡΠΈΡΡ, ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΉ ΠΊ B
static member (-) (matrix1: Matrix, matrix2: Matrix) = if Matrix. isEquallySized matrix1 matrix2 then matrix1 + (-1)*matrix2 else failwith "matrix1 is not equal to matrix2"
ΠΠ²Π΅ ΠΌΠ°ΡΡΠΈΡΡ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ, Π΅ΡΠ»ΠΈ ΡΠΈΡΠ»ΠΎ ΡΡΠΎΠ»Π±ΡΠΎΠ² ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ°Π²Π½Ρ ΡΠΈΡΠ»Ρ ΡΡΡΠΎΠΊ Π²ΡΠΎΡΠΎΠΉ
static member isMatched matrix1 matrix2 = let row1Count = matrix1.values.[0,*].Length let col2Count = matrix2.values.[*,0].Length row1Count = col2Count
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ ΠΌΠ°ΡΡΠΈΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ AB ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΡ ΠΌΠ°ΡΡΠΈΡ Amn=(aij) ΠΈ Bnp=(bjk) Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ°ΡΡΠΈΡΠ° Cmn=(cik), ΡΠ»Π΅ΠΌΠ΅Π½Ρ cik ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΡΠΌΠΌΠ° ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² i-ΠΉ ΡΡΡΠΎΠΊΠΈ ΠΌΠ°ΡΡΠΈΡΡ A ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² k-Π³ΠΎ ΡΡΠΎΠ»Π±ΡΠ° ΠΌΠ°ΡΡΠΈΡΡ B
ΠΡΡΠΈΡΠ»ΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΡ
Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΡ
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π²ΡΡ ΠΌΠ°ΡΡΠΈΡ
static member (*) (matrix1, (matrix2: Matrix)) = if Matrix. isMatched matrix1 matrix2 then let row1Count = matrix1.values.[*,0].Length let col2Count = matrix2.values.[0,*].Length let values = Array2D.zeroCreate row1Count col2Count for r in 0..row1Count-1 do for c in 0..col2Count-1 do let row = Array.toList matrix1.values.[r,*] let col = Array.toList matrix2.values.[*,c] let cell = List.fold2 (fun acc val1 val2 -> acc + (val1 * val2)) 0 row col values.[r,c] <- cell { values = values } else failwith "matrix1 is not matched to matrix2"
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌΡΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅.
ΠΠ΅ΡΠ΅Π΄ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΌΠ°ΡΡΠΈΡΡ ΡΠ²Π»ΡΡΡΡΡ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ
if Matrix.isMatched matrix1 matrix2 then
ΠΡΠΎΠ³ΠΎΠ²Π°Ρ ΠΌΠ°ΡΡΠΈΡΠ° Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠΎΠΊ ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠ»Π±ΡΠΎΠ² ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ Π²ΡΠΎΡΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ
let row1Count = matrix1. values.[*,0].Length let col2Count = matrix2.values.[0,*].Length // ΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌ ΠΏΡΡΡΠΎΠΉ Π΄Π²ΡΠΌΠ΅ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ let values = Array2D.zeroCreate row1Count col2Count
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ Π²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΈ Π²ΡΠ΅ ΡΡΠΎΠ»Π±ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΠΌΠ°ΡΡΠΈΡ
for r in 0..row1Count-1 do for c in 0..col2Count-1 do let row = Array.toList matrix1.values.[r,*] let col = Array.toList matrix2.values.[*,c]
ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΈ
let cell = List.fold2 (fun acc val1 val2 -> acc + (val1 * val2)) 0 row col
Π€ΡΠ½ΠΊΡΠΈΡ List.fold2 Π½Π° Π²Ρ ΠΎΠ΄ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π΄Π²Π° ΡΠΏΠΈΡΠΊΠ° (ΡΡΡΠΎΠΊΡ ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡ) ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ
acc β Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ
val1 β ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ ΠΈΠ· ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ ΡΡΡΠΎΠΊΠ° ΠΈΠ· ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ
val2 β ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ ΠΈΠ· Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°, ΡΠΎ Π΅ΡΡΡ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Π²ΡΠΎΡΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ°ΡΡΠΈΡΡ ΡΠ²Π»ΡΡΡΡΡ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ, ΡΠΎ ΠΌΡ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ Ρ Π½Π°Ρ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π²ΡΡ ΠΎΠ΄Π° Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ².
ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΊ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠ΅Π΅ΠΊ ΠΈΠ· ΡΡΡΠΎΠΊ ΠΈ ΡΡΠΎΠ»Π±ΡΠ° ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΌ ΠΈΡΠΎΠ³ΠΎΠΌ ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ List.fold2 Π±ΡΠ΄Π΅Ρ ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ Π΄Π²ΡΡ ΠΌΠ°ΡΡΠΈΡ. ΠΡΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ ΠΈΠΌ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ ΠΏΡΡΡΡΡ ΠΌΠ°ΡΡΠΈΡΡ
values.[r,c] <- cell
ΠΠΎΡΠΎΡΠ°Ρ Π²Π΅ΡΠ½Π΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ
{ values = values }
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ
let a = array2D [[1;0;2] [3;1;0]] let A = Matrix.ofArray2D a let b = array2D [[-1;0] [5;1] [-2;0]] let B = Matrix.ofArray2D b let R = A*B printfn "A*B =\n %A" R.values
A1*B1 = [[-5; 0] [2; 1]]
ΠΡΠ»ΠΈ k β N, ΡΠΎ k-ΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΡΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ AΠ½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ k ΠΌΠ°ΡΡΠΈΡ A
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠΎΠ΄ Π½Π° F# Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΡΡ Π² ΡΡΠ΅ΠΏΠ΅Π½Ρ. ΠΠ΄Π΅ΡΡ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Ρ Π²ΠΎΡΡΠΎΠ²Π°Ρ ΡΠ΅ΠΊΡΡΡΠΈΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΠ΅ΠΊ ΠΏΡΠΈ Π±ΠΎΠ»ΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ ΡΡΠ΅ΠΏΠ΅Π½Π΅ΠΉ. Π₯Π²ΠΎΡΡΠΎΠ²Π°Ρ ΡΠ΅ΠΊΡΡΡΠΈΡ β ΡΡΠΎ ΡΠ°ΠΊΠ°Ρ ΡΠ΅ΠΊΡΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ Π² ΠΈΡΠΎΠ³Π΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² ΡΠΈΠΊΠ». ΠΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π²ΡΠ΅Π³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ Π²ΠΎΡΡΠΎΠ²ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎΠΉ, Π½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ°Π΄Ρ ΡΠ΅ΠΊΡΡΡΠΈΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π» ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠΎΠΌ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠ°Π΄Ρ ΡΠ΅ΠΊΡΡΡΠΈΠΈ. Π’ΠΎ Π΅ΡΡΡ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΠ΅ΠΊΡΡΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²Π²Π΅ΡΡ ΠΏΠΎ ΡΡΠ΅ΠΊΡ, Ρ Π²ΠΎΡΡΠΎΠ²Π°Ρ ΡΠ΅ΠΊΡΡΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²Π½ΠΈΠ· ΠΏΠΎ ΡΡΠ΅ΠΊΡ. ΠΠ°ΠΆΠ΄ΡΠΉ Π½ΠΎΠ²ΡΠΉ ΠΊΠ°Π΄Ρ ΡΠ΅ΠΊΡΡΡΠΈΠΈ Π΄Π΅Π»Π°Π΅Ρ ΡΠ²ΠΎΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΈΡ ΠΊ ΡΠΆΠ΅ ΡΠ°Π½Π΅Π΅ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ ΡΠ°Π½ΠΈΡΡΡ Π² Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ΅. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΊΠ°Π΄Ρ ΡΠ΅ΠΊΡΡΡΠΈΠΈ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π», Π² Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ΅ ΡΠΆΠ΅ Π΅ΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠΈΠΊΠ».
// Π²ΠΎΠ·Π²ΠΎΠ΄ΠΈΠΌ ΠΌΠ°ΡΡΠΈΡΡ Π² ΡΡΠ΅ΠΏΠ΅Π½Ρ // matrix - ΠΈΡΡ ΠΎΠ΄Π½Π°Ρ ΠΌΠ°ΡΡΠΈΡΠ° // value - Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ static member (^^) (matrix, value) = // Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Ρ Π²ΠΎΡΡΠΎΠ²ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΡ // m - ΠΌΠ°ΡΡΠΈΡΠ° // p = Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ let inRecPow m p = // ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ // acc - Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΡΠΉ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡ. ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ Matrix // p - Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ Π΄Π»Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠ°Π΄ΡΠ° // Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΊΠ°Π΄ΡΠΎΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠΈ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ let rec recPow acc p = // ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌ ΡΠ΅ΠΊΡΡΡΡ ΡΡΠ΅ΠΏΠ΅Π½Ρ match p with | x when x > 0 -> // Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ° // ΡΠΌΠ½ΠΎΠΆΠ°Π΅ΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ Π½Π° ΡΡΠ°ΡΡΠΉ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡ, ΡΠΎ Π΅ΡΡΡ Π²ΠΎΠ·Π²ΠΎΠ΄ΠΈΠΌ Π² ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΠ΅ΠΏΠ΅Π½Ρ let nextAcc = acc*m // ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π΅ΠΉ ΡΠΌΠ΅Π½ΡΡΠ΅Π½Π½ΠΎΠ΅ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ recPow nextAcc (x-1) // Π΅ΡΠ»ΠΈ ΡΡΠ΅ΠΏΠ΅Π½Ρ Π΄ΠΎΡΡΠΈΠ³Π»Π° Π½ΡΠ»Ρ, ΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡ | _ -> acc // ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ let dim = Matrix.sizes matrix let colCount = snd dim let rowCount = fst dim let u = Matrix.E rowCount colCount // Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π΅ΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ° recPow u p // Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ Ρ Π²ΠΎΡΡΠΎΠ²ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° let powMatrix = inRecPow matrix value // Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΠΈΡΠΎΠ³ΠΎΠ²ΡΡ ΠΌΠ°ΡΡΠΈΡΡ { values = powMatrix. values }
ΠΠΎΠ΄ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π’ΡΠ΅Π±ΡΠ΅Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΡ, Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ½Π°Ρ ΠΌΠ°ΡΡΠΈΡΠ°? ΠΠ½Π° Π½ΡΠΆΠ½Π° Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ°Π΄ΡΠ° ΡΠ΅ΠΊΡΡΡΠΈΠΈ ΠΈ ΡΠ»ΡΠΆΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°ΡΡΡΡ ΠΈΡΠΎΠ³ΠΎΠ²ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
ΠΠΈΠΆΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΡΡΠΈΡΠ»ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΠ΄Π΅ E β ΡΡΠΎ Π΅Π΄ΠΈΠ½ΠΈΡΠ½Π°Ρ ΠΌΠ°ΡΡΠΈΡΠ°. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊ ΠΌΠ°ΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ±Π°Π²ΠΈΡΡ ΡΠΈΡΠ»ΠΎ, ΡΠΎ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈΠ±Π°Π²Π»ΡΡΡ 3E.
// Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠΌΠΌΡ ΠΌΠ°ΡΡΠΈΡΡ ΠΈ ΡΠΈΡΠ»Π° static member (+) (matrix, (value: int)) = let dim = Matrix.sizes matrix let r = fst dim let c = snd dim // ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ let unit = Matrix.E r c // ΡΠΌΠ½ΠΎΠΆΠ°Π΅ΠΌ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ Π½Π° ΡΠΈΡΠ»ΠΎ ΠΈ ΠΏΡΠΈΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΊ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΠ΅ value*unit + matrix
let a = array2D [[1;0] [2;-1]] let A = Matrix. 2 + 3 = [[1; 0] [4; -3]]
ΠΠ°ΡΡΠΈΡΠ° AT, ΡΡΠΎΠ»Π±ΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΎΡΡΠ°Π²Π»Π΅Π½Ρ ΠΈΠ· ΡΡΡΠΎΠΊ ΠΌΠ°ΡΡΠΈΡΡ A Ρ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ Π½ΠΎΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠΌ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ°Π½ΡΠΏΠΎΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊ ΠΌΠ°ΡΡΠΈΡΠ΅ A
static member transpose matrix = let dim = Matrix.sizes matrix let rows = fst dim let cols = snd dim // ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΡΠ»Π΅Π²ΡΡ ΠΌΠ°ΡΡΠΈΡΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² let tMatrix = Matrix.O cols rows // ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ Π² Π½Π΅Π΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ matrix.values |> Array2D.iteri(fun x y v -> tMatrix.values.[y, x] <- v) // Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ tMatrix
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
let a = array2D [[1;2;3] [4;5;6] [7;8;9] [10;11;12]] let A = Matrix.ofArray2D a let R6 = Matrix.T A printfn "origin = \n %A" A.values printfn "transpose = \n %A" R.values
origin = [[1; 2; 3] [4; 5; 6] [7; 8; 9] [10; 11; 12]] transpose = [[1; 4; 7; 10] [2; 5; 8; 11] [3; 6; 9; 12]]
ΠΡΠΎΠ³ΠΈ
Π ΡΡΠΎΡ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΡ ΠΈΠ· ΡΠ΅ΠΎΡΠΈΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±ΡΡ. Π ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π½Π°Π΄ Π½ΠΈΠΌΠΈ, Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Π½Π° ΡΠ·ΡΠΊΠ΅ F#. Π― Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΡΠΈΡΠ°ΡΠ΅Π»Ρ ΡΠΌΠΎΠ³ ΠΎΡΠ΅Π½ΠΈΡΡ ΡΡ Π³ΠΈΠ±ΠΊΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΡΡ Π΄Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΠ·ΡΠΊΠΈ.
ΠΠΎΠ»Π½ΡΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΌΠ°ΡΡΠΈΡ, ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ»ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΡΠ°ΡΡΠΈ, Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ Π½Π° Π³ΠΈΡΡ Π°Π±Π΅.
Github Matrix.fs
ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ° Π΄Π»Ρ ΠΠ: ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΌΠ°ΡΡΠΈΡΠ°ΠΌΠΈ
ΠΠ· ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ ΠΌΠ°ΡΡΠΈΡΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΡΡΠ°Π½ΡΠΏΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΡΠ΅Π²Π΄ΠΎΠΈΠ½Π²Π΅ΡΡΠΈΡ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΡΠΊΠ°Π»ΡΡ, ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π²Π΅ΠΊΡΠΎΡ ΠΈ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ. ΠΠ½Π°Π½ΠΈΠ΅ ΡΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡ Π²Π°ΠΌ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² ΡΠ°Π±ΠΎΡΡ ΠΠ.
Π’ΡΠ°Π½ΡΠΏΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΡΡ
ΠΠΎΡΠ»Π΅ ΡΡΠ°Π½ΡΠΏΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΡ ΡΡΠ°Π½ΡΠΏΠΎΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ. ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π·Π΅ΡΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΡΡ ΠΏΠΎ Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ (Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅ΡΡ Π½Π΅ΠΌ ΡΠ³Π»Ρ ΠΈ ΠΈΠ΄ΡΡ Π² Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΏΡΠ°Π²ΡΠΉ ΡΠ³ΠΎΠ»).
ΠΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, ΡΡΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΌΠ°ΡΡΠΈΡΠ° A. Π’ΡΠ°Π½ΡΠΏΠΎΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ²Π»ΡΡΡΡΡ ΠΌΠ°ΡΡΠΈΡΠ° ΠΡ( Πt, Πtr). ΠΠ΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΊ ΡΡΠΎΠΌΡ, ΡΠ°ΠΊΡΡ ΠΌΠ°ΡΡΠΈΡΡ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ, Π΅ΡΠ»ΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ΄Ρ ΠΌΠ°ΡΡΠΈΡΡ A Π² Π²ΠΈΠ΄Π΅ ΡΡΠΎΠ»Π±ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΡΡ AΡ, Π° ΡΡΠΎΠ»Π±ΡΡ β Π² Π²ΠΈΠ΄Π΅ ΡΡΠ΄ΠΎΠ².
Π£ΠΌΠ½ΠΎΠΆΠ°Π΅ΠΌ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ Π½Π° Π²Π΅ΠΊΡΠΎΡ
ΠΠΎΠ½ΡΡΠΈΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ Π²Π°ΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π·Π½Π°ΠΊΠΎΠΌΠΎ. ΠΡΠ»ΠΈ ΡΠΌΠ½ΠΎΠΆΠΈΡΡ ΡΠ°ΠΊΡΡ ΠΌΠ°ΡΡΠΈΡΡ Π½Π° Π²Π΅ΠΊΡΠΎΡ, ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²Π΅ΠΊΡΠΎΡΠ° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡ. ΠΠ° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ Π½ΠΈΠΆΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ ΡΠ°Π²Π½Ρ 1, ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ β 0:
Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΡΠΈΡΠ° ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΡΡ. ΠΡΠ΅ Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΠΊΡΠΎΠΌΠ΅ Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ, ΡΠ°Π²Π½ΡΡΡΡΡ Π½ΡΠ»Ρ. ΠΠ΄Π½Π°ΠΊΠΎ Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΎΠΉ, Π·Π΄Π΅ΡΡ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ ΠΌΠ°ΡΡΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π½Π΅ ΡΠ°Π²Π½Ρ 1. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π΅Π΄ΠΈΠ½ΠΈΡΠ½Π°Ρ ΠΌΠ°ΡΡΠΈΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΈΠ΄ΠΎΠΌ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ. Π’Π°ΠΊΠΈΠ΅ ΠΌΠ°ΡΡΠΈΡΡ Π²Π΅ΡΡΠΌΠ° ΠΏΠΎΠ»Π΅Π·Π½Ρ ΠΏΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΡΠ΄Π° Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ².
Π£ΠΌΠ½ΠΎΠΆΠ°Π΅ΠΌ Π½Π° ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ
ΠΠ±ΡΠ°ΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠ°ΠΊ:
Π£ΠΌΠ½ΠΎΠΆΠΈΠ² ΠΌΠ°ΡΡΠΈΡΡ A Π½Π° ΠΎΠ±ΡΠ°ΡΠ½ΡΡ Π΅ΠΉ ΠΌΠ°ΡΡΠΈΡΡ A ΡΠΎ ΡΡΠ΅ΠΏΠ΅Π½ΡΡ -1, ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ. ΠΠΎΠ²ΠΎΡΡ ΠΎΠ± ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠΈΡΠ»Π° a ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌ Π±ΡΠ΄Π΅Ρ 1/a. ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΎΠ±ΡΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΌΡ ΡΠΌΠ½ΠΎΠΆΠΈΠΌ Π½Π° ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ΅ Π΅ΠΌΡ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π΅Π΄ΠΈΠ½ΠΈΡΡ: a * 1/a = 1. Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΈ Ρ ΠΌΠ°ΡΡΠΈΡΠ°ΠΌΠΈ. ΠΠΎ ΡΡΡ ΡΡΠΎΠΈΡ ΡΡΠ΅ΡΡΡ, ΡΡΠΎ Π΄Π°Π½Π½ΠΎΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ Π»ΠΈΡΡ Π΄Π»Ρ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΡ.
ΠΡΠ΅Π²Π΄ΠΎΠΈΠ½Π²Π΅ΡΡΠΈΡ ΠΡΡΠ°-ΠΠ΅Π½ΡΠΎΡΠ·Π°
ΠΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π΄Π»Ρ Π½Π΅ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΡ, ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΠΈΠ½Π²Π΅ΡΡΠΈΡ ΠΡΡΠ°-ΠΠ΅Π½ΡΠΎΡΠ·Π°:
ΠΠ΄Π΅ΡΡ U, D ΠΈ V β ΡΠΈΠ½Π³ΡΠ»ΡΡΠ½ΠΎΠ΅ ΡΠ°Π·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΡΠ΅ΠΉ ΠΌΠ°ΡΡΠΈΡΡ A.
ΠΡΠ΅Π²Π΄ΠΎΠΈΠ½Π²Π΅ΡΡΠΈΡ D+ ΠΌΠ°ΡΡΠΈΡΡ D ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ ΠΏΡΡΡΠΌ Π²Π·ΡΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ½Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΠΌΠ°ΡΡΠΈΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Π΅Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΠΌ ΡΡΠ°Π½ΡΠΏΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π±ΡΡΡ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΡΠΌ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠ΅ΠΉ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ A-1, Π²Π΅Π΄Ρ ΠΏΠΎΠΊΠ° ΠΎΠ½Π° Π±ΠΎΠ»ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π² ΡΠ΅ΠΎΡΠΈΠΈ, ΡΠ΅ΠΌ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅. Π‘ΠΈΡΡΠ°ΡΠΈΡ ΠΎΠ±ΡΡΠ»ΠΎΠ²Π»Π΅Π½Π° ΡΠ΅ΠΌ, ΡΡΠΎ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ Π΄Π°ΠΆΠ΅ ΡΠ°ΠΌΡΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠ² Π΄Π°ΡΡ Π»ΠΈΡΡ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ.
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΡΡ Π² ΡΠΊΠ°Π»ΡΡ
Π‘Π»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΡΡ Π² ΡΠΊΠ°Π»ΡΡ, Π΄Π»Ρ ΡΠ΅Π³ΠΎ Π½Π°Π΄ΠΎ Π½Π°ΠΉΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΠΌΡΠΉ det(A) Π»ΠΈΠ±ΠΎ |A|. ΠΡΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈΡΡ Ρ Π½ΠΈΠΌΠΈ, Π½ΠΈΠΆΠ΅ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΌΠ°ΡΡΠΈΡΠ΅ΠΉ 2Γ2:
Π’ΡΡ ΠΆΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»ΠΎΠ² ΠΎ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. ΠΠ°Π±ΠΎΡ Π²Π΅ΠΊΡΠΎΡΠΎΠ² ΡΠΎΠ³Π΄Π° ΡΡΠΈΡΠ°Π΅ΡΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌ, ΠΊΠΎΠ³Π΄Π° Ρ ΠΎΡΡ ΠΎΠ΄ΠΈΠ½ Π²Π΅ΠΊΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ Π΄ΡΡΠ³ΠΈΡ Π²Π΅ΠΊΡΠΎΡΠΎΠ² ΠΈΠ· Π½Π°Π±ΠΎΡΠ°. Π ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π°Π±ΠΎΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌ. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π²Π΅ΠΊΡΠΎΡΡ x ΠΈ y ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ, ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠΊΠ°Π»ΡΡΠΎΠ² a ΠΈ b, ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠΈΡ ax + by = 0, ΡΠ°Π²Π½ΡΡΡΡΡ a = b = 0.
ΠΡΡΠΎΡΠ½ΠΈΠΊ β Β«Mathematics for Artificial Intelligence β Linear AlgebraΒ»
ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΌΠ°ΡΡΠΈΡΠ°ΠΌΠΈ (ΠΠ»Π³Π΅Π±ΡΠ° 2, ΠΠ°ΡΡΠΈΡΡ) β Mathplanet
ΠΠ°ΡΡΠΈΡΡ ΡΡΠΈΡΠ°ΡΡΡΡ ΡΠ°Π²Π½ΡΠΌΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΈ Π΅ΡΠ»ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ ΡΠ°Π²Π΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΌΠ½ΠΎΠΆΠ°ΡΡ ΠΌΠ°ΡΡΠΈΡΡ Π½Π° Π»ΡΠ±ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ, ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΊΠ°Π»ΡΡΠ½ΡΠΌ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
ΠΡΠΈΠΌΠ΅Ρ
$$2\begin{bmatrix} 1 & 2\\ 3 & 4 \end{bmatrix}= \begin{bmatrix} {\color{green} 2}\cdot 1 & {\color{ Π·Π΅Π»Π΅Π½ΡΠΉ} 2}\cdot2\\ {\color{green} 2}\cdot3 & {\color{green} 2}\cdot4 \end{bmatrix} = \begin{bmatrix} 2 & 4\\ 6 & 8 \ end {bmatrix}$$
ΠΠ°ΡΡΠΈΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ ΠΈ Π²ΡΡΠΈΡΠ°ΡΡ ΠΏΠΎ Π·Π°ΠΏΠΈΡΠΈ, Π° ΠΌΠ°ΡΡΠΈΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠ½ΠΎΠΆΠ°ΡΡ.
ΠΡΠΈΠΌΠ΅Ρ
Π‘Π»ΠΎΠΆΠΈΡΠ΅ Π΄Π²Π΅ ΠΌΠ°ΡΡΠΈΡΡ A ΠΈ B:
$$A=\begin{bmatrix} {\color{green} 2} & {\color{green} -1}\\ {\color {Π·Π΅Π»Π΅Π½ΡΠΉ} 1} & {\color{Π·Π΅Π»Π΅Π½ΡΠΉ} 0} \end{bmatrix}B=\begin{bmatrix} {\color{ΡΠΈΠ½ΠΈΠΉ} 1} & {\color{ΡΠΈΠ½ΠΈΠΉ} 4} \\ {\color{ΡΠΈΠ½ΠΈΠΉ } 2} & \,{\color{blue} 3} \end{bmatrix}$$
ΠΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ A ΠΈ B ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±Π΅ ΠΌΠ°ΡΡΠΈΡΡ ΠΈΠΌΠ΅ΡΡ Π΄Π²Π΅ ΡΡΡΠΎΠΊΠΈ ΠΈ Π΄Π²Π° ΡΡΠΎΠ»Π±ΡΠ°. Π‘ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΡΡ A Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΠΌΠ°ΡΡΠΈΡΡ B:
$$A+B=\begin{bmatrix} {\color{green} 2}+{\color{blue} 1} & {\color{green} -1}+{\color{blue} 4} \ \ {\color{green} 1}+{\color{blue} 2} & {\color{green} 0}+\,{\color{blue} 3} \end{bmatrix}=\begin{bmatrix} 3 & 3\\ 3 & 3 \end{bmatrix}$$
Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ Π²ΡΡΠΈΡΠ°ΡΡΡΡ ΠΌΠ°ΡΡΠΈΡΡ.
ΠΡΠ»ΠΈ ΡΠΌΠ½ΠΎΠΆΠΈΡΡ ΠΌΠ°ΡΡΠΈΡΡ A p*q ΠΈ ΠΌΠ°ΡΡΠΈΡΡ B m*n , ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ°Π²Π½ΠΎ
$$A_{p\times q}+B_{m\times n}=(AB)_{ p\times n}$$
ΠΠ»Π΅ΠΌΠ΅Π½Ρ g-ΠΉ ΡΡΡΠΎΠΊΠΈ ΠΈ h-Π³ΠΎ ΡΡΠΎΠ»Π±ΡΠ° ΠΌΠ°ΡΡΠΈΡΡ AB ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠΌΠΌΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² g-ΠΉ ΡΡΡΠΎΠΊΠΈ A ΠΈ h-Π³ΠΎ ΡΡΠΎΠ»Π±ΡΠ° ΠΌΠ°ΡΡΠΈΡΡ B. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΌΠ½ΠΎΠΆΠ°ΡΡ Π΄Π²Π΅ ΠΌΠ°ΡΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠ»Π±ΡΠΎΠ² Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΠ΅ ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠΎΠΊ Π²ΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠ°Π²Π½ΠΎ.
Π Π°Π±ΠΎΡΠΈΠ΅ Π»ΠΈΡΡΡ
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠ²Π°ΡΡΡΡ Π² ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΠ°ΡΡΠΈΡ, Ρ Π½Π°Ρ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π±ΠΎΡΠΈΡ Π»ΠΈΡΡΠΎΠ² Ρ ΠΎΡΠ²Π΅ΡΠ°ΠΌΠΈ Π½ΠΈΠΆΠ΅. Π Π°Π±ΠΎΡΠΈΠΉ Π»ΠΈΡΡ 1 ΠΡΠ²Π΅ΡΡ 1 003
Π£ΠΌΠ½ΠΎΠΆΠΈΡΡ ΠΌΠ°ΡΡΠΈΡΡ A ΠΈ B:
$$A =\begin{bmatrix} {\color{green} 1} & {\color{green} 3}\\ {\color{green} -1} & {\color{green} 0} \end{bmatrix}B= \begin{bmatrix} {\color{blue} 2} & {\color{blue} 1} & {\color{blue} 1}\\ {\color{blue} -1} & {\color{blue} 2 }&{\color{ΡΠΈΠ½ΠΈΠΉ} 4} \end{bmatrix}$$
ΠΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠ΅ΡΠ²Π°Ρ ΠΌΠ°ΡΡΠΈΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ 2 ΡΡΠΎΠ»Π±ΡΠ°, Π° Π²ΡΠΎΡΠ°Ρ β 2 ΡΡΡΠΎΠΊΠΈ.
$$\\ AB =\begin{bmatrix} {\color{green} 1}\cdot {\color{blue} 2}+{\color{green} 3}\cdot {\color{blue} -1 } & {\ ΡΠ²Π΅Ρ {Π·Π΅Π»Π΅Π½ΡΠΉ} 1} \ cdot {\ ΡΠ²Π΅Ρ {ΡΠΈΠ½ΠΈΠΉ} 1} + {\ ΡΠ²Π΅Ρ {Π·Π΅Π»Π΅Π½ΡΠΉ} 3} \ cdot {\ ΡΠ²Π΅Ρ {ΡΠΈΠ½ΠΈΠΉ} 2} & {\ ΡΠ²Π΅Ρ {Π·Π΅Π»Π΅Π½ΡΠΉ} 1} \ cdot {\ ΡΠ²Π΅Ρ {ΡΠΈΠ½ΠΈΠΉ} 1} + {\ ΡΠ²Π΅Ρ {Π·Π΅Π»Π΅Π½ΡΠΉ} 3} \ cdot {\ ΡΠ²Π΅Ρ {ΡΠΈΠ½ΠΈΠΉ} 4} \\ {\ ΡΠ²Π΅Ρ {Π·Π΅Π»Π΅Π½ΡΠΉ} -1} \ cdot {\ ΡΠ²Π΅Ρ {ΡΠΈΠ½ΠΈΠΉ} 2} + { \ ΡΠ²Π΅Ρ {Π·Π΅Π»Π΅Π½ΡΠΉ} 0} \ cdot {\ ΡΠ²Π΅Ρ {ΡΠΈΠ½ΠΈΠΉ} -1} & {\ ΡΠ²Π΅Ρ {Π·Π΅Π»Π΅Π½ΡΠΉ} -1} \ cdot {\ ΡΠ²Π΅Ρ {ΡΠΈΠ½ΠΈΠΉ} 1} + {\ ΡΠ²Π΅Ρ {Π·Π΅Π»Π΅Π½ΡΠΉ} 0} \ cdot { \ ΡΠ²Π΅Ρ {ΡΠΈΠ½ΠΈΠΉ} 2} & {\ ΡΠ²Π΅Ρ {Π·Π΅Π»Π΅Π½ΡΠΉ} -1} \ cdot {\ ΡΠ²Π΅Ρ {ΡΠΈΠ½ΠΈΠΉ} 1} + {\ ΡΠ²Π΅Ρ {Π·Π΅Π»Π΅Π½ΡΠΉ} 0} \ cdot {\ ΡΠ²Π΅Ρ {ΡΠΈΠ½ΠΈΠΉ} 4} \ end {bmatrix }=\\ \\ =\begin{bmatrix} -1 & 7 & 13\\ -2 & -1 & -1 \end{bmatrix}$$
ΠΡΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ:
$$\begin{bmatrix} 2 &0 \\ 1&3 \\ -4&1 \end{bmatrix}\cdot \begin{bmatrix} 6 &2 & 3\\ 0& -2 & 4 \end{bmatrix}$$
T\). 9T \]Π§ΡΠΎΠ±Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΡΡ Ρ , Π΄Π²Π΅ ΠΌΠ°ΡΡΠΈΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΡ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠΎΠΊ ΠΈ ΡΡΠΎΠ»Π±ΡΠΎΠ². Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ
\[A + B = \begin{pmatrix} 1 & -5 & 4 \\ 2 & 5 & 3 \end{pmatrix} + \begin{pmatrix} 8 & -3 & -4 \\ 4 & -2 & 9 \end{pmatrix} = \begin{pmatrix} 1 + 8 & -5 – 3 & 4 – 4 \\ 2 + 4 & 5 -2 & 3 + 9Π’ \]
ΠΠ°ΡΡΠΈΡΠ½ΠΎΠ΅ ΡΠΊΠ°Π»ΡΡΠ½ΠΎΠ΅ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π Π°Π·Π΄Π΅Π»
ΒΠ§ΡΠΎΠ±Ρ ΡΠΌΠ½ΠΎΠΆΠΈΡΡ ΠΌΠ°ΡΡΠΈΡΡ Π½Π° ΡΠΊΠ°Π»ΡΡ, ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ΅ ΠΊΠ°ΠΊ ΡΠΊΠ°Π»ΡΡΠ½ΠΎΠ΅ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ , ΡΠΌΠ½ΠΎΠΆΡΡΠ΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΡΡ Π½Π° ΡΠΊΠ°Π»ΡΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ…
\[ 6*A = 6 * \begin{pmatrix} 1 & -5 & 4\\ 2 & 5 & 3 \end{pmatrix} = \begin{pmatrix} 6 * 1 & 6 * -5 & 6 * 4\\ 6 * 2 ΠΈ 6 *5 ΠΈ 6 * 3 \end{pmatrix} = \begin{pmatrix} 6 & -30 & 24 \\ 12 & 30 & 18 \end{pmatrix}\]
Π§ΡΠΎΠ±Ρ ΡΠΌΠ½ΠΎΠΆΠΈΡΡ Π΄Π²Π° Π²Π΅ΠΊΡΠΎΡΠ° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ, Π½ΡΠΆΠ½ΠΎ Π²Π·ΡΡΡ ΡΠΊΠ°Π»ΡΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ , ΡΠ°ΠΊΠΆΠ΅ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ . ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π² Π΄Π²ΡΡ Π²Π΅ΠΊΡΠΎΡΠ°Ρ Π²ΠΌΠ΅ΡΡΠ΅, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ².
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π²Π΅ΠΊΡΠΎΡΠΎΠ² x ΠΈ y ΡΠΊΠ°Π»ΡΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ Π½ΠΈΠΆΠ΅
\[ x \cdot y = \begin{pmatrix} 1 & -5 & 4 \end{pmatrix} * \begin{pmatrix} 4 & -2 & 5 \end{pmatrix} = 1*4 + (-5 )*(-2) + 4*5 = 4+10+20 = 34\]
Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΡ Π Π°Π·Π΄Π΅Π»
ΒΠ§ΡΠΎΠ±Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΡ , ΠΏΠ΅ΡΠ²Π°Ρ ΠΌΠ°ΡΡΠΈΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅ΡΡ ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠ»Π±ΡΠΎΠ², ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ Π²ΠΎ Π²ΡΠΎΡΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΠ΅. ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠΎΠΊ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ ΡΠ°Π²Π½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΡΡΡΠΎΠΊ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ, Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠ»Π±ΡΠΎΠ² ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ ΡΠ°Π²Π½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΡΡΠΎΠ»Π±ΡΠΎΠ² Π²ΡΠΎΡΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΠ°ΡΡΠΈΡΡ 3 Γ 5 ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠ½ΠΎΠΆΠΈΡΡ Π½Π° ΠΌΠ°ΡΡΠΈΡΡ 5 Γ 7, ΠΏΠΎΠ»ΡΡΠΈΠ² ΠΌΠ°ΡΡΠΈΡΡ 3 Γ 7, Π½ΠΎ Π½Π΅Π»ΡΠ·Ρ ΡΠΌΠ½ΠΎΠΆΠΈΡΡ ΠΌΠ°ΡΡΠΈΡΡ 2 Γ 8 Π½Π° ΠΌΠ°ΡΡΠΈΡΡ 4 Γ 2. Π§ΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΉ ΠΌΠ°ΡΡΠΈΡΠ΅, ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠ·ΡΠΌΠΈΡΠ΅ ΡΠΊΠ°Π»ΡΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΡΠΎΠ»Π±ΡΠ° Π²ΡΠΎΡΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ.