public double evaluate(double x) { return Math.log(x * x + 1) - Math.exp(0.4 * x) * Math.cos(Math.PI * x); }
public double evaluate_1(double x) { return (2 * x / x * x + 1) - 0.4 * Math.exp(0.4 * x) * Math.cos(Math.PI * x) + Math.PI * Math.exp(0.4 * x) * Math.sin(Math.PI * x); }
/** * Computes the output property. A {@link java.beans.PropertyChangeEvent} is fired for the output * property if it differs from the previous value. * * @throws VisADException if a VisAD failure occurs. * @throws RemoteException if a Java RMI exception occurs. */ void clock() throws VisADException, RemoteException { Set domainSet = buoyProfile.getDomainSet(); Real oldLfc; Real newLfc; double[] pressures = domainSet.getDoubles()[0]; float[] buoys = buoyProfile.getFloats()[0]; /* Eliminate non-finite pressures and buoyancies. */ int n = 0; for (int i = 0; i < pressures.length; i++) { if ((pressures[i] != pressures[i]) || (buoys[i] != buoys[i])) { n++; } } if (n > 0) { double[] tmpPres = new double[pressures.length - n]; float[] tmpBuoy = new float[tmpPres.length]; n = 0; for (int i = 0; i < pressures.length; i++) { if ((pressures[i] != pressures[i]) || (buoys[i] != buoys[i])) { continue; } tmpPres[n] = pressures[i]; tmpBuoy[n] = buoys[i]; n++; } pressures = tmpPres; buoys = tmpBuoy; } if (pressures.length <= 1) { newLfc = missingLfc; } else { Unit presUnit = domainSet.getSetUnits()[0]; boolean ascending = pressures[0] > pressures[1]; if (!ascending) { /* * The profile is descending. Make the temporary value arrays * ascending. */ for (int i = 0, j = pressures.length; i < pressures.length / 2; i++) { --j; double pres = pressures[i]; pressures[i] = pressures[j]; pressures[j] = pres; float buoy = buoys[i]; buoys[i] = buoys[j]; buoys[j] = buoy; } } /* * Descend from the top to positive buoyancy. */ int i = buoys.length; while ((--i >= 0) && (buoys[i] <= 0)) ; if (i < 0) { /* * There is no positively buoyant region. */ newLfc = missingLfc; } else { /* * Descend to first non-positive buoyant region. */ while ((--i >= 0) && (buoys[i] > 0)) ; if (i < 0) { /* * There is no non-positive buoyant region. */ newLfc = missingLfc; } else { /* * Interpolate the LFC. */ double pressure = pressures[i + 1] / Math.exp( buoys[i + 1] * (Math.log(pressures[i] / pressures[i + 1]) / (buoys[i] - buoys[i + 1]))); newLfc = new Real((RealType) missingLfc.getType(), pressure, presUnit); } } } synchronized (this) { oldLfc = lfc; lfc = newLfc; } firePropertyChange(OUTPUT_PROPERTY_NAME, oldLfc, newLfc); }