Кватернионы

index.htm - English text 

quaternion.zip - архивированная директория. 

Здесь использовался пакет программ Jnl, доступный по адресам.

www.vni.com

http://www.vni.com/products/wpd/jnl/

ftp://wig.ethz.ch/pub/VNI/wpd/jnl/jnl.zip

Пакет был декомпилирован при помощи Jad.exe, сейчас расположен в директории VisualNumerics приложения quaternion.zip.

Возникал вопрос, можно ли пользоваться Jad при суперкомпиляции. Данный пример дает положительный ответ на этот вопрос.

В VisualNumerics я использовал программы для работы с комплексными матрицами.

При помощи суперкомпилятора можно легко получить операции над кватернионами.

Кватернионы можно определять разными способами.

Были написаны небольшие программы addQ, subQ, mulQ quaternion.java, которые по двум массивам из 4 действительных чисел строят указанные комплексные матрицы и обращаются к нужной операции над матрицами. Остаточные программы приведены в quaternion.js

При помощи кватернионов можно получать числовые равенства, в которых сумма четырех квадратов, умноженная на другую сумму четырех квадратов, опять равна сумме четырех квадратов. Например,

( 12 + 22 + 32 + 42 ) ( 22 + 32 + 42 + 52 ) = 362 + 62 + 122 + 122

Числа в скобках можно брать любыми.

Для получения таких равенств в программе quaternion.java метод main был написан так

    public static int[] qInt =  {1, 2, 3, 4};
    public static int[] pInt =  {2, 3, 4, 5};
    public static double[] qres = new double[4];

    public static void main (String[] args) {
        double[] q = new double[4];
        double[] p = new double[4];

        q[0] = qInt[0];
        q[1] = qInt[1];
        q[2] = qInt[2];
        q[3] = qInt[3];

        p[0] = pInt[0];
        p[1] = pInt[1];
        p[2] = pInt[2];
        p[3] = pInt[3];

        qres = mulQ(q, p);

        int[] qresInt = new int[4];
        qresInt[0] = (int)qres[0];
        qresInt[1] = (int)qres[1];
        qresInt[2] = (int)qres[2];
        qresInt[3] = (int)qres[3];

        System.out.println( "( " + qInt[0] + "^2 + " + qInt[1] + "^2 + " + qInt[2] + "^2 + " + qInt[3] + "^2 ) " +
                            "( " + pInt[0] + "^2 + " + pInt[1] + "^2 + " + pInt[2] + "^2 + " + pInt[3] + "^2 ) = " +
                           " " + qresInt[0] + "^2 + " + qresInt[1] + "^2 + " + qresInt[2] + "^2 + " + qresInt[3] + "^2" );
    }

Остаточная программа такова

//--------------------------------------   6 sec - postprocessing...
	public static void main (final java.lang.String[] args_139)
	{
	  final double q_0_144 = (double)Quaternion.qInt[0];
	  final double q_1_147 = (double)Quaternion.qInt[1];
	  final double q_2_150 = (double)Quaternion.qInt[2];
	  final double q_3_153 = (double)Quaternion.qInt[3];
	  final double p_0_156 = (double)Quaternion.pInt[0];
	  final double p_1_159 = (double)Quaternion.pInt[1];
	  final double p_2_162 = (double)Quaternion.pInt[2];
	  final double p_3_165 = (double)Quaternion.pInt[3];
	  final double[] c_166 = new double[4];
	  final double im_204 = -p_3_165;
	  final double re_209 = -p_1_159;
	  final double im_215 = -(-p_2_162);
	  final double re_381 = q_1_147 * p_0_156 - q_2_150 * im_204 + (q_0_144 * p_1_159 - q_3_153 * p_2_162);
	  final double im_382 = q_1_147 * im_204 + q_2_150 * p_0_156 + (q_0_144 * p_2_162 + q_3_153 * p_1_159);
	  final double im_431 = q_1_147 * im_215 + q_2_150 * re_209 + (q_0_144 * p_3_165 + q_3_153 * p_0_156);
	  c_166[0] = q_1_147 * re_209 - q_2_150 * im_215 + (q_0_144 * p_0_156 - q_3_153 * p_3_165);
	  c_166[1] = re_381;
	  c_166[2] = im_382;
	  c_166[3] = im_431;
	  Quaternion.qres = c_166;
	  java.lang.System.out.println("( " + Quaternion.qInt[0] + "^2 + " + Quaternion.qInt[1] + "^2 + " + Quaternion.qInt[2] + "^2 + " + Quaternion.qInt[3] + "^2 ) ( " + Quaternion.pInt[0] + "^2 + " + Quaternion.pInt[1] + "^2 + " + Quaternion.pInt[2] + "^2 + " + Quaternion.pInt[3] + "^2 ) =  " + (int)Quaternion.qres[0] + "^2 + " + (int)Quaternion.qres[1] + "^2 + " + (int)Quaternion.qres[2] + "^2 + " + (int)Quaternion.qres[3] + "^2") /*virtual*/;
	  return;
	}
//--------------------------------------   7 sec - JScp version 0.0.76

Напомню, что в исходной программе по четырем числам строится кватернион в виде комплексной квадратной матрицы размера 2. Ни матриц, ни комплексных чисел в остаточной программе не наблюдается. Пакет Jnl тоже отсутствует.