/// <summary> /// Subtracts another matrix from this matrix. /// </summary> /// <param name="other">The matrix to subtract.</param> /// <param name="result">The matrix to store the result of the subtraction.</param> /// <exception cref="ArgumentOutOfRangeException">If the two matrices don't have the same dimensions.</exception> protected override void DoSubtract(Matrix<Complex> other, Matrix<Complex> result) { // diagonal - diagonal = diagonal var diagOther = other as DiagonalMatrix; var diagResult = result as DiagonalMatrix; if (diagOther != null && diagResult != null) { Control.LinearAlgebraProvider.SubtractArrays(_data, diagOther._data, diagResult._data); return; } other.Negate(result); for (int i = 0; i < _data.Length; i++) { result.At(i, i, result.At(i, i) + _data[i]); } }
public void Negate() { Matrix matrix = new Matrix(new double[][] { new double[] { 1.0, 2.0 }, new double[] { 3.0, 4.0 } }); Matrix result = matrix.Negate(); Assert.AreEqual(4, result.Size); var elements = result.Elements; Assert.AreEqual(-1.0, elements[0][0]); Assert.AreEqual(-2.0, elements[0][1]); Assert.AreEqual(-3.0, elements[1][0]); Assert.AreEqual(-4.0, elements[1][1]); }