public GetMatrix ( int i0, int i1, int j0, int j1 ) : Matrix | ||
i0 | int | Initial row index. |
i1 | int | Final row index. |
j0 | int | Initial column index. |
j1 | int | Final column index. |
return | Matrix |
public Matrix GetMatrix(
int i0,
int i1,
int j0,
int j1)
{
var result = new Matrix(i1 - i0 + 1, j1 - j0 + 1);
double[][] b = result.Data;
try
{
for (int i = i0; i <= i1; i++)
{
for (int j = j0; j <= j1; j++)
{
b[i - i0][j - j0] = matrix[i][j];
}
}
}
catch (IndexOutOfRangeException)
{
throw new MatrixError("Submatrix indices");
}
return result;
}
public Matrix Solve(Matrix B) { int cols; Matrix matrix; double[][] data; int num2; int num3; int num4; int num5; int num6; int num7; int num8; if (B.Rows == this.x6088325dec1baa2a) { while (!this.IsNonsingular) { throw new MatrixError("Matrix is singular."); } cols = B.Cols; matrix = B.GetMatrix(this.xf4c1900fcf4a6b03, 0, cols - 1); data = matrix.Data; goto Label_0237; } goto Label_0251; Label_0016: if (num7 < num5) { num8 = 0; goto Label_0050; } num5--; if ((((uint) num6) - ((uint) num6)) > uint.MaxValue) { goto Label_013D; } Label_003D: if (num5 >= 0) { goto Label_00CB; } return matrix; Label_004A: num8++; Label_0050: if (num8 < cols) { data[num7][num8] -= data[num5][num8] * this.x6f7a05b81c35b16c[num7][num5]; if (0 != 0) { goto Label_00CB; } goto Label_004A; } num7++; goto Label_0016; Label_00CB: num6 = 0; Label_0097: if (num6 < cols) { data[num5][num6] /= this.x6f7a05b81c35b16c[num5][num5]; if ((((uint) num6) + ((uint) num2)) <= uint.MaxValue) { if (0 == 0) { num6++; if ((((uint) num6) + ((uint) num8)) > uint.MaxValue) { goto Label_0237; } goto Label_0097; } goto Label_004A; } goto Label_01A1; } num7 = 0; goto Label_0016; Label_013D: if (num2 < this.x57e9faf3ffdc07cc) { num3 = num2 + 1; goto Label_0187; } if (((uint) num4) >= 0) { goto Label_01D4; } Label_015B: num4++; Label_0161: if (num4 < cols) { data[num3][num4] -= data[num2][num4] * this.x6f7a05b81c35b16c[num3][num2]; goto Label_015B; } if ((((uint) num5) | 1) != 0) { num3++; } Label_0187: if (num3 >= this.x57e9faf3ffdc07cc) { num2++; if (2 != 0) { if ((((uint) num7) - ((uint) cols)) > uint.MaxValue) { goto Label_0251; } goto Label_013D; } goto Label_01D4; } Label_01A1: num4 = 0; goto Label_0161; Label_01D4: if ((((uint) num8) + ((uint) num8)) <= uint.MaxValue) { num5 = this.x57e9faf3ffdc07cc - 1; goto Label_003D; } goto Label_00CB; Label_0237: num2 = 0; if ((((uint) num8) + ((uint) num6)) >= 0) { goto Label_013D; } Label_0251: throw new MatrixError("Matrix row dimensions must agree."); }