示例#1
0
        private void Test_ComplexDiv()
        {
            complex           a = new complex(1, 1);
            complex           b = new complex(1, 0);
            complex           y = 1 / a;
            ILArray <complex> A = new complex[] { new complex(1, 1), new complex(4, 5) };

            A = A.T;
            if (y != ILMath.ccomplex(0.5, -0.5))
            {
                throw new Exception("complex: 1 / 1+i -> wrong result!");
            }
            Success();
        }
        public override ILCell GenerateTestArrays()
        {
            ILCell ret   = new ILCell();
            int    count = 0;

            complex[] elements = new complex[] {
                new complex(0.0, 0.0),
                new complex(1.0, 0.0),
                new complex(1.0, 1.0),
                new complex(0.0, 1.0),
                new complex(-1.0, 0.0),
                new complex(-1.0, -1.0),
                new complex(0.0, -1.0),
                new complex(double.NaN, 0.0),
                new complex(double.NaN, 1.0),
                new complex(0.0, double.NaN),
                new complex(1.0, double.NaN),
                new complex(double.NaN, double.NaN),        // 11
                new complex(double.PositiveInfinity, 0.0),
                new complex(double.PositiveInfinity, 1.0),
                new complex(0.0, double.PositiveInfinity),
                new complex(1.0, double.PositiveInfinity),
                new complex(double.PositiveInfinity, double.PositiveInfinity),
                new complex(double.NegativeInfinity, 0.0),
                new complex(double.NegativeInfinity, 1.0),
                new complex(0.0, double.NegativeInfinity),
                new complex(1.0, double.NegativeInfinity),
                new complex(double.NegativeInfinity, double.NegativeInfinity),
                // mixed
                new complex(double.NaN, double.NegativeInfinity),
                new complex(double.NaN, double.PositiveInfinity),
                new complex(double.PositiveInfinity, double.NegativeInfinity),
                new complex(double.NegativeInfinity, double.PositiveInfinity),
                new complex(double.NaN, double.PositiveInfinity),
                new complex(double.NegativeInfinity, double.NaN),
                new complex(double.PositiveInfinity, double.NaN),
                new complex(double.MaxValue, double.NaN),
                new complex(double.MinValue, double.NaN),
                new complex(double.MaxValue, double.MinValue),
                new complex(double.NaN, double.MaxValue),
                new complex(double.NaN, double.MinValue),
                new complex(double.MaxValue, double.MinValue)
            };

            // empty
            ILArray <complex> tmp;

            ret[count++] = ILArray <complex> .empty(0, 0);

            ret[count++] = ILArray <complex> .empty(1, 0);

            ret[count++] = ILArray <complex> .empty(0, 1, 0);

            // scalar
            foreach (complex elem in elements)
            {
                ret[count++] = (ILArray <complex>)elem;
            }
            // vector
            ret[count++] = ILArray <complex> .zeros(1, 10);

            ret[count++] = ILArray <complex> .zeros(1, 10) + elements[2];

            ret[count++] = ILArray <complex> .zeros(10, 1);

            ret[count++] = ILArray <complex> .zeros(10, 1) + elements[2];

            ret[count++] = ILMath.ccomplex(ILMath.vector(0.0, 10.0), ILMath.vector(0.0, 10.0));
            ret[count++] = ILMath.ccomplex(ILMath.vector(-5.0, 4.0), -ILMath.vector(-5.0, 4.0));

            tmp          = ILMath.ccomplex(ILMath.vector(-5.0, 4.0), -ILMath.vector(-5.0, 4.0));
            tmp[0]       = elements[22];
            tmp["end"]   = elements[25];
            tmp[3]       = elements[26];
            ret[count++] = tmp;
            // matrix
            ret[count++] = ILArray <complex> .zeros(3, 2);

            ret[count++] = ILMath.ccomplex(ILMath.rand(3, 4), ILMath.rand(3, 4));
            ret[count++] = ILMath.ccomplex(ILMath.ones(2, 3) * double.NaN, ILMath.ones(2, 3) * double.NaN);
            ret[count++] = ILMath.ccomplex(ILMath.ones(3, 2) / 0.0, ILMath.ones(3, 2) / 0.0); // inf
            tmp          = ILArray <complex> .zeros(3, 2) + elements[2];

            tmp[0]       = elements[11]; // nans
            ret[count++] = tmp;
            tmp[1]       = elements[15];
            ret[count++] = tmp;
            tmp[3]       = elements[20]; // neg inf
            ret[count++] = tmp;
            // 3d array
            ret[count++] = ILMath.ccomplex(ILMath.zeros(4, 3, 2), ILMath.zeros(4, 3, 2));
            ret[count++] = ILMath.ccomplex(ILMath.ones(4, 3, 2), ILMath.ones(4, 3, 2));
            ret[count++] = ILMath.ccomplex(0.0 / ILMath.zeros(4, 3, 2), 0.0 / ILMath.zeros(4, 3, 2));
            ret[count++] = ILMath.ccomplex(ILMath.ones(4, 3, 2) * float.NaN, ILMath.ones(4, 3, 2) * float.NaN);
            ret[count++] = ILMath.ccomplex(ILMath.ones(4, 3, 2) * float.NegativeInfinity, ILMath.ones(4, 3, 2) * float.NegativeInfinity);
            ret[count++] = ILMath.ccomplex(ILMath.rand(4, 3, 2), ILMath.rand(4, 3, 2));
            // 4d array
            ret[count++] = ILMath.ccomplex(ILMath.rand(15, 12, 3, 10), ILMath.rand(15, 12, 3, 10));

            return(ret);
        }