Блокноты 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