Translate

воскресенье, 7 декабря 2014 г.

Сложное полиноминальное ядерное преобразование


Данное ядерное преобразование более сложно, т.к. в нём используются сомножители всех возможных сочетаний входных значений.

Код на Java:



package libvmr;

/**
 * Сложное полиминальное ядерное преобразование
 * @author Yury V. Reshetov
 * @version 1.0
 */
public class BigKernelTrick implements KernelTrick{
 
 /**
  * Идентификаторы используемых переменных
  */
 private String[] variables = null;
 
 /**
  * Возвращает идентификаторы используемых переменных
  * @return идентификаторы переменных
  */
 public String[] getVariables() {
  return this.variables;
 }

 /**
  * Преобразовать двумерный массив
  * @return
  */
    public double[][] getTransformData(double[][] samples, double[] results) {
        int count = 1;
        for (int i = 0; i < (samples[0].length); i++) {
            count = count * 2;
        }
        double[][] result = new double[samples.length][count];
        this.variables = new String[count];
        for (int i = 0; i < samples.length; i++) {
            for (int j = 0; j < count; j++) {
             this.variables[j] = "";
                double pp = 1d;
                int z = j;
                for (int n = 0; n < samples[0].length; n++) {
                    if ((z % 2) == 1) {
                        pp = pp * samples[i][n];
                        this.variables[j] = this.variables[j] + " * x" + n;
                    }
                    z = z / 2;
                }
                result[i][j] = pp;                
            }
        }
        return result;
    }

 /**
  * Преобразовать одномерный массив
  * @return
  */
    public double[] getTransformData(double[] sample) {
        int count = 1;
        for (int i = 0; i < (sample.length); i++) {
            count = count * 2;
        }
        double[] result = new double[count];
        for (int i = 0; i < count; i++) {
            double pp = 1d;
            int z = i;
            for (int n = 0; n < sample.length; n++) {
                if ((z % 2) == 1) {
                    pp = pp * sample[n];
                } 
                z = z / 2;
            }
            result[i] = pp;
        }

        return result;
    }
}

Комментариев нет:

Отправить комментарий