public Matrix <Complex> InverseOld()
        {
            Matrix <Complex> X = new MatrixComplex(Col, Row);
            Matrix <Complex> E = new MatrixComplex(Col, Row);

            E = E.Unity();
            Complex kf   = new Complex();
            int     RANG = Row;
            var     Temp = new MatrixComplex(Col, Row);

            Temp.Arr = Arr;

            for (int p = 0; p < RANG; p++)
            {
                for (int i = p + 1; i < RANG; i++)
                {
                    if (Temp.Arr[p, p] == 0.0)
                    {
                        kf = 0;
                    }
                    else
                    {
                        kf = -Temp.Arr[i, p] / Temp.Arr[p, p];
                    }

                    for (int j = 0; j < RANG; j++)
                    {
                        E.Arr[i, j] = E.Arr[i, j] + kf * E.Arr[p, j];
                        if (j >= p)
                        {
                            Temp.Arr[i, j] = Temp.Arr[i, j] + kf * Temp.Arr[p, j];
                        }
                    }
                }
            }

            for (int k = 0; k < RANG; k++)
            {
                X.Arr[RANG - 1, k] = E.Arr[RANG - 1, k] / Temp.Arr[RANG - 1, RANG - 1];

                for (int i = RANG - 2; i >= 0; i--)
                {
                    Complex sum = 0.0;
                    for (int j = i + 1; j < RANG; j++)
                    {
                        sum = sum + X.Arr[j, k] * Temp.Arr[i, j];
                    }

                    X.Arr[i, k] = (E.Arr[i, k] - sum) / Temp.Arr[i, i];
                }
            }
            return(X);
        }
Example #2
0
        public Matrix <double> Calculate(Matrix <double> a, Matrix <double> n)
        {
            Matrix <Complex> U = new MatrixComplex(a.Col, a.Row);
            Matrix <Complex> N = new MatrixComplex(n.Col, n.Row);
            //Matrix<Complex> N = n * Globals.Alpha[0].Real;
            var aa = a.Cast <Complex>();
            var nn = n.Cast <Complex>();

            U = U.Unity();
            var dx = 100.0 / 7.0;

            for (int i = 1; i <= 7; i++)
            {
                var temp  = aa - (U * Globals.Theta[i]);
                var temp1 = temp.Inverse();
                var _n    = temp1 * nn * Globals.Alpha[i];
                var str   = "";
                N = N + _n;
                ExpStatusChangedEvent?.Invoke((int)(i * dx));
                //if (i == 1)
                //{
                //    for (int k = 0; k < temp1.Col; k++)
                //    {
                //        for (int j = 0; j < temp1.Row; j++)
                //        {
                //            str += temp1.Arr[k, j].Real + "  " + temp1.Arr[k, j].Imaginary + "\t";
                //        }
                //        str += "\n";
                //    }
                //    str += "\n";
                //    File.AppendAllText("F://testmatrix.txt", str);
                //}
            }
            Matrix <double> result = N.Cast <double>();

            result *= 2;
            result += n * Globals.Alpha[0].Real;
            result.RemoveMinuses();
            return(result);
        }
        public override Matrix <Complex> Pow(int p)
        {
            Matrix <Complex> result = new MatrixComplex(Col, Row);

            result = result.Unity();

            if (p == 0)
            {
            }
            else if (p == 1)
            {
                result = Clone();
            }
            else
            {
                result = Clone();
                for (int i = 1; i < p; i++)
                {
                    result = result * this;
                }
            }
            return(result);
        }