Взгляните на отредактированный код, который я очистил для вас выше, и изучите его. Не недооценивайте важность чистого, читаемого кода при поиске ошибок. Это сэкономит вам больше времени, чем будет стоить. Особенно через неделю, когда вам нужно будет вернуться к этому коду, и вы совсем не будете вспоминать, что пытались сделать.
Теперь о ваших ошибках. (все ссылки на строки относятся к очищенному коду выше)
Сценарий 1:
В строке 29 вы инициализируете u
как одно значение.
Если вы начнете свой l oop в строке 35, начиная с i = 2
, то, как только вы попытаетесь выполнить u(i, j+1)
, т.е. u(2,2)
в следующей строке, октава будет жаловаться, что вы пытаетесь для индексации второй строки в массиве, который пока содержит только одну строку. (на самом деле, то же самое применимо и к j на этом этапе, поскольку на этом этапе у вас также есть только один столбец)
Сценарий 2:
Я предполагаю, что Второй сценарий был опечаткой, и вы хотели сказать i = 1 : N
. Если вы начинаете с i=1
в l oop, посмотрите на строку 38: вы пытаетесь получить элемент u(i-1, j)
, т.е. u(0,1)
. Поэтому октава будет жаловаться, что вы пытаетесь получить элемент ноль , но в массивах октав начинается с единица , а ноль не определен. Попытка получить доступ к любому массиву с нулем приведет к ошибке, которую вы видите (попробуйте в терминале!).
UPDATE
Кроме того, теперь, когда код clean, вы можете обнаружить еще одну ошибку, о которой октава предупредит вас, если вы попытаетесь запустить код.
Посмотрите на строку 26. В отрезке elseif
НЕТ условия, поэтому октава ищет следующую заявление в качестве условия проверки.
Это означает, что условие elseif
всегда будет успешным, пока результат u0 = 1-x не равен нулю.
Это явно ошибка. Либо вы забыли указать условие для elseif
, либо, что более вероятно, вы просто хотели сказать else
, а не elseif
.