public LinearModel(Matrix<double> designMatrix, Matrix<double> contrastValues, QrFactorizationCache.CacheEntry cacheEntry) { DesignMatrix = ImmutableMatrix.OfMatrix(designMatrix); ContrastValues = ImmutableMatrix.OfMatrix(contrastValues); QrFactorization = cacheEntry.QrFactorization; MatrixCrossproductInverse = cacheEntry.MatrixCrossproductInverse; }
public static LinearModel CreateModel(QrFactorizationCache cache, Matrix<double> designMatrix, Matrix<double> contrastValues, double tolerance) { if (contrastValues.ColumnCount != designMatrix.ColumnCount) { throw new ArgumentException("Wrong number of columns"); // Not L10N } var cacheEntry = cache.GetQrFactorization(designMatrix, tolerance); return new LinearModel(designMatrix, contrastValues, cacheEntry); }
public IList<LinearFitResult> PerformLinearFit(QrFactorizationCache cache) { var linearModel = LinearModel.CreateModel(cache, DenseMatrix.OfColumnArrays(_matrixColumns), DenseMatrix.OfColumnArrays(_contrastValues), 1E-7); return linearModel.Fit(DataSet.Abundances.ToArray()); }