예제 #1
0
        public void EqualOperator_Fails_ForUnequalCtorParameters()
        {
            var a = new Vector.Vector(2, 3, 4);
            var b = new Vector.Vector(2, 3, 4);

            Assert.IsTrue(a == b);
        }
예제 #2
0
        public void MultiplyTwoVectors_ReturnsCrossProduct()
        {
            var a = new Vector.Vector(2, 3, 4);
            var b = new Vector.Vector(3, 1, 4);

            Assert.IsTrue(new Vector.Vector(8, 4, -1) == a * b);
        }
예제 #3
0
        public static Matrix GetMultiplication(Matrix matrix1, Matrix matrix2)
        {
            if (matrix1.GetСolumnsCount() != matrix2.GetRowsCount())
            {
                throw new ArgumentException("Число столбцов в первой матрице должно быть равно числу строк во второй");
            }

            Vec[] vectors = new Vec[matrix1.GetRowsCount()];

            for (int i = 0; i < vectors.Length; i++)
            {
                vectors[i] = new Vec(matrix2.GetСolumnsCount());
            }

            for (int i = 0; i < matrix1.GetRowsCount(); i++)
            {
                for (int j = 0; j < matrix2.GetСolumnsCount(); j++)
                {
                    Vec    columnVector = matrix2.GetColumn(j);
                    double x            = Vec.GetScalarMultiplication(matrix1.Rows[i], columnVector);
                    vectors[i].SetComponent(j, x);
                }
            }

            return(new Matrix(vectors));
        }
예제 #4
0
        public void AddUpVectors_ReturnsCorrectVector()
        {
            var a = new Vector.Vector(2, 3, 4);
            var b = new Vector.Vector(3, 1, 4);

            Assert.IsTrue(new Vector.Vector(5, 4, 8) == a + b);
        }
예제 #5
0
        public void Equals_Fails_ForUnequalCtorParameters()
        {
            var a = new Vector.Vector(2, 3, 4);
            var b = new Vector.Vector(2, 3, 4);

            Assert.IsTrue(a.Equals(b));
        }
예제 #6
0
        public void SubtractVectors_ReturnsCorrectVector()
        {
            var a = new Vector.Vector(2, 3, 4);
            var b = new Vector.Vector(3, 1, 4);

            Assert.IsTrue(new Vector.Vector(-1, 2, 0) == a - b);
        }
예제 #7
0
        public void ExplicitCasting_ToDouble_ReturnsMagnitudeOfVector()
        {
            var sut       = new Vector.Vector(1, 2, 3);
            var magnitude = (double)sut;

            Assert.AreEqual(3.74165, magnitude, 0.00001);
        }
예제 #8
0
        public Matrix(Vec[] vectors)
        {
            if (vectors.Length == 0)
            {
                throw new ArgumentException("размер массива должен быть > 0");
            }

            int maxLength = 0;

            foreach (Vec e in vectors)
            {
                if (e.GetSize() > maxLength)
                {
                    maxLength = e.GetSize();
                }
            }

            Rows = new Vec[vectors.Length];

            for (int i = 0; i < vectors.Length; i++)
            {
                Rows[i] = new Vec(maxLength);

                for (int j = 0; j < vectors[i].GetSize(); ++j)
                {
                    Rows[i].SetComponent(j, vectors[i].GetComponent(j));
                }
            }
        }
예제 #9
0
 public void FindNull()
 {
     Vector.Vector <Human> vec = new Vector.Vector <Human>();
     foreach (var item in vec.Find(null))
     {
         ;
     }
 }
예제 #10
0
        public void Indexer_SetsCorrectCoefficient()
        {
            var sut = new Vector.Vector(0, 2, 8);

            sut[0] = 5;

            Assert.AreEqual(5, sut[0]);
        }
예제 #11
0
        public Matrix(Matrix matrix)
        {
            var size = matrix._rows.Length;

            _rows = new Vector.Vector[size];

            for (var i = 0; i < size; i++)
            {
                _rows[i] = new Vector.Vector(matrix._rows[i]);
            }
        }
예제 #12
0
        public Neuron(int numOfWeights)
        {
            var random = new Random();

            Weights = new Vector.Vector(X, Y);

            for (var i = 0; i < numOfWeights; i++)
            {
                Weights.Add(random.NextDouble());
            }
        }
예제 #13
0
        public void Transpose()
        {
            var size       = GetColumnsNumber();
            var resultRows = new Vector.Vector[size];

            for (var i = 0; i < size; i++)
            {
                resultRows[i] = GetColumn(i);
            }

            _rows = resultRows;
        }
예제 #14
0
        public Matrix(Matrix matrix)
        {
            if (matrix.GetRowsCount() == 0)
            {
                throw new ArgumentException("размер матрицы должен быть > 0");
            }
            Rows = new Vec[matrix.GetRowsCount()];

            for (int i = 0; i < matrix.GetRowsCount(); i++)
            {
                Rows[i] = new Vec(matrix.Rows[i]);
            }
        }
예제 #15
0
        public Matrix Transpose()
        {
            Vec[] vectors = new Vec[GetСolumnsCount()];

            for (int i = 0; i < Rows[0].GetSize(); i++)
            {
                vectors[i] = GetColumn(i);
            }

            Rows = vectors;

            return(this);
        }
예제 #16
0
        static void Main(string[] args)
        {
            Matrix matrix1 = new Matrix(3, 5);

            Console.WriteLine("Размер матрицы {0}: {1}X{2}.", matrix1, matrix1.RowsSize, matrix1.ColumnSize);
            matrix1[1] = new Vector.Vector(2.0, 3.0, 4.0);
            Console.WriteLine("Матрица с измененным вторым ветором {0}.", matrix1);
            matrix1[2] = new Vector.Vector(5.5, 6.9, 7.0);
            Console.WriteLine("Вектор матрицы с индексом 2: {0}", "{" + matrix1[2] + "}");

            Console.WriteLine("Для выхода нажмите Утеук...");
            Console.ReadLine();
        }
예제 #17
0
        public Matrix(int rowCount, int сolumnsCount)
        {
            if (сolumnsCount <= 0 || rowCount <= 0)
            {
                throw new ArgumentException("количество строк и столбцов должно быть > 0", nameof(сolumnsCount));
            }

            Rows = new Vec[rowCount];

            for (int i = 0; i < rowCount; i++)
            {
                Rows[i] = new Vec(сolumnsCount);
            }
        }
예제 #18
0
        public void SetRow(int index, Vec vector)
        {
            if (vector.GetSize() != GetСolumnsCount())
            {
                throw new ArgumentOutOfRangeException("размер вектора должен быть " + Rows[index].GetSize(), nameof(vector));
            }

            if (index < 0 || index > Rows.Length)
            {
                throw new IndexOutOfRangeException("index должен быть от 0 до " + Rows.Length);
            }

            Rows[index] = new Vec(vector);
        }
예제 #19
0
        public Matrix(int width, int height)
        {
            if (width <= 0 || height <= 0)
            {
                throw new ArgumentOutOfRangeException($"{nameof(width)}, {nameof(height)}", "Ширина и высота матрицы должны быть больше нуля");
            }

            _rows = new Vector.Vector[height];

            for (var i = 0; i < height; i++)
            {
                _rows[i] = new Vector.Vector(width);
            }
        }
예제 #20
0
        public Vector.Vector GetColumn(int index)
        {
            if (index < 0 || index >= GetColumnsNumber())
            {
                throw new IndexOutOfRangeException("Индекс выходит за пределы размерности матрицы");
            }

            var resultVector = new Vector.Vector(_rows.Length);

            for (var i = 0; i < _rows.Length; i++)
            {
                resultVector[i] = _rows[i][index];
            }

            return(resultVector);
        }
예제 #21
0
        public void SetRow(Vector.Vector vector, int index)
        {
            if (index < 0 || index >= GetRowsNumber())
            {
                throw new IndexOutOfRangeException("Индекс выходит за пределы размерности матрицы");
            }

            if (vector.GetSize() > GetColumnsNumber())
            {
                throw new ArgumentException("Размерность вектора превышает ширину матрицы", nameof(vector));
            }

            var resultVector = new Vector.Vector(GetColumnsNumber(), vector.GetComponents());

            _rows[index] = resultVector;
        }
예제 #22
0
        public Vec GetColumn(int index)
        {
            if (index < 0 || index > Rows[0].GetSize())
            {
                throw new IndexOutOfRangeException("index должен быть от 0 до " + Rows[0].GetSize());
            }

            Vec columnVector = new Vec(Rows.Length);

            for (int i = 0; i < Rows.Length; i++)
            {
                columnVector.SetComponent(i, Rows[i].GetComponent(index));
            }

            return(columnVector);
        }
예제 #23
0
        public void SetColumn(Vector.Vector vector, int index)
        {
            if (index < 0 || index >= GetColumnsNumber())
            {
                throw new IndexOutOfRangeException("Индекс выходит за пределы размерности матрицы");
            }

            if (vector.GetSize() > GetRowsNumber())
            {
                throw new ArgumentException("Размерность вектора превышает высоту матрицы", nameof(vector));
            }

            for (var i = 0; i < _rows.Length; i++)
            {
                _rows[i][index] = vector[i];
            }
        }
예제 #24
0
        public Matrix(Vector.Vector[] rows)
        {
            if (rows.Length <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(rows), "Высота матрицы должна быть больше нуля");
            }

            var height = rows.Length;

            _rows = new Vector.Vector[height];

            var width = rows.Max(x => x.GetSize());

            for (var i = 0; i < height; i++)
            {
                _rows[i] = new Vector.Vector(width, rows[i].GetComponents());
            }
        }
예제 #25
0
        private Matrix GetMinor(int columnIndex, int rowIndex)
        {
            var size       = _rows.Length - 1;
            var resultRows = new Vector.Vector[size];

            for (var i = 0; i < size; i++)
            {
                var vector = new Vector.Vector(size);

                for (var j = 0; j < size; j++)
                {
                    vector[j] = (j < columnIndex) ? _rows[(i < rowIndex) ? i : i + 1][j] : _rows[(i < rowIndex) ? i : i + 1][j + 1];
                }

                resultRows[i] = vector;
            }

            return(new Matrix(resultRows));
        }
예제 #26
0
        public Matrix(double[,] data)
        {
            if (data.GetLength(0) == 0)
            {
                throw new ArgumentException("размер массива должен быть > 0");
            }

            Rows = new Vec[data.GetLength(0)];

            for (int i = 0; i < data.GetLength(0); i++)
            {
                Rows[i] = new Vec(data.GetLength(1));

                for (int j = 0; j < data.GetLength(1); ++j)
                {
                    Rows[i].SetComponent(j, data[i, j]);
                }
            }
        }
예제 #27
0
        public Matrix(double[,] rowValues)
        {
            if (rowValues.GetLength(0) <= 0 || rowValues.GetLength(1) <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(rowValues), "Ширина и высота матрицы должны быть больше нуля");
            }

            var wSize = rowValues.GetLength(0);
            var hSize = rowValues.GetLength(1);

            _rows = new Vector.Vector[hSize];

            for (var i = 0; i < hSize; i++)
            {
                _rows[i] = new Vector.Vector(wSize);
                for (var j = 0; j < wSize; j++)
                {
                    _rows[i][j] = rowValues[j, i];
                }
            }
        }
예제 #28
0
        public Vector.Vector MultiplyByVector(Vector.Vector vector)
        {
            if (vector.GetSize() != GetColumnsNumber())
            {
                throw new ArgumentException("Матрица и вектор не согласованы", nameof(vector));
            }

            var wSize = vector.GetSize();
            var hSize = _rows.Length;

            var resultComponents = new double[hSize];

            for (var i = 0; i < hSize; i++)
            {
                for (var j = 0; j < wSize; j++)
                {
                    resultComponents[i] += _rows[i][j] * vector[j];
                }
            }

            return(new Vector.Vector(resultComponents));
        }
예제 #29
0
        public Vec MultiplyByVector(Vec vector)
        {
            if (GetСolumnsCount() != vector.GetSize())
            {
                throw new ArgumentException("Количество столбцов матрицы должно быть равно длинне вектора ");
            }

            Vec vectorResult = new Vec(vector.GetSize());

            for (int i = 0; i < vector.GetSize(); i++)
            {
                double sum = 0;

                for (int j = 0; j < Rows.Length; j++)
                {
                    sum += Rows[i].GetComponent(j) * vector.GetComponent(j);
                }

                vectorResult.SetComponent(i, sum);
            }

            return(vectorResult);
        }
예제 #30
0
        static void Main()
        {
            var matrix1 = new Matrix(3, 4);

            Console.WriteLine($"{nameof(matrix1)}: {matrix1}");

            var matrix2 = new Matrix(matrix1);

            Console.WriteLine($"{nameof(matrix2)}: {matrix2}");

            var matrix3 = new Matrix(new double[, ] {
                { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }
            });

            Console.WriteLine($"{nameof(matrix3)}: {matrix3}");

            var matrix4 = new Matrix(new[] { new Vector.Vector(new double[] { 12, 23, 34, 56 }), new Vector.Vector(new double[] { 65, 83, 45, 44, 5, 6 }), new Vector.Vector(new double[] { 3, 5, 8, 9 }) });

            Console.WriteLine($"{nameof(matrix4)}: {matrix4}");

            Console.WriteLine();
            Console.WriteLine($"Размеры {nameof(matrix4)}: {matrix4.GetColumnsNumber()}x{matrix4.GetRowsNumber()}");

            Console.WriteLine();
            Console.WriteLine($"Получение строки: {matrix4.GetRow(1)}");
            Console.Write($"Установка строки: ");
            matrix4.SetRow(new Vector.Vector(new double[] { 18, 19, 20, 21 }), 0);
            Console.WriteLine(matrix4);

            Console.WriteLine();
            Console.WriteLine($"Получение столбца {matrix4.GetColumn(1)}");
            Console.Write($"Установка столбца: ");
            matrix4.SetColumn(new Vector.Vector(new double[] { 16, 17, 25 }), 2);
            Console.WriteLine(matrix4);

            Console.WriteLine();
            Console.WriteLine($"Транспонирование матрицы");
            Console.WriteLine($"{matrix4} - {matrix4.GetColumnsNumber()}x{matrix4.GetRowsNumber()}");
            matrix4.Transpose();
            Console.WriteLine($"{matrix4} - {matrix4.GetColumnsNumber()}x{matrix4.GetRowsNumber()}");

            Console.WriteLine();
            matrix4.Multiply(10);
            Console.WriteLine($"Умножение на 10: {matrix4}");

            Console.WriteLine();
            var matrix = new Matrix(new double[, ] {
                { 3, 14, 15 }, { 92, 6, 5 }, { 4, 32, 17 }
            });

            Console.WriteLine($"Определитель матрицы {matrix} равен {matrix.GetDeterminant()}");
            Console.WriteLine($"Определитель матрицы {matrix3} равен {matrix3.GetDeterminant()}");

            Console.WriteLine();
            Console.WriteLine("Умножение матрицы на вектор");
            var vector = new Vector.Vector(new Vector.Vector(new double[] { 1, 2, 4 }));

            Console.WriteLine($"{matrix4} x {vector}");
            Console.WriteLine($"= {matrix4.MultiplyByVector(vector)}");

            Console.WriteLine();
            Console.WriteLine("Сложение и вычитание матриц");
            var matrix5 = new Matrix(new double[, ] {
                { 3, 1, 5 }, { 9, 6, 5 }, { 4, 3, 7 }
            });
            var matrix6 = new Matrix(new double[, ] {
                { 1, 4, 4 }, { 2, 8, 1 }, { 2, 2, 7 }
            });

            Console.Write($"{matrix5} + {matrix6} = ");
            matrix5.Add(matrix6);
            Console.WriteLine($"{matrix5}");
            Console.Write($"{matrix5} - {matrix6} = ");
            matrix5.Subtract(matrix6);
            Console.WriteLine($"{matrix5}");

            Console.WriteLine();
            Console.WriteLine($"{matrix} + {matrix3} = {Matrix.Add(matrix, matrix3)}");
            Console.WriteLine($"{matrix} - {matrix3} = {Matrix.Subtract(matrix, matrix3)}");

            Console.WriteLine();
            Console.WriteLine("Произведение матриц");

            var matrix7 = new Matrix(new double[, ] {
                { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 }
            });
            var matrix8 = new Matrix(new double[, ] {
                { 10, 12, 34 }, { 15, 8, 47 }, { 25, 19, 4 }, { 55, 2, 94 }
            });

            Console.WriteLine($"{matrix7} x {matrix8} = ");
            Console.WriteLine(Matrix.Multiply(matrix7, matrix8));

            Console.ReadLine();
        }