PolynomialFunctionMatrix.java
/* Copyright 2002-2019 CS Systèmes d'Information
* Licensed to CS Systèmes d'Information (CS) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* CS licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.orekit.propagation.semianalytical.dsst.utilities.hansen;
import org.hipparchus.analysis.polynomials.PolynomialFunction;
/**
* A quadratic matrix of
* {@link org.hipparchus.analysis.polynomials.PolynomialFunction}.
*
* @author Petre Bazavan
* @author Lucian Barbulescu
*/
public class PolynomialFunctionMatrix {
/** The order of the matrix. */
private int order;
/** The elements of the matrix. */
private PolynomialFunction elements[][];
/**
* Create a matrix.
*
* <p>
* All elements are null
*
* @param order
* the order of the matrix
*/
PolynomialFunctionMatrix(final int order) {
this.order = order;
this.elements = new PolynomialFunction[order][order];
}
/**
* Set an element of the matrix.
*
* @param line
* the line
* @param column
* the column
* @param value
* the value
*/
public void setElem(final int line, final int column, final PolynomialFunction value) {
elements[line][column] = value;
}
/**
* Get the value of an element.
*
* @param line
* the line
* @param column
* the column
* @return the value
*/
public PolynomialFunction getElem(final int line, final int column) {
return elements[line][column];
}
/**
* Multiply the argument matrix with the current matrix.
*
* @param matrix
* the argument matrix
* @return the result of the multiplication
*/
public PolynomialFunctionMatrix multiply(final PolynomialFunctionMatrix matrix) {
final PolynomialFunctionMatrix result = new PolynomialFunctionMatrix(order);
for (int i = 0; i < order; i++) {
for (int j = 0; j < order; j++) {
PolynomialFunction cc = HansenUtilities.ZERO;
for (int k = 0; k < order; k++) {
cc = cc.add(matrix.getElem(i, k).multiply(elements[k][j]));
}
result.setElem(i, j, cc);
}
}
return result;
}
/**
* Set values for all elements.
*
* @param polynomials
* the values that will be used for the matrix
*/
public void setMatrix(final PolynomialFunction[][] polynomials) {
elements = polynomials.clone();
}
/**
* Set the value of a line of the matrix.
*
* @param line
* the line number
* @param polynomials
* the values to set
*/
public void setMatrixLine(final int line, final PolynomialFunction[] polynomials) {
elements[line] = polynomials;
}
/**
* Get a line of the matrix.
*
* @param line
* the line number
* @return the line of the matrix as a vector
*/
public PolynomialFunction[] getMatrixLine(final int line) {
return elements[line].clone();
}
/**
* Add the argument matrix with the current matrix.
*
* @param matrix
* the argument matrix
* @return the result of the addition
*/
public PolynomialFunctionMatrix add(final PolynomialFunctionMatrix matrix) {
final PolynomialFunctionMatrix c = new PolynomialFunctionMatrix(order);
for (int i = 0; i < order; i++) {
for (int j = 0; j < order; j++) {
c.setElem(i, j, elements[i][j].add(matrix.getElem(i, j)));
}
}
return c;
}
}