Когда я копирую и вставляю вашу функцию, я получаю следующий вывод
>> trial(0)
0
0
За многие годы использования Matlab я обнаружил довольно много странных поведений и ошибок в Matlab, но я никогда не видел, чтобы Matlab изменял переменную просто так. Таким образом, я подозреваю, что в вашем коде действительно есть ошибка.
Чтобы найти проблему, я предлагаю установить остановку в каждой строке, где появляется test
, чтобы вы могли проверять ее значение при прохождении через функцию. Кроме того, вы можете периодически устанавливать условные остановки (обычно устанавливайте остановку, затем щелкните правой кнопкой мыши, чтобы ввести условие, например test==1
), чтобы функция прекращала выполнение, когда test
приняла нежелательное значение. Это должно позволить вам быстро определить место, где происходят плохие вещи.
Как только вы определили проблемный кодовый блок, вы можете создать (относительно) небольшой тестовый пример и опубликовать его здесь, если ошибка не стала очевидной.
EDIT
@ woodchips предложил несколько возможных причин вашей ошибки. Мои деньги были бы на задаче точности, т. Е. Если бы вы сравнили 0.000000001
с 0
. Чтобы найти такую проблему, поместите отладочную остановку в каждый оператор if, который включает test
, и проверьте, round(test)==test
. Если вывод false
, вы просто замените test
на round(test)
в своем операторе if, и все готово.