Математика. Настоящий учебник посвящен системе Mathematica прикладному пакету компьютерной алгебры, при помощи которого можно решать любые задачи, в которых в той или иной форме встречается математика
Скачать 4.43 Mb.
|
карты. Сколько существует различных бриджевых рук? 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], но почему не сразу |