Browse Source

Fixed all bugs on Vector and DenseVector for the new functional friendly interface.

pull/36/head
Jurgen Van Gael 16 years ago
parent
commit
164f4e1a32
  1. 24
      src/Numerics/LinearAlgebra/Double/DenseVector.cs
  2. 25
      src/Numerics/LinearAlgebra/Double/Vector.cs
  3. 5
      src/UnitTests/LinearAlgebraTests/Double/DenseVectorTests.cs

24
src/Numerics/LinearAlgebra/Double/DenseVector.cs

@ -595,8 +595,20 @@ namespace MathNet.Numerics.LinearAlgebra.Double
}
else
{
CopyTo(result);
result.Subtract(other);
var rdense = result as DenseVector;
var odense = other as DenseVector;
if (rdense != null && odense != null)
{
CopyTo(result);
Control.LinearAlgebraProvider.AddVectorToScaledVector(rdense.Data, -1.0, odense.Data);
}
else
{
CommonParallel.For(
0,
Data.Length,
index => result[index] = this.Data[index] - other[index]);
}
}
}
@ -641,9 +653,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
throw new ArgumentException(Resources.ArgumentVectorsSameLength, "rightSide");
}
var ret = leftSide.Clone();
ret.Subtract(rightSide);
return ret;
return leftSide.Subtract(rightSide);
}
/// <summary>
@ -722,9 +732,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
throw new ArgumentNullException("leftSide");
}
var ret = (DenseVector)leftSide.Clone();
ret.Multiply(rightSide);
return ret;
return (DenseVector) leftSide.Multiply(rightSide);
}
/// <summary>

25
src/Numerics/LinearAlgebra/Double/Vector.cs

@ -261,8 +261,10 @@ namespace MathNet.Numerics.LinearAlgebra.Double
}
else
{
CopyTo(result);
result.Add(other);
CommonParallel.For(
0,
Count,
index => result[index] = this[index] + other[index]);
}
}
@ -408,14 +410,16 @@ namespace MathNet.Numerics.LinearAlgebra.Double
if (ReferenceEquals(this, result) || ReferenceEquals(other, result))
{
var tmp = result.CreateVector(result.Count);
Subtract(other, tmp);
var tmp = Subtract(other);
tmp.CopyTo(result);
}
else
{
CopyTo(result);
result.Subtract(other);
CommonParallel.For(
0,
Count,
index => result[index] = this[index] - other[index]);
}
}
@ -635,11 +639,10 @@ namespace MathNet.Numerics.LinearAlgebra.Double
}
else
{
CopyTo(result);
CommonParallel.For(
0,
Count,
index => result[index] *= other[index]);
index => result[index] = this[index] * other[index]);
}
}
@ -708,11 +711,10 @@ namespace MathNet.Numerics.LinearAlgebra.Double
}
else
{
CopyTo(result);
CommonParallel.For(
0,
Count,
index => result[index] /= other[index]);
index => result[index] = this[index] / other[index]);
}
}
@ -1190,13 +1192,14 @@ namespace MathNet.Numerics.LinearAlgebra.Double
}
var norm = Norm(p);
var clone = Clone();
var clone = this.Clone();
if (norm == 0.0)
{
return clone;
}
clone.Multiply(1.0 / norm);
clone.Multiply(1.0 / norm, clone);
return clone;
}

5
src/UnitTests/LinearAlgebraTests/Double/DenseVectorTests.cs

@ -153,7 +153,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
{
var vector = new DenseVector(this._data);
var other = +vector;
Assert.AreSame(vector, other, "Should be the same vector");
for (var i = 0; i < this._data.Length; i++)
{
Assert.AreEqual(vector[i], other[i]);
}
}
[Test]

Loading…
Cancel
Save