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