Списки

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Создайте списки

Списки представляют упорядоченные структуры данных. Списки могут содержать произвольные объекты MuPAD®. Например, числа, символы, строки или функции могут быть записями списка. Чтобы создать список, разделите объекты MuPAD запятыми и заключите структуру в скобках:

list := [a, b, c, d]

Кроме того, можно создать последовательность и преобразовать ее в список. Чтобы преобразовать последовательность в список, заключите последовательность в скобках. Как ярлык для создания последовательности, используйте генератор последовательности $ или его функциональная форма _seqgen. Заключите последовательность в скобки:

[i*(i-1) $ i = 1..10];
[i $ 10]

Список может содержать списки как записи:

list1 := [1, list, 2]

Список может быть пустым:

empty_list := []

MuPAD не сглаживается, списки как он сглаживает последовательности. Можно создать вложенные списки:

list1 := [1, 2]:
list2 := [5, 6]:
list3 := [list1, 3, 4, list2]

Записи списка доступа

Существует два способа получить доступ к конкретным записям списка их индексами:

  • Если вы хотите использовать порядок, в котором записи появляются на экране, используют скобки или _index.

  • Если вы хотите использовать внутренний порядок списка, используйте op.

В целом эти два индекса записи структуры данных могут отличаться. Для списков внутренний порядок совпадает с тем, что вы видите на экране:

list := [a, b, c, d, e, f]:
list[2]; _index(list, 3..5);
op(list, 2); op(list, 3..5)

Чтобы получить доступ к записи целые числа от конца списка, используйте отрицательные числа:

list := [a, b, c, d, e, f]:
list[-2]

Если вы используете индексируемое присвоение, не создавая список, MuPAD генерирует таблицу вместо списка:

L[1] := x: L

Работайте со списками

Списки MuPAD поддерживают следующие операции:

  • Проверка, что список содержит конкретный объект

  • Используя список как функция в вызове функции

  • Применение функции ко всем записям списка

  • Извлечение записей списка

  • Деление списка согласно конкретным свойствам его записей

  • Арифметические операции в списках

Чтобы проверять, принадлежит ли объект списку, используйте команду contains. Команда возвращает положение первого вхождения объекта в списке. Если объект не принадлежит списку, contains возвращает 0:

list := [(i-5)/7 $ i = 10..20];
contains(list, 1);
contains(list, -1)

Если вы используете список в качестве функции в вызове функции, MuPAD возвращает список соответствующих вызовов функции:

[sin, cos, tan, f](x);
[sin, cos, tan, f](0.1)

Чтобы применить функцию ко всем записям списка, используйте функциональный map:

map([x, 0.1, 1/5, PI], sin);
map([x, 0.1, 1/5, PI], `+`, a, 1)

Чтобы извлечь записи с конкретными свойствами из списка, используйте команду select:

select([i $ i = 1..20], isprime)

Чтобы разделить список на три списка согласно конкретным свойствам, используйте команду split:

split([i $ i = 1..10], isprime)

Получившиеся три списка содержат:

  • Записи с необходимыми свойствами

  • Записи без необходимых свойств

  • Записи, для которых необходимые свойства неизвестны.

MuPAD поддерживает следующие арифметические операции в списках: сложение, вычитание, умножение, деление и возведение в степень. Списки, с которыми вы работаете, должны содержать равное количество записей. MuPAD формирует новый список, содержащий записи существующих списков, объединенных попарно:

list1 := [a, b, c]:
list2 := [d, e, f]:
list1 + list2;
list1*list2;
list1^list2

Когда вы комбинируете список и скаляр, MuPAD комбинирует скаляр с каждой записью списка. Например:

list1 := [a, b, c]:
list1 + a;
list1^5;
list1*(a + 5)

Примечание

Объединение скаляра и списка отличается от объединения скаляра и матрицы.

Когда вы добавляете скаляр в матрицу, MuPAD добавляет скаляр, умноженный на единичную матрицу к исходной матрице. Например, задайте матричный M можно следующим образом. Добавьте переменную a матричный M:

M := matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]):
M + a

Теперь задайте строки матричного M следующими тремя списками. Добавьте переменную a в каждый список. MuPAD добавляет переменную a в каждую запись трех списков:

list1 := [1, 2, 3]:
list2 := [4, 5, 6]:
list3 := [7, 8, 9]:
matrix([list1 + a, list2 + a, list3 + a]);

Когда вы комбинируете скаляр и пустой список, результатом является пустой список:

[] + 2

MuPAD позволяет вам объединить вложенные списки:

[[a, b], c, d] + 1;
[[a, b], c, d] + [1, 2, 3]

Чтобы объединить списки с неравными количествами записей, используйте команду zip. По умолчанию получившийся список имеет то же количество записей как самый короткий список:

list1 := [a, b]:
list2 := [d, e, f]:
zip(list1, list2, _plus);
zip(list1, list2, _mult);
zip(list1, list2, _power)

Чтобы произвести список с количеством записей, равных более длинному списку, используйте значение по умолчанию в качестве дополнительного параметра:

zip(list1, list2, _plus, 100)

Добавьте, замените или удалите записи списка

Чтобы добавить новые записи в конец списка, используйте команду append или . (точка) оператор:

list := [a, b, c]:
list := append(list, d, e, f);
list := list.[1, 2, 3, 4]

Чтобы конкатенировать списки, используйте оператор '.' (точка) или ее функциональная форма _concat:

list1 := [a, b, c]:
list2 := [t^3 $ t = 0..3]:
list3 := list1.list2;
list4 := _concat(list2, list1)

Можно заменить запись списка:

list := [a, b, c, d, e]:
list[1] := newEntry:
list[2] := [1, 2, 3]:
list[-1] := matrix([[1, 2, 3], [5, 6, 7]]):
list

Чтобы удалить запись из списка, используйте команду delete:

list := [a, b, c, d, e, f]:
delete list[-1];
list