Хорошо, поэтому я уверен, что получил это, поэтому отвечаю на свой вопрос.
Если вы хотите удалить строку ИЛИ столбца в Scilab, вы можете назначить его для [].Следующий пример иллюстрирует, как это работает.Рассмотрим матрицу
A=[1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
, которая печатается в консоли как
A =
1. 2. 3. 4.
5. 6. 7. 8.
9. 10. 11. 12.
13. 14. 15. 16.
Если вы хотите удалить первую строку, команда будет
A(1,:)=[]
A =
5. 6. 7. 8.
9. 10. 11. 12.
13. 14. 15. 16.
Вы простоприсвойте первую строку пустой матрице.Точно так же, если вы хотите удалить 2-й столбец, вы назначаете его пустой матрице:
A(:,2)=[]
A =
5. 7. 8.
9. 11. 12.
13. 15. 16.
(Обратите внимание, что операция выполняется с обновленной матрицей - т.е. 1-я строка удалена) Но если вы хотитеубрав 1-ю строку и 2-й столбец, вы не можете написать:
A(1,2)=[]
Scilab говорит:
Submatrix incorrectly defined.
Вот альтернативное решение с использованием присваиванияпустая матрица: общая идея: мы выполняем 2 операции одну за другой: удаляем 1-ю строку, а затем i-й столбец.Отправка кода только для else part:
else
s=0
first_row_removed=A //taking a backup of A and then...
first_row_removed(1,:)=[] //...removing the 1st row
for i=1:order
column_i_removed=first_row_removed //taking a backup of the 1st-row-removed matrix...
column_i_removed(:,i)=[] //... and then deleting column i
s=s+((-1)^(i+1))*A(1,i)*take_detm(column_i_removed); //recursive call
end
determinant=s
end //of else
Важно отметить, что выполнение присваивания пустой матрице вносит изменения в саму исходную матрицу.Следовательно, для каждой итерации цикла for мы должны убедиться, что мы выполняем операцию удаления столбца i-го столбца над матрицей, удаленной из 1-й строки, а не над матрицей, в которой i-й столбец был удален в предыдущей итерации цикла.Следовательно, строка
column_i_removed=first_row_removed
должна быть внутри цикла for.