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); }
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); }
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)); }
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); }
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)); }
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); }
public void ExplicitCasting_ToDouble_ReturnsMagnitudeOfVector() { var sut = new Vector.Vector(1, 2, 3); var magnitude = (double)sut; Assert.AreEqual(3.74165, magnitude, 0.00001); }
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)); } } }
public void FindNull() { Vector.Vector <Human> vec = new Vector.Vector <Human>(); foreach (var item in vec.Find(null)) { ; } }
public void Indexer_SetsCorrectCoefficient() { var sut = new Vector.Vector(0, 2, 8); sut[0] = 5; Assert.AreEqual(5, sut[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]); } }
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()); } }
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; }
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]); } }
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); }
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(); }
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); } }
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); }
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); } }
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); }
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; }
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); }
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]; } }
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()); } }
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)); }
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]); } } }
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]; } } }
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)); }
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); }
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(); }