Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
Цикл for
повторяет группу операторов для постоянного числа итераций. Цикл запускает с команды for
и заканчивается end_for
или только end
. MuPAD® выполняет все операторы между этими двумя словами так много раз, как вы задаете. Например, вычислите факториал целого числа с помощью цикла:
x := 1: for i from 1 to 5 do x := x * i; end_for
Часто можно ускорять подписание кода MuPAD, заменяя циклы for
на генератор последовательности $
. Например, вместо цикла
x := 1: for i from 1 to 10 do x := x * i; end_for
используйте оператор:
`*`(i $ i = 1..10)
По умолчанию цикл постепенно увеличивает значение счетчика 1
на каждом шаге. Можно изменить размер шага:
for i from 1 to 3 step 1/2 do print(i) end_for
Чтобы считать в обратном направлении уменьшение значения счетчика с каждым шагом, вместо to
, используют ключевое слово downto
:
for i from 3 downto 1 do print(i) end_for
MuPAD поддерживает использование структур, таких как списки и матрицы в циклах for:
for i in [1, -4, a, b] do print(i^2) end_for
s := 0: for i in linalg::hilbert(3) do s := s + i^2 end_for
MuPAD поддерживает использование циклов с логическими условиями. Цикл while
продолжается, в то время как условия выполнения допустимы. Цикл запускается с while
и заканчивается end_while
или только end
. MuPAD выполняет все операторы между этими командами неоднократно, пока условия выполнения верны. В цикле while
MuPAD оценивает условия перед каждой итерацией. Когда условие становится ложным, цикл останавливается, не выполняя операторы текущей итерации:
i := 2; while i < 16 do i := i^2; print(i) end_while:
Цикл repeat
продолжается, пока условие завершения не становится допустимым. Цикл запускается с repeat
и заканчивается end_repeat
. MuPAD выполняет все операторы между этими командами неоднократно, в то время как условия являются ложными. Цикл repeat
тестирует условие завершения в конце каждой итерации. Когда условие становится верным, цикл останавливается после выполнения операторов текущей итерации:
i := 2; repeat i := i^2; print(i) until i >= 16 end_repeat:
while
и циклы repeat
не действуют для постоянного числа шагов. Если условия выполнения или завершения таких циклов никогда не становятся верными, MuPAD может выполнить операторы в этих циклах бесконечно. Например, если условие завершения не допустимо во время первой итерации, и это не изменяется в цикле, цикл бесконечен:
i := 1; repeat print(i) until i > 3 end_repeat:
Чтобы избежать этого бесконечного цикла, используйте дополнительный оператор, чтобы изменить его в каждой итерации:
i := 1; repeat i := i + 1; print(i) until i > 3 end_repeat:
Можно использовать несколько условий, комбинирующих выражения and
, or
, xor
или другими логическими операторами:
i := 2: j := 3: repeat i := i*j; j := j^2; print(i, j) until i > 100 and j > 10 end_repeat:
i := 2: j := 3: repeat i := i*j; j := j^2; print(i, j) until i > 100 or j > 10 end_repeat:
Можно поместить один или несколько циклов в другом цикле. Внутренние циклы могут иметь те же или различные типы:
s := 0: for i from 1 to 3 do for j from 1 to 2 do s := s + i + j; end_for end_for: print(s)
s := 0: for i from 1 to 3 do j := 1: while j <= 2 do s := s + i + j; j := j + 1; end_while end_for: print(s)
Чтобы добавить возможность выйти из цикла, используйте команду break
. Предположим, что вы хотите выйти из цикла, если некоторое условие верно:
for i from 1 to 3 do for j from 1 to 2 do if i = j then print(Unquoted, "i = j = ".expr2text(i)); break end_if end_for end_for:
i = j = 1
i = j = 2
Команда break
позволяет вам выйти из цикла, в который вы помещаете эту команду. Если вы создаете вложенные циклы и используете break
во внутреннем цикле, MuPAD продолжает выполнять операторы во внешних циклах:
for i from 1 to 3 do for j from 1 to 2 do if i = j then print(Unquoted, "break with i = j = ".i); break end_if; print(Unquoted, "i = ".i.", j = ".j); end_for end_for:
break with i = j = 1
i = 2, j = 1
break with i = j = 2
i = 3, j = 1
i = 3, j = 2
Предположим, что вы хотите прекратить выполнить операторы и выходить из вложенных циклов, как только условие i = j
верно. Используйте дополнительную переменную для состояния пропуска внутреннего цикла. Используйте эту переменную, чтобы выйти из внешнего цикла:
breakAll := FALSE: for i from 1 to 3 do for j from 1 to 2 do if i = j then print(Unquoted, "break with i = j = ".i); breakAll := TRUE; break end_if; print(Unquoted, "i = ".i.", j = ".j); end_for; if breakAll then break end_if; end_for:
break with i = j = 1
Чтобы пропустить команды от конкретной точки в конец цикла и запустить следующую итерацию, используйте команду next
:
for i from 1 to 3 do for j from 1 to 2 do if i = j then print(Unquoted, "i = j = ".expr2text(i)); next end_if; print(Unquoted, "i = ".expr2text(i), "j = ".expr2text(j)) end_for end_for:
i = j = 1
i = 1, j = 2
i = 2, j = 1
i = j = 2
i = 3, j = 1
i = 3, j = 2
Все команды MuPAD производят некоторые возвращаемые значения. Циклы в MuPAD возвращают результат последнего выполняемого оператора:
for i from 1 to 3 do x := 2*i; y := 3*i end_for
Подавите вывод возвращаемого значения с двоеточием:
for i from 1 to 3 do x := 2*i; y := 3*i end_for:
По умолчанию MuPAD не отображает промежуточные результаты, полученные в цикле, даже если вы используете точки с запятой после команд. Чтобы видеть промежуточные результаты, используйте команду print
в цикле:
i := 1; while i < 3 do i := i + 1; print(i) end_while:
Чтобы отобразить результаты каждой итерации в цикле for
, также используйте команду print
:
for i from 1 to 5 do x := i!; print(Unquoted, expr2text(i)."! = ".expr2text(x)) end_for
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120