Example usage for org.apache.commons.math.complex Complex getImaginary

List of usage examples for org.apache.commons.math.complex Complex getImaginary

Introduction

In this page you can find the example usage for org.apache.commons.math.complex Complex getImaginary.

Prototype

public double getImaginary() 

Source Link

Document

Access the imaginary part.

Usage

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;
}