001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package org.apache.commons.math.analysis; 019 020 import org.apache.commons.math.FunctionEvaluationException; 021 import org.apache.commons.math.util.FastMath; 022 023 024 025 /** 026 * Base class for {@link BivariateRealFunction} that can be composed with other functions. 027 * 028 * @since 2.1 029 * @version $Revision: 1073498 $ $Date: 2011-02-22 21:57:26 +0100 (mar. 22 f??vr. 2011) $ 030 * @deprecated in 2.2 031 */ 032 @Deprecated 033 public abstract class BinaryFunction implements BivariateRealFunction { 034 035 /** The + operator method wrapped as a {@link BinaryFunction}. */ 036 public static final BinaryFunction ADD = new BinaryFunction() { 037 /** {@inheritDoc} */ 038 @Override 039 public double value(double x, double y) { 040 return x + y; 041 } 042 }; 043 044 /** The - operator method wrapped as a {@link BinaryFunction}. */ 045 public static final BinaryFunction SUBTRACT = new BinaryFunction() { 046 /** {@inheritDoc} */ 047 @Override 048 public double value(double x, double y) { 049 return x - y; 050 } 051 }; 052 053 /** The * operator method wrapped as a {@link BinaryFunction}. */ 054 public static final BinaryFunction MULTIPLY = new BinaryFunction() { 055 /** {@inheritDoc} */ 056 @Override 057 public double value(double x, double y) { 058 return x * y; 059 } 060 }; 061 062 /** The / operator method wrapped as a {@link BinaryFunction}. */ 063 public static final BinaryFunction DIVIDE = new BinaryFunction() { 064 /** {@inheritDoc} */ 065 @Override 066 public double value(double x, double y) { 067 return x / y; 068 } 069 }; 070 071 /** The {@code FastMath.pow} method wrapped as a {@link BinaryFunction}. */ 072 public static final BinaryFunction POW = new BinaryFunction() { 073 /** {@inheritDoc} */ 074 @Override 075 public double value(double x, double y) { 076 return FastMath.pow(x, y); 077 } 078 }; 079 080 /** The {@code FastMath.atan2} method wrapped as a {@link BinaryFunction}. */ 081 public static final BinaryFunction ATAN2 = new BinaryFunction() { 082 /** {@inheritDoc} */ 083 @Override 084 public double value(double x, double y) { 085 return FastMath.atan2(x, y); 086 } 087 }; 088 089 /** {@inheritDoc} */ 090 public abstract double value(double x, double y) throws FunctionEvaluationException; 091 092 /** Get a composable function by fixing the first argument of the instance. 093 * @param fixedX fixed value of the first argument 094 * @return a function such that {@code f.value(y) == value(fixedX, y)} 095 */ 096 public ComposableFunction fix1stArgument(final double fixedX) { 097 return new ComposableFunction() { 098 @Override 099 /** {@inheritDoc} */ 100 public double value(double x) throws FunctionEvaluationException { 101 return BinaryFunction.this.value(fixedX, x); 102 } 103 }; 104 } 105 106 /** Get a composable function by fixing the second argument of the instance. 107 * @param fixedY fixed value of the second argument 108 * @return a function such that {@code f.value(x) == value(x, fixedY)} 109 */ 110 public ComposableFunction fix2ndArgument(final double fixedY) { 111 return new ComposableFunction() { 112 @Override 113 /** {@inheritDoc} */ 114 public double value(double x) throws FunctionEvaluationException { 115 return BinaryFunction.this.value(x, fixedY); 116 } 117 }; 118 } 119 120 }