Код: Выделить всё
private LUDecomposition buildMatrices(int dataSize, double lambda, int filterOrder) {
RealMatrix identityMatrix = MatrixUtils.createRealMatrix(dataSize, dataSize);
RealMatrix orderMatrix = MatrixUtils.createRealMatrix(dataSize - filterOrder, dataSize);
for (int i = 0; i < dataSize; i++) {
identityMatrix.setEntry(i, i, 1);
if (i < dataSize - filterOrder) {
switch (filterOrder) {
case 1:
orderMatrix.setEntry(i, i, -1);
orderMatrix.setEntry(i, i + 1, 1);
break;
case 2:
default:
orderMatrix.setEntry(i, i, 1);
orderMatrix.setEntry(i, i + 1, -2);
orderMatrix.setEntry(i, i + 2, 1);
break;
}
}
}
RealMatrix A = orderMatrix.transpose().scalarMultiply(lambda).multiply(orderMatrix).add(identityMatrix);
return new LUDecomposition(A);
}
Код: Выделить всё
private void calculateWhittakerSegment(int endIndex, int period) {
RealVector measValues = new ArrayRealVector(
ArrayUtils.subarray(data.getYValues(), endIndex - period, endIndex));
RealVector y = luDecomposition.getP().multiply(MatrixUtils.inverse(luDecomposition.getL())).operate(measValues);
RealVector adjValues = MatrixUtils.inverse(luDecomposition.getU()).operate(y);
}
Результаты 1-го порядка
Но использование фильтра Порядок 2 (уравнение 17 в статье) не дает
результатов 2-го порядка
Я изменил порядок операций при решении для A, но это не привело к каким-либо изменениям результатов.
Подробнее здесь: https://stackoverflow.com/questions/783 ... olve-whitt