«Стандартные» методы поиска ошибок — это:
- Доказательство правильности программы, или, проще и общее — рассуждения о программе;
- Отладочная печать;
- REPL;
- Пошаговая отладка;
- Юнит- и прочее тестирование.
Доказывать соответствие программы спецификации — это довольно сложно, обычно слишком сложно. Рассуждения (reasoning) о программе — это проще, потому что нет такой жёсткой цели дать доказательство, и потому, что не надо сначала составлять спецификацию, и общее, потому что вместо доказательства можно получить какой-то набор нетривиальных знаний о работе программы. Имеются ввиду рассуждения глядя на код, вида «вот тут у нас вызывается эта процедура, она изменяет вот эти переменные, а вот это считается по такой формуле». Впрочем, в языках типа фортрана или бейсика (на которые больше всего похож матлаб) рассуждения сильно затруднены.
Отладочная печать — имеется ввиду вставить в разные места инструкции типа printf("X = %0.4f\n", x); и потом анализировать вывод программы.
REPL (read-eval-print loop) — имеется ввиду копирование отдельных строк программы в интерактивную консоль с подстановкой туда каких-нибудь конкретных данных и проверка, что оно работает как задумано.
Про пошаговую отладку, надеюсь, рассказывать не нужно :)
Юнит-тестирование — это упомянутая выше проверка правильности работы каждой функции. Для того, чтобы это имело смысл, программу надо разбивать на много мелких функций (тех самых «юнитов»). Ещё бывает интеграционное тестирование — проверка того, что вся эта куча правильных функций вместе работает правильно. И всякие ещё варианты тестирования :)