Browse Source

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

la-knuth
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 else
{ {
CopyTo(result); var rdense = result as DenseVector;
result.Subtract(other); 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"); throw new ArgumentException(Resources.ArgumentVectorsSameLength, "rightSide");
} }
var ret = leftSide.Clone(); return leftSide.Subtract(rightSide);
ret.Subtract(rightSide);
return ret;
} }
/// <summary> /// <summary>
@ -722,9 +732,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
throw new ArgumentNullException("leftSide"); throw new ArgumentNullException("leftSide");
} }
var ret = (DenseVector)leftSide.Clone(); return (DenseVector) leftSide.Multiply(rightSide);
ret.Multiply(rightSide);
return ret;
} }
/// <summary> /// <summary>

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

@ -261,8 +261,10 @@ namespace MathNet.Numerics.LinearAlgebra.Double
} }
else else
{ {
CopyTo(result); CommonParallel.For(
result.Add(other); 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)) if (ReferenceEquals(this, result) || ReferenceEquals(other, result))
{ {
var tmp = result.CreateVector(result.Count); var tmp = Subtract(other);
Subtract(other, tmp);
tmp.CopyTo(result); tmp.CopyTo(result);
} }
else else
{ {
CopyTo(result); 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 else
{ {
CopyTo(result);
CommonParallel.For( CommonParallel.For(
0, 0,
Count, Count,
index => result[index] *= other[index]); index => result[index] = this[index] * other[index]);
} }
} }
@ -708,11 +711,10 @@ namespace MathNet.Numerics.LinearAlgebra.Double
} }
else else
{ {
CopyTo(result);
CommonParallel.For( CommonParallel.For(
0, 0,
Count, 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 norm = Norm(p);
var clone = Clone(); var clone = this.Clone();
if (norm == 0.0) if (norm == 0.0)
{ {
return clone; return clone;
} }
clone.Multiply(1.0 / norm); clone.Multiply(1.0 / norm, clone);
return 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 vector = new DenseVector(this._data);
var other = +vector; 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] [Test]

Loading…
Cancel
Save