| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF 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.apache.commons.math.optimization.fitting; |
| |
| import org.apache.commons.math.analysis.DifferentiableUnivariateRealFunction; |
| import org.apache.commons.math.util.FastMath; |
| |
| /** Harmonic function of the form <code>f (t) = a cos (ω t + φ)</code>. |
| * @version $Revision: 990655 $ $Date: 2010-08-29 23:49:40 +0200 (dim. 29 août 2010) $ |
| * @since 2.0 |
| */ |
| public class HarmonicFunction implements DifferentiableUnivariateRealFunction { |
| |
| /** Amplitude a. */ |
| private final double a; |
| |
| /** Pulsation ω. */ |
| private final double omega; |
| |
| /** Phase φ. */ |
| private final double phi; |
| |
| /** Simple constructor. |
| * @param a amplitude |
| * @param omega pulsation |
| * @param phi phase |
| */ |
| public HarmonicFunction(double a, double omega, double phi) { |
| this.a = a; |
| this.omega = omega; |
| this.phi = phi; |
| } |
| |
| /** {@inheritDoc} */ |
| public double value(double x) { |
| return a * FastMath.cos(omega * x + phi); |
| } |
| |
| /** {@inheritDoc} */ |
| public HarmonicFunction derivative() { |
| return new HarmonicFunction(a * omega, omega, phi + FastMath.PI / 2); |
| } |
| |
| /** Get the amplitude a. |
| * @return amplitude a; |
| */ |
| public double getAmplitude() { |
| return a; |
| } |
| |
| /** Get the pulsation ω. |
| * @return pulsation ω |
| */ |
| public double getPulsation() { |
| return omega; |
| } |
| |
| /** Get the phase φ. |
| * @return phase φ |
| */ |
| public double getPhase() { |
| return phi; |
| } |
| |
| } |