2016-10-05 3 views
0

Я должен создать кнопку, которая преобразует уже существующую матрицу 2D-матрицы в единую матрицу. Очевидно, вам нужно убедиться, что количество столбцов и строк одинаково в исходной матрице, чтобы сделать ее идентичной матрицей, но я немного запутался в том, как это сделать.Преобразование матрицы 2D-массива в единую матрицу C#

До сих пор у меня есть:

 private void btnMakeBIdentity_Click(object sender, EventArgs e) 
    { 
     double[,] identityMatrixB = new double[matrixBRows, matrixBCols]; 
     if(matrixBRows == matrixBCols) 
     { 
      identityMatrixB = IdentityMatrix(matrixBRows); 
     } 
     matrixB = identityMatrixB; 

     matrixToString(matrixB, txtFullMatrixB); 
    } 

и метод matrixToString:

 private double[,] IdentityMatrix(int n) 
    { 
     double[,] result = createMatrix(n, n); 
     for (int i = 0; i < n; ++i) 
      result[i,i] = 1.0; 
     return result; 
    } 

В этом коде: matrixB, matrixBRows, matrixBCols все глобальные переменные класса. Матрица B была создана с помощью:

 private void btnCreateMatrixB_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      matrixBRows = Convert.ToInt32(txtMatrixBRows.Text); 
      matrixBCols = Convert.ToInt32(txtMatrixBCols.Text); 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Please check the textboxes for Matrix B's rows and columns. Be sure you are inputing a valid integer."); 
     } 

     matrixB = createMatrix(matrixBRows, matrixBCols); 
     matrixToString(matrixB, txtFullMatrixB); 


    } 

Пример вывода, который дается после того, как Matrix B создал бы:

8.3 10 5.2 
0.1 6.3 7.8 
7.6 1.3 1.1 

после запуска IdentityMatrix после нажатия кнопки "Сделать Матрица B Идентичность" Я получаю:

1.0 10 5.2 
0.1 1.0 7.8 
7.6 1.3 1.0 

Любая помощь или предложения были бы замечательными. Благодаря!

ответ

4

Вы должны установить другие элементы в 0. Таким образом, вы могли бы сделать что-то вроде этого:

for (int i = 0; i < n; ++i) { 
    for (int j = 0; j < n; ++j) { 
     if (i == j) 
      result[i,j] = 1.0; 
     else result[i,j] = 0.0; 
    } 
} 
+0

Буквально как только я загрузил этот вопрос, у меня была эта идея ... Спасибо! – Shayd3

Смежные вопросы