1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.apache.commons.math4.legacy.optim.univariate; 18 19 import org.apache.commons.math4.legacy.exception.NumberIsTooLargeException; 20 import org.apache.commons.math4.legacy.exception.OutOfRangeException; 21 import org.apache.commons.math4.legacy.optim.OptimizationData; 22 23 /** 24 * Search interval and (optional) start value. 25 * <br> 26 * Immutable class. 27 * 28 * @since 3.1 29 */ 30 public class SearchInterval implements OptimizationData { 31 /** Lower bound. */ 32 private final double lower; 33 /** Upper bound. */ 34 private final double upper; 35 /** Start value. */ 36 private final double start; 37 38 /** 39 * @param lo Lower bound. 40 * @param hi Upper bound. 41 * @param init Start value. 42 * @throws NumberIsTooLargeException if {@code lo >= hi}. 43 * @throws OutOfRangeException if {@code init < lo} or {@code init > hi}. 44 */ 45 public SearchInterval(double lo, 46 double hi, 47 double init) { 48 if (lo >= hi) { 49 throw new NumberIsTooLargeException(lo, hi, false); 50 } 51 if (init < lo || 52 init > hi) { 53 throw new OutOfRangeException(init, lo, hi); 54 } 55 56 lower = lo; 57 upper = hi; 58 start = init; 59 } 60 61 /** 62 * @param lo Lower bound. 63 * @param hi Upper bound. 64 * @throws NumberIsTooLargeException if {@code lo >= hi}. 65 */ 66 public SearchInterval(double lo, 67 double hi) { 68 this(lo, hi, 0.5 * (lo + hi)); 69 } 70 71 /** 72 * Gets the lower bound. 73 * 74 * @return the lower bound. 75 */ 76 public double getMin() { 77 return lower; 78 } 79 /** 80 * Gets the upper bound. 81 * 82 * @return the upper bound. 83 */ 84 public double getMax() { 85 return upper; 86 } 87 /** 88 * Gets the start value. 89 * 90 * @return the start value. 91 */ 92 public double getStartValue() { 93 return start; 94 } 95 }