List of usage examples for org.apache.commons.math.complex Complex getImaginary
public double getImaginary()
From source file:rb.app.ComplexRBSystem.java
@Override public float[][][] get_sweep_truth_sol() { int N = RB_sweep_solution[0][0].length; int numSweep = RB_sweep_solution.length; Complex[][] RB_sweep_sol = new Complex[numSweep][N]; for (int i = 0; i < numSweep; i++) for (int j = 0; j < N; j++) RB_sweep_sol[i][j] = new Complex(RB_sweep_solution[i][0][j], RB_sweep_solution[i][1][j]); float[][][] truth_sol = new float[get_mfield()][3][get_calN() * numSweep]; for (int ifn = 0; ifn < get_mfield(); ifn++) { Complex tmpval; for (int iSweep = 0; iSweep < numSweep; iSweep++) { for (int i = 0; i < get_calN(); i++) { tmpval = new Complex(0., 0.); for (int j = 0; j < N; j++) tmpval = tmpval.add(Z_vector[ifn][j][i].multiply(RB_sweep_sol[iSweep][j])); truth_sol[ifn][0][iSweep * get_calN() + i] = (float) tmpval.getReal(); truth_sol[ifn][1][iSweep * get_calN() + i] = (float) tmpval.getImaginary(); }/*from w w w . j a v a2s. co m*/ } if (get_Q_uL() > 0) { for (int q_uL = 0; q_uL < get_Q_uL(); q_uL++) for (int iSweep = 0; iSweep < numSweep; iSweep++) for (int i = 0; i < get_calN(); i++) { truth_sol[ifn][0][iSweep * get_calN() + i] += uL_vector[q_uL][i].getReal(); truth_sol[ifn][1][iSweep * get_calN() + i] += uL_vector[q_uL][i].getImaginary(); } } for (int i = 0; i < get_calN() * numSweep; i++) truth_sol[ifn][2][i] = (float) Math.sqrt( truth_sol[ifn][0][i] * truth_sol[ifn][0][i] + truth_sol[ifn][1][i] * truth_sol[ifn][1][i]); } return truth_sol; }
From source file:rb.app.RBnSCMCSystem.java
public double get_SCM_LB() { //return 0.01; double min_J_obj = 0.; double[] min_Jlocal_obj = new double[n_mubar]; // Sort the indices of mu_bar based on distance from current_parameters List<Integer> sortedmubarIndices = getSorted_CJ_Indices(mu_bar); int icount = 0; //while ((min_J_obj<=0) && (icount < sortedmubarIndices.size())){ while ((min_J_obj <= 0) && (icount < sortedmubarIndices.size())) { int imubar = sortedmubarIndices.get(icount); // First, declare the constraints Collection constraints = new ArrayList(); // Add bounding box constraints for the get_Q_a() variables for (int q = 0; q < get_Q_a(); q++) { double[] index = new double[get_Q_a() * 2]; index[q] = 1.;// w w w .j a v a 2s . c o m constraints.add(new LinearConstraint(index, Relationship.GEQ, B_min[q] / beta_bar[imubar])); constraints.add(new LinearConstraint(index, Relationship.LEQ, B_max[q] / beta_bar[imubar])); index[q] = 0.; index[q + get_Q_a()] = 1.; constraints.add(new LinearConstraint(index, Relationship.GEQ, B_min[q] / beta_bar[imubar])); constraints.add(new LinearConstraint(index, Relationship.LEQ, B_max[q] / beta_bar[imubar])); } // Save the current_parameters since we'll change them in the loop below save_current_parameters(); // Add the constraint rows if (n_muhat[imubar] > 0) { for (int imuhat = 0; imuhat < n_muhat[imubar]; imuhat++) { current_parameters = mu_hat[imubar].get(imuhat); double[] constraint_row = new double[get_Q_a() * 2]; for (int q = 0; q < get_Q_a(); q++) { Complex theta_q_a = complex_eval_theta_q_a(q); constraint_row[q] = theta_q_a.getReal() * beta_bar[imubar]; constraint_row[q + get_Q_a()] = theta_q_a.getImaginary() * beta_bar[imubar]; } constraints .add(new LinearConstraint(constraint_row, Relationship.GEQ, beta_hat[imubar][imuhat])); } } // Now load the original parameters back into current_parameters // in order to set the coefficients of the objective function reload_current_parameters(); // Create objective function object double[] objectiveFn = new double[get_Q_a() * 2]; for (int q = 0; q < get_Q_a(); q++) { Complex theta_q_a = complex_eval_theta_q_a(q); objectiveFn[q] = theta_q_a.getReal() * beta_bar[imubar]; objectiveFn[q + get_Q_a()] = theta_q_a.getImaginary() * beta_bar[imubar]; } LinearObjectiveFunction f = new LinearObjectiveFunction(objectiveFn, 0.); try { SimplexSolver solver = new SimplexSolver(1e-6); RealPointValuePair opt_pair = solver.optimize(f, constraints, GoalType.MINIMIZE, false); min_Jlocal_obj[icount] = opt_pair.getValue(); } catch (OptimizationException e) { Log.e("RBSCMSYSTEM_TAG", "Optimal solution not found"); e.printStackTrace(); } catch (Exception e) { Log.e("RBSCMSYSTEM_TAG", "Exception occurred during SCM_LB calculation"); e.printStackTrace(); } min_J_obj = min_J_obj > min_Jlocal_obj[icount] ? min_J_obj : min_Jlocal_obj[icount]; icount++; } return min_J_obj; }
From source file:uk.ac.diamond.scisoft.analysis.dataset.ComplexDoubleDataset.java
/** * Set values at absolute index in the internal array. * /*w w w.ja v a 2s . c o m*/ * This is an internal method with no checks so can be dangerous. Use with care or ideally with an iterator. * @param index absolute index * @param val new values */ @SuppressWarnings("cast") public void setAbs(final int index, final Complex val) { setAbs(index, (double) val.getReal(), (double) val.getImaginary()); // PRIM_TYPE }
From source file:uk.ac.diamond.scisoft.analysis.dataset.ComplexDoubleDataset.java
@Override public ComplexDoubleDataset ipower(final Object b) { if (b instanceof AbstractDataset) { AbstractDataset bds = (AbstractDataset) b; checkCompatibility(bds);/*from ww w . java 2s .c om*/ IndexIterator it1 = getIterator(); IndexIterator it2 = bds.getIterator(); switch (bds.getDtype()) { case COMPLEX64: case COMPLEX128: while (it1.hasNext() && it2.hasNext()) { final Complex zv = new Complex(bds.getElementDoubleAbs(it2.index), bds.getElementDoubleAbs(it2.index + 1)); final Complex zd = new Complex(data[it1.index], data[it1.index + 1]).pow(zv); data[it1.index] = zd.getReal(); // ADD_CAST data[it1.index + 1] = zd.getImaginary(); // ADD_CAST } break; default: while (it1.hasNext() && it2.hasNext()) { final Complex zv = new Complex(bds.getElementDoubleAbs(it2.index), 0); final Complex zd = new Complex(data[it1.index], data[it1.index + 1]).pow(zv); data[it1.index] = zd.getReal(); // ADD_CAST data[it1.index + 1] = zd.getImaginary(); // ADD_CAST } break; } } else { final Complex zv = new Complex(toReal(b), toImag(b)); IndexIterator it1 = getIterator(); while (it1.hasNext()) { Complex zd = new Complex(data[it1.index], data[it1.index + 1]).pow(zv); data[it1.index] = zd.getReal(); // ADD_CAST data[it1.index + 1] = zd.getImaginary(); // ADD_CAST } } setDirty(); return this; }
From source file:uk.ac.diamond.scisoft.analysis.dataset.ComplexDoubleDataset.java
@Override public double residual(final Object b) { double sum = 0; if (b instanceof AbstractDataset) { AbstractDataset bds = (AbstractDataset) b; checkCompatibility(bds);//from ww w . j av a 2 s .c o m IndexIterator it1 = getIterator(); IndexIterator it2 = bds.getIterator(); double comp = 0; switch (bds.getDtype()) { case COMPLEX64: case COMPLEX128: while (it1.hasNext() && it2.hasNext()) { double diff, err, temp; diff = data[it1.index] - bds.getElementDoubleAbs(it2.index); err = diff * diff - comp; temp = sum + err; comp = (temp - sum) - err; sum = temp; diff = data[it1.index + 1] - bds.getElementDoubleAbs(it2.index + 1); err = diff * diff - comp; temp = sum + err; comp = (temp - sum) - err; sum = temp; } break; default: while (it1.hasNext() && it2.hasNext()) { final double diff = data[it1.index] - bds.getElementDoubleAbs(it2.index); final double err = diff * diff - comp; final double temp = sum + err; comp = (temp - sum) - err; sum = temp; } break; } } else { final Complex zv = new Complex(toReal(b), toImag(b)); IndexIterator it1 = getIterator(); double comp = 0; while (it1.hasNext()) { double diff, err, temp; diff = data[it1.index] - zv.getReal(); err = diff * diff - comp; temp = sum + err; comp = (temp - sum) - err; sum = temp; diff = data[it1.index + 1] - zv.getImaginary(); err = diff * diff - comp; temp = sum + err; comp = (temp - sum) - err; sum = temp; } } return sum; }
From source file:uk.ac.diamond.scisoft.analysis.dataset.ComplexFloatDataset.java
/** * Set values at absolute index in the internal array. * * This is an internal method with no checks so can be dangerous. Use with care or ideally with an iterator. * @param index absolute index/*w ww.j av a2s . c om*/ * @param val new values */ public void setAbs(final int index, final Complex val) { setAbs(index, (float) val.getReal(), (float) val.getImaginary()); // PRIM_TYPE }
From source file:uk.ac.diamond.scisoft.analysis.dataset.ComplexFloatDataset.java
@Override public ComplexFloatDataset ipower(final Object b) { if (b instanceof AbstractDataset) { AbstractDataset bds = (AbstractDataset) b; checkCompatibility(bds);// ww w . j a v a 2 s . com IndexIterator it1 = getIterator(); IndexIterator it2 = bds.getIterator(); switch (bds.getDtype()) { case COMPLEX64: case COMPLEX128: while (it1.hasNext() && it2.hasNext()) { final Complex zv = new Complex(bds.getElementDoubleAbs(it2.index), bds.getElementDoubleAbs(it2.index + 1)); final Complex zd = new Complex(data[it1.index], data[it1.index + 1]).pow(zv); data[it1.index] = (float) zd.getReal(); // ADD_CAST data[it1.index + 1] = (float) zd.getImaginary(); // ADD_CAST } break; default: while (it1.hasNext() && it2.hasNext()) { final Complex zv = new Complex(bds.getElementDoubleAbs(it2.index), 0); final Complex zd = new Complex(data[it1.index], data[it1.index + 1]).pow(zv); data[it1.index] = (float) zd.getReal(); // ADD_CAST data[it1.index + 1] = (float) zd.getImaginary(); // ADD_CAST } break; } } else { final Complex zv = new Complex(toReal(b), toImag(b)); IndexIterator it1 = getIterator(); while (it1.hasNext()) { Complex zd = new Complex(data[it1.index], data[it1.index + 1]).pow(zv); data[it1.index] = (float) zd.getReal(); // ADD_CAST data[it1.index + 1] = (float) zd.getImaginary(); // ADD_CAST } } setDirty(); return this; }
From source file:uk.ac.diamond.scisoft.analysis.dataset.Maths.java
/** * @param a/*from w w w . j a v a2 s . c om*/ * @param b * @return a**b, raise a to power of b */ public static AbstractDataset power(final Object a, final Object b) { AbstractDataset result = null; final int is; if (a instanceof AbstractDataset) { if (b instanceof AbstractDataset) { return power((AbstractDataset) a, (AbstractDataset) b); } final AbstractDataset ds = (AbstractDataset) a; final int dt = AbstractDataset.getBestDType(ds.getDtype(), AbstractDataset.getDTypeFromClass(b.getClass())); result = AbstractDataset.zeros(ds, dt); final IndexIterator it1 = ds.getIterator(); double dvr, dvi; dvr = AbstractDataset.toReal(b); switch (dt) { case AbstractDataset.INT8: final byte[] i8data = ((ByteDataset) result).getData(); for (int i = 0; it1.hasNext();) { i8data[i++] = (byte) Math.pow(ds.getElementDoubleAbs(it1.index), dvr); } break; case AbstractDataset.INT16: final short[] i16data = ((ShortDataset) result).getData(); for (int i = 0; it1.hasNext();) { i16data[i++] = (short) Math.pow(ds.getElementDoubleAbs(it1.index), dvr); } break; case AbstractDataset.INT32: final int[] i32data = ((IntegerDataset) result).getData(); for (int i = 0; it1.hasNext();) { i32data[i++] = (int) Math.pow(ds.getElementDoubleAbs(it1.index), dvr); } break; case AbstractDataset.INT64: final long[] i64data = ((LongDataset) result).getData(); for (int i = 0; it1.hasNext();) { i64data[i++] = (long) Math.pow(ds.getElementDoubleAbs(it1.index), dvr); } break; case AbstractDataset.ARRAYINT8: is = result.getElementsPerItem(); final byte[] ai8data = ((CompoundByteDataset) result).getData(); for (int i = 0; it1.hasNext();) { for (int j = 0; j < is; j++) { ai8data[i++] = (byte) Math.pow(ds.getElementDoubleAbs(it1.index + j), dvr); } } break; case AbstractDataset.ARRAYINT16: is = result.getElementsPerItem(); final short[] ai16data = ((CompoundShortDataset) result).getData(); for (int i = 0; it1.hasNext();) { for (int j = 0; j < is; j++) { ai16data[i++] = (short) Math.pow(ds.getElementDoubleAbs(it1.index + j), dvr); } } break; case AbstractDataset.ARRAYINT32: is = result.getElementsPerItem(); final int[] ai32data = ((CompoundIntegerDataset) result).getData(); for (int i = 0; it1.hasNext();) { for (int j = 0; j < is; j++) { ai32data[i++] = (int) Math.pow(ds.getElementDoubleAbs(it1.index + j), dvr); } } break; case AbstractDataset.ARRAYINT64: is = result.getElementsPerItem(); final long[] ai64data = ((CompoundLongDataset) result).getData(); for (int i = 0; it1.hasNext();) { for (int j = 0; j < is; j++) { ai64data[i++] = (long) Math.pow(ds.getElementDoubleAbs(it1.index + j), dvr); } } break; case AbstractDataset.FLOAT32: dvi = AbstractDataset.toImag(b); if (dvi == 0) { final float[] f32data = ((FloatDataset) result).getData(); for (int i = 0; it1.hasNext();) { f32data[i++] = (float) Math.pow(ds.getElementDoubleAbs(it1.index), dvr); } } else { result = new ComplexFloatDataset(ds.getShape()); final float[] c64data = ((ComplexFloatDataset) result).getData(); final Complex p = new Complex(dvr, dvi); for (int i = 0; it1.hasNext();) { Complex tz = new Complex(ds.getElementDoubleAbs(it1.index), ds.getElementDoubleAbs(it1.index + 1)).pow(p); c64data[i++] = (float) tz.getReal(); c64data[i++] = (float) tz.getImaginary(); } } break; case AbstractDataset.FLOAT64: dvi = AbstractDataset.toImag(b); if (dvi == 0) { result = new DoubleDataset(ds.getShape()); final double[] f64data = ((DoubleDataset) result).getData(); for (int i = 0; it1.hasNext();) { f64data[i++] = Math.pow(ds.getElementDoubleAbs(it1.index), dvr); } } else { result = new ComplexDoubleDataset(ds.getShape()); final double[] c128data = ((ComplexDoubleDataset) result).getData(); final Complex p = new Complex(dvr, dvi); for (int i = 0; it1.hasNext();) { Complex tz = new Complex(ds.getElementDoubleAbs(it1.index), ds.getElementDoubleAbs(it1.index + 1)).pow(p); c128data[i++] = tz.getReal(); c128data[i++] = tz.getImaginary(); } } break; case AbstractDataset.ARRAYFLOAT32: is = result.getElementsPerItem(); final float[] a32data = ((CompoundFloatDataset) result).getData(); for (int i = 0; it1.hasNext();) { for (int j = 0; j < is; j++) { a32data[i++] = (float) Math.pow(ds.getElementDoubleAbs(it1.index + j), dvr); } } break; case AbstractDataset.ARRAYFLOAT64: is = result.getElementsPerItem(); final double[] a64data = ((CompoundDoubleDataset) result).getData(); for (int i = 0; it1.hasNext();) { for (int j = 0; j < is; j++) { a64data[i++] = Math.pow(ds.getElementDoubleAbs(it1.index + j), dvr); } } break; case AbstractDataset.COMPLEX64: dvi = AbstractDataset.toImag(b); final float[] c64data = ((ComplexFloatDataset) result).getData(); final Complex p64 = new Complex(dvr, dvi); for (int i = 0; it1.hasNext();) { Complex tz = new Complex(ds.getElementDoubleAbs(it1.index), ds.getElementDoubleAbs(it1.index + 1)).pow(p64); c64data[i++] = (float) tz.getReal(); c64data[i++] = (float) tz.getImaginary(); } break; case AbstractDataset.COMPLEX128: dvi = AbstractDataset.toImag(b); final double[] c128data = ((ComplexDoubleDataset) result).getData(); final Complex p128 = new Complex(dvr, dvi); for (int i = 0; it1.hasNext();) { Complex tz = new Complex(ds.getElementDoubleAbs(it1.index), ds.getElementDoubleAbs(it1.index + 1)).pow(p128); c128data[i++] = tz.getReal(); c128data[i++] = tz.getImaginary(); } break; default: throw new UnsupportedOperationException("power does not support this dataset type"); } // set the name based on the changes made result.setName(bracketIfNecessary(ds).append("**").append(b).toString()); } else { if (!(b instanceof AbstractDataset)) { throw new IllegalArgumentException("Both arguments are not datasets"); } final AbstractDataset ds = (AbstractDataset) b; final int dt = AbstractDataset.getBestDType(ds.getDtype(), AbstractDataset.getDTypeFromClass(a.getClass())); result = AbstractDataset.zeros(ds, dt); IndexIterator it1 = ds.getIterator(); double dvr, dvi; dvr = AbstractDataset.toReal(a); switch (dt) { case AbstractDataset.INT8: final byte[] i8data = ((ByteDataset) result).getData(); for (int i = 0; it1.hasNext();) { i8data[i++] = (byte) Math.pow(dvr, ds.getElementDoubleAbs(it1.index)); } break; case AbstractDataset.INT16: final short[] i16data = ((ShortDataset) result).getData(); for (int i = 0; it1.hasNext();) { i16data[i++] = (short) Math.pow(dvr, ds.getElementDoubleAbs(it1.index)); } break; case AbstractDataset.INT32: final int[] i32data = ((IntegerDataset) result).getData(); for (int i = 0; it1.hasNext();) { i32data[i++] = (int) Math.pow(dvr, ds.getElementDoubleAbs(it1.index)); } break; case AbstractDataset.INT64: final long[] i64data = ((LongDataset) result).getData(); for (int i = 0; it1.hasNext();) { i64data[i++] = (long) Math.pow(dvr, ds.getElementDoubleAbs(it1.index)); } break; case AbstractDataset.ARRAYINT8: is = result.getElementsPerItem(); final byte[] ai8data = ((CompoundByteDataset) result).getData(); for (int i = 0; it1.hasNext();) { for (int j = 0; j < is; j++) { ai8data[i++] = (byte) Math.pow(dvr, ds.getElementDoubleAbs(it1.index + j)); } } break; case AbstractDataset.ARRAYINT16: is = result.getElementsPerItem(); final short[] ai16data = ((CompoundShortDataset) result).getData(); for (int i = 0; it1.hasNext();) { for (int j = 0; j < is; j++) { ai16data[i++] = (short) Math.pow(dvr, ds.getElementDoubleAbs(it1.index + j)); } } break; case AbstractDataset.ARRAYINT32: is = result.getElementsPerItem(); final int[] ai32data = ((CompoundIntegerDataset) result).getData(); for (int i = 0; it1.hasNext();) { for (int j = 0; j < is; j++) { ai32data[i++] = (int) Math.pow(dvr, ds.getElementDoubleAbs(it1.index + j)); } } break; case AbstractDataset.ARRAYINT64: is = result.getElementsPerItem(); final long[] ai64data = ((CompoundLongDataset) result).getData(); for (int i = 0; it1.hasNext();) { for (int j = 0; j < is; j++) { ai64data[i++] = (long) Math.pow(dvr, ds.getElementDoubleAbs(it1.index + j)); } } break; case AbstractDataset.FLOAT32: dvi = AbstractDataset.toImag(a); if (dvi == 0) { final float[] f32data = ((FloatDataset) result).getData(); for (int i = 0; it1.hasNext();) { f32data[i++] = (float) Math.pow(dvr, ds.getElementDoubleAbs(it1.index)); } } else { result = new ComplexFloatDataset(ds.getShape()); final float[] c64data = ((ComplexFloatDataset) result).getData(); final Complex b64 = new Complex(dvr, dvi); for (int i = 0; it1.hasNext();) { Complex tz = b64.pow(new Complex(ds.getElementDoubleAbs(it1.index), ds.getElementDoubleAbs(it1.index + 1))); c64data[i++] = (float) tz.getReal(); c64data[i++] = (float) tz.getImaginary(); } } break; case AbstractDataset.FLOAT64: dvi = AbstractDataset.toImag(a); if (dvi == 0) { final double[] f64data = ((DoubleDataset) result).getData(); for (int i = 0; it1.hasNext();) { f64data[i++] = Math.pow(dvr, ds.getElementDoubleAbs(it1.index)); } } else { result = new ComplexDoubleDataset(ds.getShape()); final double[] c128data = ((ComplexDoubleDataset) result).getData(); final Complex b128 = new Complex(dvr, dvi); for (int i = 0; it1.hasNext();) { Complex tz = b128.pow(new Complex(ds.getElementDoubleAbs(it1.index), ds.getElementDoubleAbs(it1.index + 1))); c128data[i++] = tz.getReal(); c128data[i++] = tz.getImaginary(); } } break; case AbstractDataset.ARRAYFLOAT32: is = result.getElementsPerItem(); final float[] a32data = ((CompoundFloatDataset) result).getData(); for (int i = 0; it1.hasNext();) { for (int j = 0; j < is; j++) { a32data[i++] = (float) Math.pow(dvr, ds.getElementDoubleAbs(it1.index + j)); } } break; case AbstractDataset.ARRAYFLOAT64: is = result.getElementsPerItem(); final double[] a64data = ((CompoundDoubleDataset) result).getData(); for (int i = 0; it1.hasNext();) { for (int j = 0; j < is; j++) { a64data[i++] = Math.pow(dvr, ds.getElementDoubleAbs(it1.index + j)); } } break; case AbstractDataset.COMPLEX64: dvi = AbstractDataset.toImag(a); final float[] c64data = ((ComplexFloatDataset) result).getData(); final Complex b64 = new Complex(dvr, dvi); for (int i = 0; it1.hasNext();) { Complex tz = b64.pow( new Complex(ds.getElementDoubleAbs(it1.index), ds.getElementDoubleAbs(it1.index + 1))); c64data[i++] = (float) tz.getReal(); c64data[i++] = (float) tz.getImaginary(); } break; case AbstractDataset.COMPLEX128: dvi = AbstractDataset.toImag(a); final double[] c128data = ((ComplexDoubleDataset) result).getData(); final Complex b128 = new Complex(dvr, dvi); for (int i = 0; it1.hasNext();) { Complex tz = b128.pow( new Complex(ds.getElementDoubleAbs(it1.index), ds.getElementDoubleAbs(it1.index + 1))); c128data[i++] = tz.getReal(); c128data[i++] = tz.getImaginary(); } break; default: throw new UnsupportedOperationException("power does not support this dataset type"); } // set the name based on the changes made result.setName(new StringBuilder(a.toString()).append("**").append(bracketIfNecessary(ds)).toString()); } return result; }
From source file:uk.ac.diamond.scisoft.analysis.dataset.Maths.java
/** * arcsin - evaluate the inverse sine function on each element of the dataset * @param a/*from w w w . ja va 2s.c o m*/ * @return dataset */ @SuppressWarnings("cast") public static AbstractDataset arcsin(final AbstractDataset a) { final int isize; final IndexIterator it = a.getIterator(); AbstractDataset ds; final int dt = a.getDtype(); switch (dt) { case AbstractDataset.INT8: ds = AbstractDataset.zeros(a, AbstractDataset.FLOAT32); final byte[] i8data = ((ByteDataset) a).data; final float[] oi8data = ((FloatDataset) ds).getData(); for (int i = 0; it.hasNext();) { final byte ix = i8data[it.index]; float ox; ox = (float) (Math.asin(ix)); oi8data[i++] = ox; } break; case AbstractDataset.INT16: ds = AbstractDataset.zeros(a, AbstractDataset.FLOAT32); final short[] i16data = ((ShortDataset) a).data; final float[] oi16data = ((FloatDataset) ds).getData(); for (int i = 0; it.hasNext();) { final short ix = i16data[it.index]; float ox; ox = (float) (Math.asin(ix)); oi16data[i++] = ox; } break; case AbstractDataset.INT32: ds = AbstractDataset.zeros(a, AbstractDataset.FLOAT64); final int[] i32data = ((IntegerDataset) a).data; final double[] oi32data = ((DoubleDataset) ds).getData(); for (int i = 0; it.hasNext();) { final int ix = i32data[it.index]; double ox; ox = (double) (Math.asin(ix)); oi32data[i++] = ox; } break; case AbstractDataset.INT64: ds = AbstractDataset.zeros(a, AbstractDataset.FLOAT64); final long[] i64data = ((LongDataset) a).data; final double[] oi64data = ((DoubleDataset) ds).getData(); for (int i = 0; it.hasNext();) { final long ix = i64data[it.index]; double ox; ox = (double) (Math.asin(ix)); oi64data[i++] = ox; } break; case AbstractDataset.ARRAYINT8: ds = AbstractDataset.zeros(a, AbstractDataset.ARRAYFLOAT32); isize = a.getElementsPerItem(); final byte[] ai8data = ((CompoundByteDataset) a).data; final float[] oai8data = ((CompoundFloatDataset) ds).getData(); for (int i = 0; it.hasNext();) { for (int j = 0; j < isize; j++) { final byte ix = ai8data[it.index + j]; float ox; ox = (float) (Math.asin(ix)); oai8data[i++] = ox; } } break; case AbstractDataset.ARRAYINT16: ds = AbstractDataset.zeros(a, AbstractDataset.ARRAYFLOAT32); isize = a.getElementsPerItem(); final short[] ai16data = ((CompoundShortDataset) a).data; final float[] oai16data = ((CompoundFloatDataset) ds).getData(); for (int i = 0; it.hasNext();) { for (int j = 0; j < isize; j++) { final short ix = ai16data[it.index + j]; float ox; ox = (float) (Math.asin(ix)); oai16data[i++] = ox; } } break; case AbstractDataset.ARRAYINT32: ds = AbstractDataset.zeros(a, AbstractDataset.ARRAYFLOAT64); isize = a.getElementsPerItem(); final int[] ai32data = ((CompoundIntegerDataset) a).data; final double[] oai32data = ((CompoundDoubleDataset) ds).getData(); for (int i = 0; it.hasNext();) { for (int j = 0; j < isize; j++) { final int ix = ai32data[it.index + j]; double ox; ox = (double) (Math.asin(ix)); oai32data[i++] = ox; } } break; case AbstractDataset.ARRAYINT64: ds = AbstractDataset.zeros(a, AbstractDataset.ARRAYFLOAT64); isize = a.getElementsPerItem(); final long[] ai64data = ((CompoundLongDataset) a).data; final double[] oai64data = ((CompoundDoubleDataset) ds).getData(); for (int i = 0; it.hasNext();) { for (int j = 0; j < isize; j++) { final long ix = ai64data[it.index + j]; double ox; ox = (double) (Math.asin(ix)); oai64data[i++] = ox; } } break; case AbstractDataset.FLOAT32: ds = AbstractDataset.zeros(a, AbstractDataset.FLOAT32); final float[] f32data = ((FloatDataset) a).data; final float[] of32data = ((FloatDataset) ds).getData(); for (int i = 0; it.hasNext();) { final float ix = f32data[it.index]; float ox; ox = (float) (Math.asin(ix)); of32data[i++] = ox; } break; case AbstractDataset.FLOAT64: ds = AbstractDataset.zeros(a, AbstractDataset.FLOAT64); final double[] f64data = ((DoubleDataset) a).data; final double[] of64data = ((DoubleDataset) ds).getData(); for (int i = 0; it.hasNext();) { final double ix = f64data[it.index]; double ox; ox = (double) (Math.asin(ix)); of64data[i++] = ox; } break; case AbstractDataset.ARRAYFLOAT32: ds = AbstractDataset.zeros(a, AbstractDataset.ARRAYFLOAT32); isize = a.getElementsPerItem(); final float[] af32data = ((CompoundFloatDataset) a).data; final float[] oaf32data = ((CompoundFloatDataset) ds).getData(); for (int i = 0; it.hasNext();) { for (int j = 0; j < isize; j++) { final float ix = af32data[it.index + j]; float ox; ox = (float) (Math.asin(ix)); oaf32data[i++] = ox; } } break; case AbstractDataset.ARRAYFLOAT64: ds = AbstractDataset.zeros(a, AbstractDataset.ARRAYFLOAT64); isize = a.getElementsPerItem(); final double[] af64data = ((CompoundDoubleDataset) a).data; final double[] oaf64data = ((CompoundDoubleDataset) ds).getData(); for (int i = 0; it.hasNext();) { for (int j = 0; j < isize; j++) { final double ix = af64data[it.index + j]; double ox; ox = (double) (Math.asin(ix)); oaf64data[i++] = ox; } } break; case AbstractDataset.COMPLEX64: ds = AbstractDataset.zeros(a, AbstractDataset.COMPLEX64); final float[] c64data = ((ComplexFloatDataset) a).data; final float[] oc64data = ((ComplexFloatDataset) ds).getData(); for (int i = 0; it.hasNext();) { final float ix = c64data[it.index]; final float iy = c64data[it.index + 1]; Complex tz; float ox; float oy; tz = new Complex(ix, iy).asin(); ox = (float) (tz.getReal()); oy = (float) (tz.getImaginary()); oc64data[i++] = ox; oc64data[i++] = oy; } break; case AbstractDataset.COMPLEX128: ds = AbstractDataset.zeros(a, AbstractDataset.COMPLEX128); final double[] c128data = ((ComplexDoubleDataset) a).data; final double[] oc128data = ((ComplexDoubleDataset) ds).getData(); for (int i = 0; it.hasNext();) { final double ix = c128data[it.index]; final double iy = c128data[it.index + 1]; Complex tz; double ox; double oy; tz = new Complex(ix, iy).asin(); ox = (double) (tz.getReal()); oy = (double) (tz.getImaginary()); oc128data[i++] = ox; oc128data[i++] = oy; } break; default: throw new IllegalArgumentException( "arcsin supports integer, compound integer, real, compound real, complex datasets only"); } ds.setName(a.getName()); addFunctionName(ds, "arcsin"); return ds; }
From source file:uk.ac.diamond.scisoft.analysis.dataset.Maths.java
/** * arccos - evaluate the inverse cosine function on each element of the dataset * @param a/*from ww w . j a va 2 s.c o m*/ * @return dataset */ @SuppressWarnings("cast") public static AbstractDataset arccos(final AbstractDataset a) { final int isize; final IndexIterator it = a.getIterator(); AbstractDataset ds; final int dt = a.getDtype(); switch (dt) { case AbstractDataset.INT8: ds = AbstractDataset.zeros(a, AbstractDataset.FLOAT32); final byte[] i8data = ((ByteDataset) a).data; final float[] oi8data = ((FloatDataset) ds).getData(); for (int i = 0; it.hasNext();) { final byte ix = i8data[it.index]; float ox; ox = (float) (Math.acos(ix)); oi8data[i++] = ox; } break; case AbstractDataset.INT16: ds = AbstractDataset.zeros(a, AbstractDataset.FLOAT32); final short[] i16data = ((ShortDataset) a).data; final float[] oi16data = ((FloatDataset) ds).getData(); for (int i = 0; it.hasNext();) { final short ix = i16data[it.index]; float ox; ox = (float) (Math.acos(ix)); oi16data[i++] = ox; } break; case AbstractDataset.INT32: ds = AbstractDataset.zeros(a, AbstractDataset.FLOAT64); final int[] i32data = ((IntegerDataset) a).data; final double[] oi32data = ((DoubleDataset) ds).getData(); for (int i = 0; it.hasNext();) { final int ix = i32data[it.index]; double ox; ox = (double) (Math.acos(ix)); oi32data[i++] = ox; } break; case AbstractDataset.INT64: ds = AbstractDataset.zeros(a, AbstractDataset.FLOAT64); final long[] i64data = ((LongDataset) a).data; final double[] oi64data = ((DoubleDataset) ds).getData(); for (int i = 0; it.hasNext();) { final long ix = i64data[it.index]; double ox; ox = (double) (Math.acos(ix)); oi64data[i++] = ox; } break; case AbstractDataset.ARRAYINT8: ds = AbstractDataset.zeros(a, AbstractDataset.ARRAYFLOAT32); isize = a.getElementsPerItem(); final byte[] ai8data = ((CompoundByteDataset) a).data; final float[] oai8data = ((CompoundFloatDataset) ds).getData(); for (int i = 0; it.hasNext();) { for (int j = 0; j < isize; j++) { final byte ix = ai8data[it.index + j]; float ox; ox = (float) (Math.acos(ix)); oai8data[i++] = ox; } } break; case AbstractDataset.ARRAYINT16: ds = AbstractDataset.zeros(a, AbstractDataset.ARRAYFLOAT32); isize = a.getElementsPerItem(); final short[] ai16data = ((CompoundShortDataset) a).data; final float[] oai16data = ((CompoundFloatDataset) ds).getData(); for (int i = 0; it.hasNext();) { for (int j = 0; j < isize; j++) { final short ix = ai16data[it.index + j]; float ox; ox = (float) (Math.acos(ix)); oai16data[i++] = ox; } } break; case AbstractDataset.ARRAYINT32: ds = AbstractDataset.zeros(a, AbstractDataset.ARRAYFLOAT64); isize = a.getElementsPerItem(); final int[] ai32data = ((CompoundIntegerDataset) a).data; final double[] oai32data = ((CompoundDoubleDataset) ds).getData(); for (int i = 0; it.hasNext();) { for (int j = 0; j < isize; j++) { final int ix = ai32data[it.index + j]; double ox; ox = (double) (Math.acos(ix)); oai32data[i++] = ox; } } break; case AbstractDataset.ARRAYINT64: ds = AbstractDataset.zeros(a, AbstractDataset.ARRAYFLOAT64); isize = a.getElementsPerItem(); final long[] ai64data = ((CompoundLongDataset) a).data; final double[] oai64data = ((CompoundDoubleDataset) ds).getData(); for (int i = 0; it.hasNext();) { for (int j = 0; j < isize; j++) { final long ix = ai64data[it.index + j]; double ox; ox = (double) (Math.acos(ix)); oai64data[i++] = ox; } } break; case AbstractDataset.FLOAT32: ds = AbstractDataset.zeros(a, AbstractDataset.FLOAT32); final float[] f32data = ((FloatDataset) a).data; final float[] of32data = ((FloatDataset) ds).getData(); for (int i = 0; it.hasNext();) { final float ix = f32data[it.index]; float ox; ox = (float) (Math.acos(ix)); of32data[i++] = ox; } break; case AbstractDataset.FLOAT64: ds = AbstractDataset.zeros(a, AbstractDataset.FLOAT64); final double[] f64data = ((DoubleDataset) a).data; final double[] of64data = ((DoubleDataset) ds).getData(); for (int i = 0; it.hasNext();) { final double ix = f64data[it.index]; double ox; ox = (double) (Math.acos(ix)); of64data[i++] = ox; } break; case AbstractDataset.ARRAYFLOAT32: ds = AbstractDataset.zeros(a, AbstractDataset.ARRAYFLOAT32); isize = a.getElementsPerItem(); final float[] af32data = ((CompoundFloatDataset) a).data; final float[] oaf32data = ((CompoundFloatDataset) ds).getData(); for (int i = 0; it.hasNext();) { for (int j = 0; j < isize; j++) { final float ix = af32data[it.index + j]; float ox; ox = (float) (Math.acos(ix)); oaf32data[i++] = ox; } } break; case AbstractDataset.ARRAYFLOAT64: ds = AbstractDataset.zeros(a, AbstractDataset.ARRAYFLOAT64); isize = a.getElementsPerItem(); final double[] af64data = ((CompoundDoubleDataset) a).data; final double[] oaf64data = ((CompoundDoubleDataset) ds).getData(); for (int i = 0; it.hasNext();) { for (int j = 0; j < isize; j++) { final double ix = af64data[it.index + j]; double ox; ox = (double) (Math.acos(ix)); oaf64data[i++] = ox; } } break; case AbstractDataset.COMPLEX64: ds = AbstractDataset.zeros(a, AbstractDataset.COMPLEX64); final float[] c64data = ((ComplexFloatDataset) a).data; final float[] oc64data = ((ComplexFloatDataset) ds).getData(); for (int i = 0; it.hasNext();) { final float ix = c64data[it.index]; final float iy = c64data[it.index + 1]; Complex tz; float ox; float oy; tz = new Complex(ix, iy).acos(); ox = (float) (tz.getReal()); oy = (float) (tz.getImaginary()); oc64data[i++] = ox; oc64data[i++] = oy; } break; case AbstractDataset.COMPLEX128: ds = AbstractDataset.zeros(a, AbstractDataset.COMPLEX128); final double[] c128data = ((ComplexDoubleDataset) a).data; final double[] oc128data = ((ComplexDoubleDataset) ds).getData(); for (int i = 0; it.hasNext();) { final double ix = c128data[it.index]; final double iy = c128data[it.index + 1]; Complex tz; double ox; double oy; tz = new Complex(ix, iy).acos(); ox = (double) (tz.getReal()); oy = (double) (tz.getImaginary()); oc128data[i++] = ox; oc128data[i++] = oy; } break; default: throw new IllegalArgumentException( "arccos supports integer, compound integer, real, compound real, complex datasets only"); } ds.setName(a.getName()); addFunctionName(ds, "arccos"); return ds; }