Главная страница

Математика. Настоящий учебник посвящен системе Mathematica прикладному пакету компьютерной алгебры, при помощи которого можно решать любые задачи, в которых в той или иной форме встречается математика


Скачать 4.43 Mb.
НазваниеНастоящий учебник посвящен системе Mathematica прикладному пакету компьютерной алгебры, при помощи которого можно решать любые задачи, в которых в той или иной форме встречается математика
АнкорМатематика
Дата11.05.2022
Размер4.43 Mb.
Формат файлаpdf
Имя файла106-108.pdf
ТипУчебник
#521834
страница29 из 38
1   ...   25   26   27   28   29   30   31   32   ...   38
карты. Сколько существует различных бриджевых рук?
3.2. Известно, что

15 5

=

14 6

= 3003.
Имеет ли уравнение

x + 1
y

=

x
y + 1


другие решения?
Основным фактом про биномиальные коэффициенты является следую- щее треугольное рекуррентное соотношение. Для любых m и n имеет место равенство

n
m

=

n
1
m
1

+

n
1
m

.
Теперь, чтобы полностью восстановить все биномиальные коэффициенты,
достаточно воспользоваться граничными условиями

n
0

=

n
n

= 1.
Граничные условия очевидны: в n-элементном множестве X существует единственное подмножество из 0 элементов — а именно, пустое множество
, и единственное подмножество из n элементов — само множество X. Ком- бинаторное истолкование рекуррентного соотношения дано в следующем параграфе.
Традиционно эти соотношения кодируют в виде следующего треуголь- ника, называемого треугольником Паскаля:
1 1
1 1
2 1
1 3
3 1
1 4
6 4
1 1
5 10 10 5
1 1
6 15 20 15 6
1 1
7 21 35 35 21 7
1 1
8 28 56 70 56 28 8
1
Каждое число здесь равно сумме двух стоящих в предыдущей строке левее и правее его, отсутствующие числа равны 0. На самом деле треугольник
Паскаля был известен в Китае не позже IX века, а в Европе не позже на- чала XVI века — в Италии треугольник Паскаля и сегодня называется треугольником Тартальи. Однако, Трактат об арифметическом тре- угольнике Паскаля был самым полным сочинением на эту тему, оказавшим

360
влияние на Ньютона и Лейбница. Вот еще одно эффектное наблюдение, ка- сающееся треугольника Паскаля: биномиальный коэффициент равен чис- лу маршрутов
149
от вершины треугольника к точке, в которой расположен данный коэффициент.
3.3.
Напишите рекуррентную программу, вычисляющую биномиальные коэффициенты с помощью треугольного рекуррентного соотношения.
Ответ. Будем вычислять биномиальные коэффициенты так, как строится треугольник Паскаля:
bina[n ,0]:=1; bina[n ,n ]:=1;
bina[n ,m ]:=If[m>n,0,bina[n-1,m-1]+bina[n-1,m]]
Впрочем, начиная с XIII века китайские математики изображали бино- миальные коэффициенты в виде матрицы P с общим элементом
P
ij
=

i
j

,
0
≤ i, j ≤ n.
Сегодня эта матрица обычно называется матрицей Паскаля.
3.4. Вычислите биномиальные коэффициенты

n
m

при 0
≤ m, n ≤ 20 и составьте матрицу Паскаля порядка 11 (степени 10).
Ответ. Вычисление Table[Binomial[i,j],
{i,0,10},{j,0,10}] дает сле- дующую таблицу
150
:
1 0
0 0
0 0
0 0
0 0
0 1
1 0
0 0
0 0
0 0
0 0
1 2
1 0
0 0
0 0
0 0
0 1
3 3
1 0
0 0
0 0
0 0
1 4
6 4
1 0
0 0
0 0
0 1
5 10 10 5
1 0
0 0
0 0
1 6
15 20 15 6
1 0
0 0
0 1
7 21 35 35 21 7
1 0
0 0
1 8
28 56 70 56 28 8
1 0
0 1
9 36 84 126 126 84 36 9
1 0
1 10 45 120 210 252 210 120 45 10 1
Часто используется такде симметрическая матрица Паскаля (P P
t
)
с общим элементом
(P P
t
)
ij
=

i + j
j

,
0,
≤ i, j ≤ n.
3.5. Составьте симметрическую матрицу Паскаля порядка 11 (степени 10).
149
Напомним, что маршрут — в отличие от пути — всегда идет в положительных направлениях, в данном случае вниз-влево и вниз-вправо.
150
Запись матрицы без скобок.

361
Ответ. Вот эта матрица (записанная как таблица), в правом нижнем углу стоит

20 10

:
1 1
1 1
1 1
1 1
1 1
1 1
2 3
4 5
6 7
8 9
10 11 1
3 6
10 15 21 28 36 45 55 66 1
4 10 20 35 56 84 120 165 220 286 1
5 15 35 70 126 210 330 495 715 1001 1
6 21 56 126 252 462 792 1287 2002 3003 1
7 28 84 210 462 924 1716 3003 5005 8008 1
8 36 120 330 792 1716 3432 6435 11440 19448 1
9 45 165 495 1287 3003 6435 12870 24310 43758 1
10 55 220 715 2002 5005 11440 24310 48620 92378 1
11 66 286 1001 3003 8008 19448 43758 92378 184756
В щкольной математике биномиальные коэффициенты часто определя- ются следующей явной формулой

n
m

=
[n]
m
m!
=
n!
m!(n
− m)!
,
справедливой для любых m, n
N
0
. Обратите внимание, что эта формула,
в частности, еще раз доказывает уже известный нам из Модуля 1 факт, что произведение m последовательных целых чисел делится на m!.
3.6. Докажите эту формулу по индукции, используя треугольное рекур- рентное соотношение.
Разумеется, на самом деле никакой индукции здесь не надо, так как эта формула сразу следует из того, что количество перестановок n-элементного множества равно n!. В самом деле, пусть Y
⊆ X, причем |X| = n, |Y | = m.
Каждое m-элементное подмножество Z
⊆ X является образом Y под дей- ствием некоторой перестановки множества X, причем те перестановки, ко- торые оставляют Y на месте это произведения m! перестановок множества
Y и (n
− m)! перестановок множества X \ Y . Это и значит, что всего m- элементных подмножеств в X ровно n!/m!(n
− m)! штук (“теорема о связи орбит и стабилизаторов”).
Формула с убывающим факториалом лучше, так как она позволяет рас- пространить определение биномиального коэффициента на случай, когда
n
Z. А именно, теперь мы можем определить
−n
m

=
[
−n]
m
m!
=
(
1)
m
[n]
m
m!
Эта формула определяет число m-элементных подмножеств в множестве отрицательной мощности. Мы распространили биномиальные коэф- фициенты на отрицательные значения аргументов, потому что получать

362
формулы для
Z обычно значительно проще, чем для N. Однако в знако- переменных формулах не все слагаемые имеют комбинаторный смысл,
написать их обычно просто, а реально вычислить при помощи них что-то очень долго и дорого. Основным содержанием комбинаторики является борьба за комбинаторные формулы, в которых все слагаемые положи- тельны.
4. Разбиение на случаи.
151
Большинство алгебраистов тщательно различает доказательство и про- верку. Какой-то факт может быть проверен, но не доказан. С этой точки зрения вычислительные доказательства тождеств для биномиальных коэф- фициентов, использующие выражение

n
m

через факториалы, являются проверками, а те концептуальные доказательства, которые мы обсудим сей- час, — собственно доказательствами, или, как сказали бы остальные ма- тематики, априорными доказательствами, опирающимся только на опре- деления. Это различие приобретает драматический характер в разделах алгебры, использующих нетривиальные классификационные теоремы.
В этом курсе мы почти не обсуждаем концептуальные доказательства рассматриваемых фактов. Однако, в данном случае мы вынуждены сде- лать исключение: при доказательстве тождеств для биномиальных коэф- фициентов и чисел Стирлинга возникают некоторые ключевые сообра- жения, которые в дальнейшем десятки раз используются при по- строении рекуррентных алгоритмов. Единственный способ написать правильную программу, порождающую разбиения множества, перестанов- ки, сюръективные отображения, или что-нибудь в таком духе, состоит в том, чтобы понимать, что при этом происходит с математической точки зрения.
Первое из этих ключевых соображений называется разбиение на слу- чаи. А именно, если какие-то объекты разбиты на несколько непересе- кающихся типов, то, чтобы посчитать общее количество объектов, нужно просто сложить количество объектов каждого из этих типов. В теории перечисления это соображение известно как правило суммы. В следую- щих задачах речь идет об альтернативе, иными словами, выборе из двух взаимоисключающих возможностей, в соответствии с тем, принадлежит некоторый фиксированный элемент данному подмножеству, или нет.
4.1. Докажите соотношение

n
m

=

n
1
m
1

+

n
1
m

.
Решение. Пусть
|X| = n. Зафиксируем какую-то точку x ∈ X. Для любо- го подмножества Y
⊆ X имеет место следующая альтернатива: либо x ∈ Y ,
151
Colvard's Logical Premises: All probabilities are 50%. Either a thing will happen or it won't.

363
либо x /
∈ Y . Теперь тождество вытекает из правила суммы и следующих двух наблюдений:
Подмножество Y такое, что x /∈ Y , однозначно определяется своим пересечением Y
\{x} = Y ∩(X \{x}), которое является (m−1)-элементным подмножеством (n
1)-элементного множества X \ {x}.
Подмножество Y такое, что x ∈ Y , является m-элементным подмноже- ством (n
1)-элементного множества X \ {x}.
4.2. Вычислите сумму
n
X
m=0

n
m

=

n
0

+

n
1

+

n
2

+ . . . +

n
n

.
Решение. Эта сумма равна количеству всех подмножеств n-элементного множества X, т.е. порядку 2
X
. Хорошо известно, что
|2
X
| = 2
|X|
= 2
n
. Для полноты заметим, что это получается при помощи той же идеи, которая ис- пользована в решении первой задачи. Доказываем предложение индукцией по n =
|X|. В качестве базы индукции можно взять случай X = , когда
2

=
{∅} состоит из одного элемента, что соответствует формуле 2 0
= 1.
Предположим теперь, что X непусто и фиксируем точку x
∈ X. Рассмот- рим, как подмножества множества X расположены относительно x. Для подмножества Y
⊆ X имеет место следующая альтернатива: либо x ∈ Y ,
либо x /
∈ Y .
При x /∈ Y подмножество Y содержится уже в (n − 1)-элементном множестве X
\{x} и по индукционному предположению имеется ровно 2
n
1
таких множеств.
При x /∈ Y подмножество Y имеет вид Y = Z ∪ {x}, для единственного
Z
⊆ X \ {x}, так что таких множеств снова ровно 2
n
1
штук.
Это и значит, что всего в X ровно 2
n
1
+ 2
n
1
= 2
n
подмножеств, как и утверждалось.
4.3. Вычислите знакопеременную сумму
n
X
m=0
(
1)
m

n
m

=

n
0



n
1

+

n
2



n
3

+ . . . + (
1)
n

n
n

.
Решение. Эта сумма равна 0, иными словами, подмножеств четного по- рядка в X,
|X| = n, сколько подмножеств нечетного порядка. Если n само нечетно, то такое соответствие задается дополнением: если Y
⊆ X имеет нечетный порядок, то порядок Y = X
\ Y четен. В общем случае сно- ва воспользуемся той же самой идеей, что выше. А именно, фиксируем точку x
∈ X и рассмотрим отображение inv
x
: X
−→ X, определенное посредством inv
x
(Y ) = Y
4 {x}. Иными словами, мы добавляем элемент
x к подмножеству Y , если он там не содержится, и выбрасываем x из Y ,

364
если он там содержится. Ясно, что inv
x
обратимо
152
и переводит четные подмножества в нечетные.
4.4. Вычислите сумму

2n
0

+

2n
2

+

2n
4

+ . . . +

2n
n
1

при нечетном n и сумму

2n
1

+

2n
3

+

2n
5

+ . . . +

2n
n
1

при четном n.
Указание. Скомбинируйте результаты двух предыдущих задач и восполь- зуйтесь симметрией или доверьтесь внутреннему чутью Mathematica.
В следующей задаче используется еще одно ключевое соображение, под- счет двумя способами.
4.5. Докажите, что
n
X
m=0
m

n
m

= n2
n
1
.
Решение. Как левая, так и правая части представляют этого равенства представляют собой посчитанный двумя способами порядок множества
{(x, Y ) ∈ X × 2
X
| x ∈ Y },
где
|X| = n. А именно, как мы знаем из предыдущих задач, каждый эле- мент x
∈ X содержится ровно в половине подмножеств Y ⊆ X. Всего в X
имеется n элементов и 2
n
подмножеств, что как раз и дает правую часть.
С другой стороны, количество m-элементных подмножеств в X равно

n
m

и каждое из них содержит m элементов — а это и есть левая часть.
4.6. Докажите, что
n
X
m=0
(
1)
m
m

n
m

= 0.
Вот — по принципу музыка навеяла — еще одна иллюстрация того, что
Mathematica считает суммы как умеет: используя суммирование Бернул- ли—Эйлера, интегральные представления, алгоритмы Адамчика и Госпе- ра—Цайльбергера, pattern matching, и все такое. В возникающем при этом ответе как правило фигурируют значения специальных функций, в первую очередь гипергеометрических, но не только! Чтобы получить ответ в привычной форме, нужно с ним поэкспериментировать.
4.7. Вычислите сумму
n
X
m=1
(
1)
m
m

n
m

152
В действительности inv
x
является инволюцией, т.е. (inv
x
)
2
= id
X

365
Ответ. В терминах Mathematica сумма записывается как
Sum[(-1)^(i-1)/i*Binomial[n,i],
{i,1,n}]
и равна n-му гармоническому числу H
n
=
n
X
m=1 1
m
, представляемому в системе как HarmonicNumber[n]. С использованием FullSimplify можно убедиться, что она также равна
EulerGamma+PolyGamma[0,1+n],
где EulerGamma - константа Эйлера, а PolyGamma[0,x] - функция ди- гамма ψ(x), встречавшиеся нам в Модуле 1. При некотором желании этот ответ может быть получен и элементарными методами, но мы этого делать не будем
153 4.8. Докажите, что
n
X
m=0
m
2

n
m

= n(n + 1)2
n
2
.
Указание. Несколько проще вычислить сумму
n
X
m=0
m(m
1)

n
m

к которой можно применить тот же прием, что в предыдущей задаче. Ины- ми словами, мы предлагаем воспользоваться равенством
m
2
= 2

m
2

+

m
1

=

m
2

+

m + 1 2

.
Очевидно, что эта идея обобщается на суммы вида
n
X
m=0
m
l

n
m

но, так как выражение x
l
через биномиальные коэффициенты использует числа
Стирлинга или числа Эйлера, то мы вернемся к этой теме позже.
Вот еще одна вариация на основную тему настоящего параграфа, тож- дество внесения-вынесения.
4.9. Докажите тождество
n

n
1
m
1

= m

n
m

.
Решение. Это тождество получается, если подсчиать двумя способами порядок множества
{(x, Y ) ∈ X ×
V
m
(X)
| x ∈ Y },
153
см., например, Дж.Риордан. Комбинаторные тождества.— М: Наука, 1982, 255 C.

366
где
|X| = n. В самом деле, количество m-элементных подмножеств множе- стве X равно

n
m

и каждое из них содержит m элементов — это правая часть. С другой стороны, как мы видели в первой задаче, для каждого из
n элементов x
∈ X имеется ровно

n
1
m
1

содержащих его m-элементных подмножеств.
Тождество внесения-вынесения часто переписывают также в виде

n
m

=
n
m

n
1
m
1

=
n
n
− m

n
1
m

.
5. Некоторые важнейшие тождества.
154
Известны многие тысячи тождеств, связанных с биномиальными коэф- фициентами
155
. У нас нет ни возможности, ни желания обсуждать здесь все эти тождества. Вбросим, тем не менее, пригоршню простейших тож- деств, которыми мы будем постоянно пользоваться.
Одним из самых полезных тождеств для биномиальных коэффициен- тов является соотношение Вандермонда, называемое еще формулой свертки Вандермонда. Это еще одна иллюстрация разбиения на слу- чаи, только случаев здесь не два, а l + 1.
5.1. Докажите тождество

m + n
l

=
l
X
i=0

m
i

n
l
− i

.
Решение. Представим множество порядка m+n как дизъюнктное объеди- нение X
t Y двух множеств: m-элементного множества X и n-элементного множества Y . По определению левая часть равна количеству l-элементных подмножеств Z
⊆ X t Y . С другой стороны, если Z, |Z| = l, то пере- сечение Z
∩ X может априори иметь любой порядок 0 ≤ i ≤ m. В этом случае порядок Z
∩ Y равен l − i. Обратно, если U ⊆ X и V ⊆ Y два подмножества такие, что
|U| + |V | = l, то так как U ∩ V = , порядок
Z = U
∪ V равен |Z| = |U| + |V | = l. Имеется

m
i

способов выбрать
i-элементное подмножество U
⊆ X и для каждого из них способов

n
l
− i

выбрать (l
−i)-элементное подмножество V ⊆ Y . Осталось просуммировать все эти взаимоисключающие возморжности.
154
Il est absurde de diviser les ´
ecrivains en bons et en mauvais. D'un cˆ
ot´
e, il y a mes amis,
et de l'autre, le reste (фр.) – Нелепо делить писателей на хороших и плохих. С одной стороны, есть мои друзья, с другой — все остальные. c
Philippe Soupault. Manifeste
Dada
155
Несколько десятков таких тождеств и много дальнейших ссылок можно найти в книге Р.Грехем, Д.Кнут, О.Паташник. Конкретная математика. Основание информати- ки — Мю: Мир, 1998. 703 С.

367
Обычное истолкование этого тождества таково. Выбрать l человек из группы, в которой m женщин и n мужчин
156
можно

m + n
l

способа- ми. С другой стороны, можно вначале выбрать i женщин

m
i

способа- ми, а потом добрать l
− i мужчин

n
l
− i

. Таким образом, всего имеется

m
i

n
l
− i

способов выбрать l человек, из которых i женщины. По за- гадочным причинам некоторые авторы называют опубликованное в 1772
году соотношение Вандермонда тождеством Коши — when Mozart was my age, he was dead for six years. Впрочем, Кнут отмечает, что Чжу Ши-
Чжие опубликовал этот результат еще в 1303 году, но об этом ничего не было известно в Европе до 1950-х годов.
В частном случае l = m = n тождество Вандермонда принимает следу- ющую форму:

2n
n

=
X n
i

2
.
5.2. Докажите следующее обобщение тождества Вандермонда:

n
1
+ n
2
+ . . . + n
s
m

=
X
i
1
+i
2
+...+i
s
=m

n
1
i
1

n
2
i
2

. . .

n
s
i
s

.
5.3. Докажите тождество
l
X
i=0
(
1)
m+l

n
m

m
l

= δ
ml
.
Следующее тождество является широким обобщением тождества внесе- ния-вынесения.
5.4. Докажите электоральное тождество

n
m

m
l

=

n
l

n
− l
m
− l

=

n
l

n
− l
n
− m

.
Решение. Нужно лишь посчитать двумя способами порядок множества
{(Y, Z)
V
m
(X)
×
V
l
(X)
| Y ⊇ Z},
где
|X| = n. В самом деле, имеется

n
m

способов выбрать m-элементное подмножество Y
⊆ X и для каждого из них

m
l

способов выбрать l- элементное подмножество Z
⊆ Y , что и дает левую часть. С другой сторо- ны, имеется

n
l

способов выбрать l-элементное подмножество Z
⊆ X и для
156
Это рассуждение опирается на следующее экстраматематическое предположение:
среди любых трех обыкновенных людей по крайней мере двое одного пола
Подробнее по поводу этой версии принципа Дирихле см.
§ 3 Главы 8.

368
каждого из них

n
− l
n
− m

способов выбрать (m
− l)-элементное подмноже- ство U в n
−l-элементном множестве X\Z, дополняющее Z до l-элементного множества.
Название этого тождества связано со следующей интерпретацией в тер- минах двуступенчатых выборов. Съезд партии должен избрать централь- ный комитет в составе m голов и политбюро в составе l членов.
В партии вымогателей вначале съезд избирает центральный комитет,
а потом центральный комитет из своего состава избирает политбюро.
В партии воров вначале съезд избирает политбюро, а потом дополни- тельно он же избирает m
− l голов центрального комитета, не входящих в политбюро.
Доказанное только что тождество утверждает, что результат выборов не зависит от используемой процедуры.
Соотношение, определяющее треугольник Паскаля — это так называе- мое рекуррентное соотношение треугольного типа. Итерируя его, легко получить диагональные рекуррентные соотношения. Чтобы понять,
почему они так называются, найдите входящие в них коэффициенты в тре- угольнике Паскаля.
5.5. Докажите, что

n + 1
m

=

n
m

+

n
1
m
1

+

n
2
m
2

+ . . . +

n
− m
0

.
Решение. Это тождество тоже допускает простое комбинаторное истолко- вание. А именно, пусть X =
{0, 1, 2, . . . , n}. Коэффициент

n + 1
m

в левой части есть количество m-элементных подмножеств в X. С другой стороны,

n
− i
m
− i

выражает количество m-элементных подмножеств Y
⊆ X таких,
что i наименьший индекс, не принадлежащий Y .
5.6. Докажите, что

n + 1
m + 1

=

n
m

+

n
1
m

+

n
2
m

+ . . . +

m
m

.
Найдите комбинаторное истолкование этого тождества.
5.7.
Напишите рекуррентную программу, вычисляющую биномиальные коэффициенты с помощью диагональных рекуррентных соотношений. Ка- кие граничные условия понадобятся Вам при этом?
5.8. Докажите тождество шестиугольника:

n
1
m
1

n
m + 1

n + 1
m

=

n
1
m

n
m
1

n + 1
m + 1

.
Чтобы понять, почему оно так называется, найдите эти коэффициенты в треугольнике Паскаля.

369
§ 2. Списки и последовательности
Аз есмь Алфа и Омега, начало и конец, первый и последний.
Откровение Святого Иоанна Богослова, Глава 22–13
List, list, oh, list!
William Shakespeare, Hamlet
В этом параграфе мы начинаем обсуждать технику работы со списками.
Как концептуально, так и инструментально понятие списка является основой
157
языка Mathematica. Тому, кто не овладел йогой работы со списками и всем богатством встроенных функций для структурных мани- пуляций над ними, применения функций к спискам и их частям и т.д., Ma- thematica представляется либо просто большим калькулятором наподобие
MathCad, либо еще одним языком программирования. В действительности подлинная мощь этого языка раскрывается только в тот момент, когда
Вы начинаете систематически использовать списки вместо процедур или рекурсии.
1. Списки и последовательности.
158
С математической точки зрения список и последовательность это при- мерно одно и то же, но между ними существует чрезвычайно важное син- таксическое различие. Дело в том, что многие функции имеют формат f[
{x,y,z}], т.е. работают со списками аргументов, а другие — формат f[x,y,z], т.е. работают с последовательностями аргументов. С точки зре- ния языка это различие в высшей степени существенно, так как у функции f[
{x,y,z}] один аргумент, а у функции f[x,y,z] — три! С другой сторо- ны, задавать последовательность в форме x, y, z без заголовка синтаксиче- ски неправильно. Поэтому Sequence используется как пустой заголовок,
который самоликвидируется при фактической подстановке последователь- ности в качестве последовательности аргументов любую другую функцию.
{x,y,z}
List[x,y,z]
список с компонентами x, y, z
x,y,z
Sequence[x,y,z]
последовательность x, y, z
В Computer Science принято говорить об элементах списка, множестве элементов списка etc., там где в действительности идет речь о его ком- понентах, множестве компонент, etc. Так часто будем поступать и мы,
хотя с математической точки зрения это совершенно неверно. Дело в том,
что с математической точки зрения список
{x,y,z} является тупелем, в
157
В стандартных пакетах функция List используется значительно чаще, чем любая другая функция, а именно, 24293 раза, почти в два раза чаще, чем основные команды функционального программирования: Pattern — 14928 раза, Blank — 14746 раза, Set
— 13501 раза, и в 2–5 раз чаще, чем основные арифметические операции Times — 11083
раза, Power — 6536 раза, Plus — 5544 раза.
158
Все состоит из атомов, но кофе — из очень хороших атомов. c
Демокрит.

370
данном случае упорядоченной тройкой (x, y, z), и ни в одной теоретико- множественной интерпретации тупеля (x, y, z) компоненты x, y и
z
не являются его элементами.
1.1. Задайте слияние списков в терминах функции Sequence.
Решение. Нужно убрать скобки вокруг каждого из списков, приписать их друг к другу и снова поставить скобки:
myjoin[x ,y ]:=List[Apply[Sequence,x],Apply[Sequence,y]]
Список может быть вложенным = nested, иными словам, его компо- ненты, компоненты компонент и т.д. могут сами быть списками. Проверка принадлежности элемента списку — или какой-то из его частей, частей его частей и т.д. — производится при помощи одной из следующих команд.
MemberQ[x,y]
y встречается в списке x
MemberQ[x,y,d]
y
входит в список x на уровне
≤ d
MemberQ[x,y,
{d}]
y входит в список x на уровне d
FreeQ[x,y]
y не входит в список x
Понятие уровня детально обсуждается Модуле 2, и мы вернемся к нему при обсуждении вложенных списков. Пока отметим лишь, что, например,
x не встречается в списке
{{x}}, но x входит в этот список на уровне 2.
Функцию MemberQ не следует путать с функцией Element, которая вы- зывается в формате Element[x,domain] и проверяет принадлежность эле- мента x домену domain.
1.2. Принадлежит ли число 1. списку
{1,2}?
Все обычные арифметические операции, числовые функции, многие ком- бинаторные и теоретико-числовые функции, большинство обычных тестов и некоторые другие внутренние функции имеют атрибут Listable. Это значит, что их применение автоматически распределяется по спискам оди- наковой длины. Точный список таких функций можно узнать посредством
Select[Names["*"],MemberQ[Attributes[#],Listable]&]
Остальные функции можно принудительно распределить по спискам по- средством Thread или чего-нибудь в таком духе.
1.3. Скажите, не используя компьютер, чему равно
{a,b}+{c,d}, {a,b}*{c,d}, {a,b}/{c,d}, {a,b}^{c,d}?
А теперь проверьте.
1.4. Скажите, не используя компьютер, чему равно
Prime[
{2,3,5}], PrimePi[{2,3,5}], PrimeQ[{2,3,5}]?
А теперь проверьте.
1.5. Скажите, не используя компьютер, чему равно
Binomial[
{5,7},{2,3}],
StirlingS2[
{5,7},{2,3}]?
Ответ. Ну,
n
7 3
o в уме, это вряд ли, 301 все-таки.

371
Длина списка — не считая заголовка List! — и количество уровней вложенности — считая заголовок List! — находятся при помощи функций
Length и Depth.
Length[z]
длина списка z, не считая заголовка
Depth[z]
глубина списка z, считая заголовок
В Mathematica все обычные операции с элементами списками выпол- няются в произвольном месте списка, поэтому все кошерные програм- мистские деликатесы, типа различий
по типу элементов: односортные, многосортные;
по выделению памяти: фиксированная/переменная длина;
по принципу связи: массивы, связанные списки, дважды связанные списки, etc.;
по набору операций: стеки, очереди, деки, etc.;
и тому подобное,
не имеют здесь никакого значения.
2. Генерация списков.
Основной командой генерации векторов, матриц и любых других списков в языке Mathematica является команда Table. Вызванная с одним итера- тором команда Table[f[i],
{i,m,n}] порождает список значений функции
f в точках i = m, m + 1, . . . , n. Вызванная с двумя итераторами команда
Table[f[i,j],
{i,k,l},{j,m,n}]
порождает вложенный список значений функции двух аргументов f в парах (i, j), где i = k, k + 1, . . . , l, j = m, m + 1, . . . , n. Этот список будет организован как матрица, причем итератор i считается внешним, а j
внутренним, иными словами, i нумерует строки, а j — позиции внутри строк. Два принципиальных момента здесь таковы:
матрица трактуется как строка, составленная из строк,
внутренние итераторы пишутся последними.
Команда Array является просто сокращением команды Table со сжатой формой итераторов. Обычно мы вообще не пользуемся командой Array, так как полная форма итераторов в Table представляется нам более удобной и наглядной.
Apply[List,f[x1,...,xn]]
тупель
{x
1
, . . . , x
n
}
Table[f[i],
{i,1,n}]
таблица значений функции f
Table[f[i,j],
{i,1,m},{j,1,n}] ibid., для функции двух аргументов
Array[f,
{m}]
массив значений функции f
Для порождения чрезвычайно часто встречающихся в программирова- нии и вычислительной математике таблиц равноотстоящих = equally

372
spaced чисел служит специальная команда Range, а для порождения таб- лиц, состоящих из символов ASCII-кода – команда CharacterRange, кото- рая, однако, оперирует с символами не как с математическими, а как с типографскими сущностями, а именно, стрингами длины 1. Чтобы пре- вратить типографские символы в математические, нужно применить к ним функцию ToExpression. При этом следует иметь в виду, что далеко не вся- кий стринг конвертируется в правильно составленное выражение!
Range[n]
тупель
{1, . . . , n}
Range[m,n]
тупель
{m, . . . , n}
Range[m,n,d]
тупель
{m, m + d, . . . , m + b(n − m)/dc}
CharacterRange["x","y"]
фрагмент
{x, . . . , y} таблицы ASCII
Обратите внимание, что аргументы функции Range совсем не обязаны быть целыми числами — a parte: они вообще не обязаны быть числами!
2.1. Породите список
{1000, 999, . . . , 2, 1}.
Решение. Первое, что приходит в голову, это Reverse[Range[1000]], но в серьезных вычислениях гораздо лучше Range[1000,1,-1].
2.2. Породите список
{0, π/2, π, 3π/2, . . . , 10π}
Решение. Конечно, можно так, Pi/2*Range[0,20], но почему не сразу

1   ...   25   26   27   28   29   30   31   32   ...   38


написать администратору сайта