Browse Source

Fit: use diagonal matrices where appropritate (since they are much faster now)

optimization-3
Christoph Ruegg 13 years ago
parent
commit
d83566155f
  1. 2
      src/Numerics/Fit.cs
  2. 2
      src/Numerics/LinearRegression/WeightedRegression.cs

2
src/Numerics/Fit.cs

@ -106,7 +106,7 @@ namespace MathNet.Numerics
public static double[] PolynomialWeighted(double[] x, double[] y, double[] w, int order)
{
var design = Matrix<double>.Build.Dense(x.Length, order + 1, (i, j) => Math.Pow(x[i], j));
return WeightedRegression.Weighted(design, Vector<double>.Build.Dense(y), Matrix<double>.Build.DenseOfDiagonalArray(w)).ToArray();
return WeightedRegression.Weighted(design, Vector<double>.Build.Dense(y), Matrix<double>.Build.Diagonal(w.Length, w.Length, w)).ToArray();
}
/// <summary>

2
src/Numerics/LinearRegression/WeightedRegression.cs

@ -65,7 +65,7 @@ namespace MathNet.Numerics.LinearRegression
predictor = predictor.InsertColumn(0, Vector<T>.Build.Dense(predictor.RowCount, Vector<T>.One));
}
var response = Vector<T>.Build.Dense(y);
var weights = Matrix<T>.Build.DenseOfDiagonalArray(w);
var weights = Matrix<T>.Build.Diagonal(w.Length, w.Length, w);
return predictor.TransposeThisAndMultiply(weights*predictor).Cholesky().Solve(predictor.TransposeThisAndMultiply(weights*response)).ToArray();
}

Loading…
Cancel
Save