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

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


Скачать 4.43 Mb.
НазваниеНастоящий учебник посвящен системе Mathematica прикладному пакету компьютерной алгебры, при помощи которого можно решать любые задачи, в которых в той или иной форме встречается математика
АнкорМатематика
Дата11.05.2022
Размер4.43 Mb.
Формат файлаpdf
Имя файла106-108.pdf
ТипУчебник
#521834
страница7 из 38
1   2   3   4   5   6   7   8   9   10   ...   38
RegionPlot. Обратите внимание, что значение этой опции распространя- ется на RegionPlot, но не на GraphicsGrid. Почему?
Простейшая двумерная графика. Мы не будем пытаться сколь- нибудь систематически описывать здесь технику построения двумерных и,
тем более, многомерных картинок – эта тема требует отдельного рассмот- рения.
33
Ограничимся построением двух знаменитых картинок. При этом мы не стремимся здесь дать наиболее короткую или эффектную програм- му, а приводим такое описание, где смысл каждой команды должен быть понятен начинающему. В действительности, мы обычно не вводим ника- ких координат руками, а вычисляем их (как таблицы, решения уравнений или что-нибудь в таком духе), после чего применяем к списку координат
33
В материалах Documentation Center визуазизации данных и построению графиков посвящен специальный раздел Graph Drawing

103
графические примитивы посредством конструкций типа Map[Point,...],
Map[Line,...] и т.д. Получающиуся текст не намного короче, но имеет более прозрачную с точки зрения опытного пользователя структуру и при этом резко уменьшается вероятность ошибки.
Первый из приведенных ниже текстов порождает изображение плоско- сти Фано — проективной плоскости над полем из двух элементов. Не углубляясь, поясним, что в терминах этой картинки описывается умноже- ние семи мнимых единиц в алгебре октав Кэли:
In[103]:=rt=Sqrt[3]/2;
nodes=
{{0,0},{1,0},{2,0},{1,2*rt},
{1,2*rt/3},{1/2,rt},{3/2,rt}};
Show[Graphics[
{
{AbsolutePointSize[5],
Map[Point,nodes]
},
{AbsoluteThickness[1.5],
Line[
{{0,0},{2,0},{1,2*rt},{0,0}}],
Line[
{{0,0},{3/2,rt}}],
Line[
{{2,0},{1/2,rt}}],
Line[
{{1,2*rt},{1,0}}],
Circle[
{1,2*rt/3},2*rt/3]}}]]
Рис

Плоскость Фано
Второй текст порождает рисунок из Альмагеста, изображающий постро- ение правильного пятиугольника при помощи циркуля и линейки:

104
In[104]:=Show[Graphics[
{
{AbsolutePointSize[4],
Point[
{-1/2, 0}],
Point[
{-1/2+Sqrt[5]/2,0}],
Point[
{Cos[2*Pi/5],Sin[2*Pi/5]}],
Point[
{Cos[2*Pi/5],-Sin[2*Pi/5]}]},
{AbsoluteThickness[0.5],
Circle[
{0,0}, 1],
Circle[
{-1/2,0},Sqrt[5]/2],
Circle[
{-1/2+Sqrt[5]/2,0}, 1]}},
Axes->True]]
-1.5
-1.0
-0.5 0.5 1.0 1.5
-1.0
-0.5 0.5 1.0
Рис.18: Рисунок из Альмагеста
Мы не будем детально комментировать эти тексты, но большая часть того,
что происходит, понятна сама по себе:
Команда Graphics соединяет определенные в ее теле графические при- митивы в составной двумерный объект формата Graphics, который после этого обрабатывается как единое целое.
Команда Show отображает этот графический объект на экране. У начи- нающего в этом месте должен возникнуть вопрос, а что еще можно сделать с графическим объектом, кроме как отобразить его на экране? Ну, с ним можно много чего делать: вместо этого мы могли бы, например, сразу запи- сать его в файл, включить его в определение другого графического объекта или мультипликации, преобразовать в другой формат, изменить настройки опций, применить к нему какое-то геометрическое преобразование и т.д.
Следующие три типа объектов называются графическими примити- вами, при помощи них строятся различные элементы картинки, в данном случае точки, линии и окружности:

105
Примитив точка Point[{x,y}] определяет точку (x, y) с координатами
x и y.
Примитив линия Line[{{u,v},{x,y}}] определяет отрезок с конца- ми (u, v) и (x, y). Вызванный с более длинным списком координат этот примитив порождает ломаную, состоящую из отрезков, соединяющих по- следовательные точки. Например, Line[
{{u,v},{x,y},{z,w}}] состоит из двух отрезков, а именно, отрезка с концами (u, v) и (x, y) и второго отрезка с концами (x, y) и (z, w). В случае, когда последняя точка списка совпадает с первой, мы получим замкнутую ломаную. Например,
Line[
{{u,v},{x,y},{z,w},{u,v}}]
изображает треугольник с вершинами (u, v), (x, y) и (z, w).
Примитив окружность Circle[{x,y},r] определяют окружности ра- диуса r с центром в (x, y).
Кроме того, в системе имеется много других графических примитивов, на- пример, Rectangle, Disk и Polygon для закрашенных фигур, Raster, Post-
Script, Text и т.д.
Графические директивы, применненные к соответствующим прими- тивам, задают значения параметров, которые применяются при их постро- ении:
Директива абсолютный размер точки AbsolutePointSize[d] зада- ет (абсолютный) размер точек в типографских пунктах.
Уже встречавшаяся нам при обсжудении графиков директива абсо- лютная толщина AbsoluteThickness[d] задает (абсолютную) толщину линий в типографских пунктах.
Обратите внимание на синтаксис!! Графические директивы (в отличие от опций, применяемых к объекту в целом) образуют список вместе с теми гра- фическими примитивами, к которым они относятся. Это сделано для того,
чтобы на одном и том же рисунке можно было рисовать точки разных раз- меров и линии разной толщины. Имеется большое количество других гра- фических директив: PointSize, задающая (относительный) размер точек,
Dashing и AbsoluteDashing для создания пунктирных линий, GrayLevel,
RGBColor, Hue и т.д.
Опция Axes->True предлагает включить в графический объект коор- динатные оси.
Построение графиков функций двух переменных. График функции двух переменных строится при помощи команды Plot3D, кото- рая порождает объект формата SurfaceGraphics. В простейшем варианте эта команда вызывается в формате:
Plot3D[f[x,y],
{x,a,b},{y,c,d}]
Эта команда порождает трехмерный график функции f (x, y) при x при меняющемся от a до b, и y меняющемся от c до d.

106
В одном отношении использование команды Plot3D радикально отли- чается от использования команды Plot.
А именно, Plot трактует спи- сок функций как предложение построить графики нескольких функций на одной картинке. При этом Plot может построить графики сколь угодно большого количества функций, это лимитируется только памятью Вашего компьютера и разрешением устройств вывода. В то же время первый ар- гумент команды Plot3D может быть либо одной функцией, либо списком из двух функций. Однако вызванная в формате
Plot3D[
{f[x,y],g[x,y]},{x,a,b},{y,c,d}]
команда Plot3D будет воспринята отнюдь не как пожелание построить гра- фики функций f и g на одной картинке. Нет, это пожелание построить график функции f , для которого затенение задается функцией g.
Приведем совсем простой пример использования команды Plot3D. Вос- произведенный на Рисунке 19 график функции cos(x
2
− y
2
) построен при помощи следующей команды:
In[105]:=Plot3D[Cos[x^2-y^2],
{x,-Pi,Pi},{y,-Pi,Pi},
MeshStyle->AbsoluteThickness[1],
BoxStyle->AbsoluteThickness[0.8],
PlotPoints->60,
PlotLabel->"Рис.
19: Cos[x^2-y^2]"]
Чтобы понять, что здесь происходит, нужно знать, что графический объект формата SurfaceGraphics состоит из большого количества данных, самы- ми важными из которых являются:
собственно поверхность с координатами (x, y, f(x, y)),
наброшенная на нее сетка или мешок Mesh,

107
подсветка Lighting,
ящик Box.
Кроме того, в полное описание объекта этого типа входят еще точка зре- ния ViewPoint, оси Axes, решетка Grid, текст Text и т.д.
Опция Shading->False убирает нюанс и введена исключительно для получения черно-белой картинки.
В обычных ситуациях мы никогда не используем эту опцию — для полу- чения изображения высокого качества на экране компьютера или цветном принтере поступают прямо противоположным образом. А именно, в этом случае мы обычно убираем не нюанс, а сетку Mesh->False. При этом по- лучается изображение, приближающееся по своим художественным досто- инствам к лучшим холстам и доскам Дени, Дали и Дельво.
Использование следующих двух опций полностью аналогично использо- ванию уже встречавшизся нам опций PlotStyle и AxesStyle. Они задают графические директивы, которые следует применять к соответствующим частям трехмерного графика:
Опция MeshStyle описывает стиль сеточных линий, в данном случае абсолютную толщину линий.
Опция BoxStyle описывает стиль охватывающего “ящика”, в дан- ном случае снова мы меняем только абсолютную толщину линий.
Опция PlotPoints показывает, в каком минимальном количестве точек следует вычислять значения функции. Вызванная в формате
PlotPoints->n эта опция предписывает команде Plot вычислять значение функции как минимум в n точках — после чего продолжать вычислять значения в про- межуточных точках для быстро осциллирующих функций.
По умолча- нию PlotPoints->25. Для команды Plot3D опция PlotPoints в формате
PlotPoints->n предписывает вычислять значения в n точках по каждой из координат. Чтобы вычислять значения в m точках по x и в n точках по y,
эту опцию следует задавать в формате
PlotPoints->
{m,n}.
Для получения графики высокого качества мы часто задаем PlotPoints-
>500 и даже PlotPoints->1000, что изначально требует вычисления мил- лиона значений функции и может занять некоторое.
Понятно, что это имеет смысл только, если Вы собираетесь выводить эту картинку на такое устройство, которое допускает соответствующее разрешение, и только если одновременно убрать сетку, положив Mesh->False.
Упражнение. Постройте воспроизведенный на рисунке 20 график функ- ции cos(x
2
+ y
2
).

108
Стоит подчеркнуть, что в объекте формата SurfaceGraphics хранится го- раздо больше информации, чем в видимом изображении. Например, этот объект сохраняет и те части поверхности, которые при просмотре с дан- ной точки зрения закрыты от зрителя другими частями. Однако эти части можно увидеть, если повернуть поверхность или изменить точку зрения.
Более того, опция HiddenSurface->False делает поверхность прозрачной и, таким образом, все части поверхности, обычно закрытые другими ее частями, становятся видимыми.
В завершение параграфа хотелось бы высказать надежду, что нам уда- лось показать некоторые ключевые приемы работы с графикой в системе
Mathematica, которые позволят читателю строить подобные изображенным картинки – и получать от этого удовльствие.
§ 7. Суммы, произведения, пределы
Рамануджан говорил, что богиня Намаккал внушала ему форму- лы во сне. Часто встав с кровати он (не) мог записать результаты и быстро проверить их . . . Рамануджан имел устойчивые религи- озные взгляды. Он особенно почитал богиню Намаккал.
Сеши Нараяна Айар и Рамачандра Рао, “Жизнь Рамануджана”
Я меньше всего хочу, чтобы Вы вскидывали руки вверх и воскли- цали: “Здесь есть что-то необъяснимое, таинственное проявление древней восточной мудрости.” Не верю я в эту древнюю восточ- ную мудрость.
Гарольд Годфри Харди
34
Системы компьютерной алгебры полностью обесценивают все традицион- ные навыки, которым обучают в курсах математического анализа, высшей
34
Г.Г.Харди, Двенадцать лекций о Рамануджане. — М., ИКИ, 2002, с.1–335; стр.13.

109
математики, теории дифференциальных уравнений.
Mathematica умеет вычислять пределы, ряды, бесконечные произведения, дифференцировать,
интегрировать, раскладывать в степенные и тригонометрические ряды, ре- шать дифференциальные уравнения и уравнения в частных производных и т.д. Более того, мы готовы утверждать, что она делает все эти вещи лучше,
чем любой неспециалист, и все еще лучше, чем подавляющее большинство профессиональных математиков.
Суммы. Одной из простейших и самых полезных команд системы является команда Sum.
А именно, Sum[f[i],
{i,m,n}] выражает сумму
n
P
i=m
f (i) значений функции f по i от m до n (с шагом 1). Обратите вни- мание на форму итератора
{i,m,n}, которая используется в большинстве итеративных команд системы. Эта форма взята из языка C, остальные универсальные системы компьютерной алгебры, такие как Axiom, Maple,
MuPAD используют i=m..n взятую из Pascal. По умолчанию шаг суммиро- вания равен 1, однако задание итератора в форме
{i,m,n,d} говорит, что
i должно меняться от m до n с шагом d.
Многие алгебраические выражения, многочлены, дроби и тому подобное часто удобно выражать в виде сумм. Вот, скажем, как проще всего ввести многочлен Тэйлора экспоненты:
In[106]:= Sum[x^n/n!,
{n,0,6}]
Out[106]=1+x+x^2/2+x^3/6+x^4/24+x^5/120+x^6/720
В
§ 1 мы уже обсуждали применение команды Sum для суммирования конкретных чисел. Однако это умеют делать и калькуляторы вроде Math- cad. Гораздо интереснее, что в Mathematica при помощи команды Sum мож- но производить все символьные манипуляции, которые могут встретиться начинающему, причем не только с конечными суммами, но и с бесконечны- ми рядами!
Символьное вычисление сумм. Совершенно замечательно, что суммы могут вычисляться не только в численном, но и в символьном виде,
причем один или оба предела суммирования могут быть бесконечными!
Что еще интереснее, пределы суммирования сами могут быть символами!!!
Именно этим и отличаются интеллигентные системы Maple и Mathematica от бездушных калькуляторов наподобие Matlab.
Следующий совершенно удивительный пример показывает, что Mathe- matica хорошо усвоила
35
, что такое многочлены Бернулли:
In[107]:= Do[Print[Sum[i^m,
{i,1,n}]],{m,1,8}]
Out[107]=1/2*n*(1+n)
1/6*n*(1+n)*(1+2*n)
35
По причинам исторического и психологического плана мы предпочитаем избегать напрашивающегося выражения понимает, которое было бы использовано в случае успеш- ного применения математической индукции в аналогичном контексте человеческим су- ществом.

110 1/4*n^2*(1+n)^2 1/30*n*(1+n)*(1+2*n)*(-1+3*n+3*n^2)
1/12*n^2*(1+n)^2(-1+2*n+2*n^2)
1/42*n*(1+n)*(1+2*n)*(1-3*n+6*n^3+3*n^4)
1/24*n^2*(1+n)^2(2-4*n-n^2+6*n^3+3*n^4)
1/90*n*(1+n)*(1+2*n)*(-3+9*n-n^2-15*n^3+5*n^4+
15*n^5+5*n^6)
A parte: еще бы ей этого не знать, если многочлены Бернулли и Эйлера являются основным инструментом суммирования полиномиальных рядов вообще.
Итеративная конструкция с Do и Print нам уже встречалась при об- суждении круговых многочленов. Первая из представленных здесь сумм,
традиционно называется суммой арифметической прогрессии и изучается в школе, вторая и третья часто обсуждаются в математических кружках,
но вот дальнейшие суммы, открытые в XVII веке Йоганном Фаульхабером и Яковом Бернулли
36
, известны главным образом только профессиональ- ным математикам. Поскольку невозможно представить, что все подобные суммы содержатся в системе в табличной форме (ниже мы приводим еще несколько примеров), это значит, что система в какой-то форме владеет идеей математической индукции.
В действительности, следующий пример должен убедить каждого мини- мально знакомого с предметом в том, что Mathematica все же не знает на память большинство сумм, а по-настоящему их вычисляет, причем делает это совершенно иначе, чем это свойственно человеку. Вот сумма, которую каждый будущий профессиональный математик открыл к возрасту пяти лет:
In[108]:= Sum[i,
{i,1,2*n-1,2}]
Out[108]=Floor[n]^2
Еще раз напомним, что вызов итератора в форме
{i,m,n,d} означает сум- мирование по i от m до n с шагом d. Таким образом, мы предложили системе просуммировать все нечетные числа от 1 до 2n
1. Видно, что здесь представлен не заученный ответ, а плод фактического (притом до- статочно сурового) размышления. Поскольку мы изначально подразуме- вали (хотя пока и не сообщили системе), что число n целое, мы видим,
что ценой небанального напряжения Mathematica сумела открыть форму- лу 1 + 3 + . . . + (2n
1) = n
2
. В действительности в языке системы есть средства, которые позволяют декларировать, что n является целым числом
(или, с точки зрения внутреннего языка Mathematica, имеет объектный тип
Integer):
спецификация доменов,
спецификация паттернов.
36
В.В.Прасолов, Многочлены. — М., МЦНМО, 2000, с.1–335; стр.135–137.

111
Эти средства, относящихся к более высоким сферам программирования,
мы здесь лишь упоминаем, но рассматривать не будем. Разумеется, по- сле провозглашения n целым, система сразу вернула бы ответ в форме n
2
Однако в
§ 5 нам уже встречалась команды Refine и Assuming, которые позволяет упростить ответ при определенных предположениях. Итак, сде- лаем еще одну попытку:
In[109]:= Refine[Simplify[Sum[i,
{i,1,2*n-1,2}],
Element[n,Integers]]]
Out[109]=n^2
Понятно, что здесь произошло? Мы наконец-то внятно объяснили системе,
что n целое. А именно, предположение Element[n,Integers] как раз и состоит в том, что n является элементом домена целых чисел Integers.
разумеется, применив вначале Refine с условием Element[n,Integers], а потом Simplify, мы тоже получили бы результат n
2
Теперь, когда мы знаем, что Mathematica не вытаскивает ответы из каких-то загадочных таблиц, а порождает их силой чистого разума, пред- ложим ей что-нибудь чуть более хитрое:
In[110]:= Sum[2^i/i!,
{i,1,n}]
Out[110]=-1+E^2*(1+n)*Gamma[1+n,2]/Gamma[2+n]
Появляющаяся в числителе функция Γ(x, y) — это неполная гамма- функция:
Γ(x, y) =
Z

y
t
x
1
e
−t
dt,
в знаменателе стоит обычная гамма функция Эйлера Γ(x) = Γ(x, 0). Вы действительно думаете, что и этот ответ можно извлечь из таблицы? И где то место, где может храниться такая Таблица?
Кратные суммы. Кратная сумма вида
n
P
i=m
l
P
j=k
f (i, j) выражается при помощи Sum[f[i,j],
{i,m,n},{j,k,l} Здесь мы первый раз встречаемся с явлением, понимание которого чрезвычайно существенно для правильного использования итерационных команд вообще и команд формирования спис- ков и работы с списками в особенности! Аналогичное соглашение действует для кратного интегрирования, построения графиков функций нескольких переменных и т.д. А именно, обратите внимание, что внутренние итерато- ры пишутся последними! Иными словами, Sum[f[i,j],
{j,k,l},{i,m,n}]
значит совершенно не то же самое, что Sum[f[i,j],
{i,m,n},{j,k,l}]. В
самом деле, при этой новой записи вначале происходит суммирование по i,
а уже потом суммирование по j, в то время как в нашей исходной сумме вначале происходило суммирование по j и только потом суммирование по
i. Разумеется, для конечных сумм, в том случае, когда пределы суммиро- вания внутренних сумм сами не зависят от i, порядок итераторов можно изменить, значение суммы при этом не меняется — именно этот прием и

112
называется изменением порядка суммирования. Однако для беско- нечных сумм, а также в том случае, когда k и l сами являются функциями от i, ничего подобного делать нельзя.
Проиллюстрируем это явление на простом но важном примере. В ком- пьютерной математике и анализе алгоритмов очень часто встречаются ча- стичные суммы гармонического ряда
H
n
= 1 +
1 2
+
1 3
+ . . . +
1
n
=
n
X
i=1 1
i
,
которые называются гармоническими числами.
В Mathematica есть специальное обозначение для H
n
, а именно HarmonicNumber[n], однако в дальнейшем мы иногда будем делать вид, что этого не знаем. Гармони- ческий ряд расходится — иными словами, H
n
стремятся к бесконечности,
хотя и очень медленно, порядка ln(n). Вот несколько первых гармониче- ских чисел:
In[111]:= Table[HarmonicNumber[n],
{n,1,12}]
Out[111]=
{1,3/2,11/6,25/12,137/60,49/20,363/140,761/280,
7129/2520,7381/2520,83711/27720,86021/27720
}
Так как Mathematica знает определение гармонического числа, то вычисле- ние Sum[1/i,
{i,1,n}] дает HarmonicNumber[n]. В прежние годы в качестве упражнения на математическую индукцию мы часто предлагали студентам вычислить сумму первых гармонических чисел, т.е. сумму
H
1
+ H
2
+ . . . + H
m
.
Разумеется, это один из тех случаев, когда формулировка задачи содер- жит подсказку, а именно, предложение вычислить сумму недвусмысленно указывает на то, что это возможно. А теперь сравните следующие два выражения:
Sum[1/i,
{n,1,m},{i,1,n}]
Sum[1/i,
{i,1,n},{n,1,m}]
Понятно, что эти выражения вычисляют? В первой сумме осуществля- ется суммирование вначале по i от 1 до n, а потом по n от 1 до m и это как раз то, что мы хотели. С другой стороны, во второй сумме сначала осу- ществляется суммирование по n от 1 до m, а потом все эти m одинаковых сумм (ведь 1/i не зависит от n) суммируются по i от 1 до n.
Таким образом, если Вы не уверены, что отчетливо понимаете, что здесь происходит, то вот Вам добрый совет: оформляйте кратные суммы обыч- ным в математике образом, с повторением команды Sum. Например, иско- мую сумму гармонических чисел можно еще выразить посредством
In[112]:= Sum[Sum[1/i,
{i,1,n}],{n,1,m}]
Out[112]=-1 - m + HarmonicNumber[1 + m] + m*HarmonicNumber[1 + m]

113
Это чуть длиннее и менее элегантно с программистской точки зрения, за- то не оставляет никакого места сомнению. Ясно, что здесь суммирование происходит вначале по i от 1 до n — это дает нам n-е гармоническое число
H
n
— а потом полученные результаты суммируются по n от 1 до m.
Уже весьма простые на вид кратные суммы при символьном вычислении часто приводят к достаточно замысловатым ответам. Попытка вычислить первую двойную сумму, которая приходит в голову,
In[113]:= Sum[1/(i+j),
{i,1,m},{j,1,n}]
Out[113]=-PolyGamma[0,1+n]+PolyGamma[0,1+m+n]
сразу приводит нас к функции дигамма ψ(x) = Γ

(x)/Γ(x) (логарифмиче- ская производная гамма-функции Эйлера). Ясно, что получение подобно- го ответа вручную в реальном времени лежит за пределами возможностей большинства профессиональных математиков, кроме избранных специали- стов по комбинаторике, теории чисел, классическому анализу и математи- ческой физике.
Бесконечные суммы. Mathematica умеет выражать многие беско- нечные суммы как значения элементарных или специальных функций:
In[114]:= Sum[1/(n!x^n),
{n,0,Infinity}]
Out[114]=E^(1/x)
In[115]:= Sum[1/n^3,
{n,1,Infinity}]
Out[115]=Zeta[3]
In[116]:= Sum[1/(n!n^3),
{n,1,Infinity}]
Out[116]=HypergeometricPFQ[
{1,1,1,1},{2,2,2,2},1]
В первом случае мы видим экспоненту, во втором — значение ζ(3) дзета- функции Римана, а фигурирующая в третьем ответе HypergeometricPFQ
представляет собой обобщенную гипергеометрическую функцию, которая возникает в самых разных вопросах математики, от комбинаторики и тео- рии чисел до математической физики.
Произведения. Формат команды Product полностью аналогично формату Sum. А именно,
Product[f[i],
{i,m,n}]
выражает произведение
n
Q
i=m
f (i) значений функции f по i от m до n (с ша- гом 1). Как видим, здесь применяется обычная форма итератора
{i,m,n}.
Как и в случае сумм, произведения могут использоваться для численных вычислений, такой пример мы уже приводили, и для короткой записи ал- гебраических выражений. Вот, например, как проще всего ввести гауссов многочлен, выражающий количество базисов в пространстве размерности
n над полем из q элементов:
In[117]:= Product[q^n-q^i,
{i,0,n-1}] /. n->10
Out[117]=(-1+q^10)(-q+q^10)(-q^2+q^10)(-q^3+q^10)(-q^4+q^10)
(-q^5+q^10)(-q^6+q^10)(-q^7+q^10)(-q^8+q^10)(-q^9+q^10)

114
Используемая в этом тексте замена /.
n->10 состоит из оператора /. или,
в полной форме, ReplaceAll и правила подстановки n->10. Примененные вместе они побуждают систему заменить n на 10 всюду, на протяжении од- ного вычисления. Преимущество такой конструкции перед присваиванием n=10 состоит в том, что n не приобретает постоянного значения, так что предшествующий текст может быть без всяких изменений включен в другое вычисление, в котором n имеет любое другое значение — или само явля- ется своим собственным значением, т.е. рассматривается как независимая переменная. Подробнее все нюансы, связанные с переменными и их значе- ниями, а также использованием присваиваний и подстановок, обсуждаются в Модуле 2.
Разумеется, Mathematica не будет автоматически раскрывать скобки в символьном выражении, получающемся в результате образования произве- дения, чтобы принудительно раскрыть скобки в конечном произведении,
нужно применить Expand или Distribute:
In[118]:= Product[1-x^i,
{i,1,10}]
Out[118]=(1-x)(1-x^2)(1-x^3)(1-x^4)(1-x^5)
(1-x^6)(1-x^7)(1-x^8)(1-x^9)(1-x^10)
In[119]:= Distribute[Product[1-x^i,
{i,1,10}]]
Out[119]=1-x-x^2+x^5+x^7+x^11-x^12-x^13-x^14-2*x^15+x^18+x^19+
x^20+x^21+3*x^22-x^25-x^26-2*x^27-2*x^28-x^29-x^30+
3*x^33+ x^34+x^35+x^36+x^37-2*x^40-x^41-x^42-x^43+
x^44+x^48+x^50-x^53-x^54+x^55
Как и в случае сумм, один или оба предела в задании итератора могут быть бесконечными. Скажем, вычисление эйлеровского произведения
In[120]:= Product[(1-1/Prime[n]^2)^(-1),
{n,1,Infinity}]
где Prime[n] обозначает n-е простое число, дает явное значение π
2
/6.
Проверка на порогах. Вот одно из наших излюбленных произве- дений, как из уважения к классикам XVIII века, так и конкретно с точки зрения сравнения интеллектуальных возможностей систем компьютерной алгебры и примазывающихся к ним:
2n
Y
i=1
i
(
1)
i
1
=
1
· 3 · 5 · . . . · (2n − 1)
2
· 4 · 6 · . . . · 2n
Предложите Вашей любимой системе вычислить это произведение. Досто- инство этого теста состоит в простоте формулировки и убийственной убеди- тельности ответа. Тот, кто понимает предмет, но не знаком с его историей,
должен в этот момент испытывать чувство культурного шока: ожидаем ли мы, что система может заметить, что в знаменателе стоит порядок окта- эдральной группы 2
n
n! — 2
n
n!

1   2   3   4   5   6   7   8   9   10   ...   38


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