Top Banner
Министерство образования и науки Российской Федерации Воронежский государственный университет Д. Л. Дорофеев, А. В. Долгих, В. Е. Чернов, C. В. Артыщенко Компьютерный практикум по методам математической физики с использованием системы Mathematica. Основы работы с системой Mathematica Методическое пособие Воронеж — 2008
37

mathematica_part1

Sep 30, 2014

Download

Documents

MaxJeDaev
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: mathematica_part1

Министерство образования и науки Российской ФедерацииВоронежский государственный университет

Д. Л. Дорофеев, А. В. Долгих, В. Е. Чернов, C. В. Артыщенко

Компьютерный практикум по методам математической физики с

использованием системы Mathematica.

Основы работы с системой Mathematica

Методическое пособие

Воронеж — 2008

Page 2: mathematica_part1

Рекомендовано к опубликованию решением научно-методического

совета физического факультета от 5 декабря 2007 г., протокол № 55

Учебное пособие подготовлено на кафедре математической физикифизического факультета Воронежского государственного университета.

Рекомендуется для студентов 3 курса физического факультета.

для специальностей:

010801(013800) — радиофизика и электроника010803(014100) — микроэлектроника

и полупроводниковые приборы010701 — физика

2

Page 3: mathematica_part1

Содержание

1. Занятие 1. Первое знакомство с системойMathematica 4

1.1. Mathematica как калькулятор . . . . . . . . . . . . . . . . . 4

1.2. Объекты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.3. Символьные вычисления . . . . . . . . . . . . . . . . . . . 7

1.4. Справочная система . . . . . . . . . . . . . . . . . . . . . . 7

1.5. Математические функции . . . . . . . . . . . . . . . . . . . 8

1.6. Графика . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

1.7. Запись файла и выход из системы . . . . . . . . . . . . . . 10

2. Занятие 2. Математический анализ в Mathematica 10

2.1. Операции математического анализа . . . . . . . . . . . . . 10

2.2. Представление вещественных чисел . . . . . . . . . . . . . 12

2.3. Точность численных вычислений . . . . . . . . . . . . . . . 14

3. Занятие 3. Присвоения и подстановки вMathematica 17

3.1. Присвоение . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.2. Подстановки . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.3. Функции пользователя. . . . . . . . . . . . . . . . . . . . . 22

4. Занятие 4. Решение алгебраических уравнений

в Mathematica 25

4.1. Аналитическое решение алгебраических уравнений . . . . 25

4.2. Численное решение алгебраических уравнений . . . . . . . 29

4.3. Аналитическое решение трансцендентных уравнений . . . 30

5. Занятие 5. Обобщенные функции в Mathematica 31

5.1. Обобщенные функции как функционалы . . . . . . . . . . 31

5.2. Обобщенные функции как классы эквивалентности фунда-ментальных последовательностей . . . . . . . . . . . . . . . 32

5.3. Встроенные обобщенные функции . . . . . . . . . . . . . . 35

А. Использование специальных обозначений для набора вы-ражений в Mathematica 36

Список рекомендуемой литературы 37

3

Page 4: mathematica_part1

1. Занятие 1. Первое знакомство с системой

Mathematica

Система Mathematica представляет собой одну из наиболее мощ-

ных интегрированных систем компьютерной алгебры для персональныхкомпьютеров и предназначена как для численных, так и для символь-ных вычислений. Интерфейс системы для работы на платформе Win-

dows 9x/NT/2000/XP организован очень удобно и понятен без дополни-тельных разъяснений, если вы работали раньше с какими-либо другими

Windows-приложениями. Текст в рабочем окне системы представляет со-бой последовательность ячеек (cells). Каждая ячейка ограничена справа

квадратной скобкой. Ячейки могут объединяться в группы, что указы-вается дополнительными квадратными скобками справа (рис. 1). Группа

ячеек может быть свернута, при этом на экране остается только перваяячейка группы, а на нижнем конце объединяющей скобки появляетсясплошной треугольник (рис. 2). Для того чтобы развернуть группу, сле-

дует выполнить двойной щелчок по объединяющей скобке. Если теперьопять выполнить двойной щелчок по этой скобке, то группа снова свер-

нется.

Рис. 1. Пример открытой группы ячеек

1.1. Mathematica как калькулятор

Ячейки могут отображаться в одном из нескольких стилей (см. ме-ню Format/Style). Чтобы посмотреть или изменить стиль ячейки, можно

нажать правой кнопкой мыши на скобке соответствующей ячейки. В от-

4

Page 5: mathematica_part1

Рис. 2. Пример открытой группы ячеек

крывшемся контекстном меню выберите пункт Style. Если ячейка имеет

входной стиль (Input), то она может быть выполнена (evaluated). Дляэтого следует установить в эту ячейку текстовый курсор (для этого надо

завести в эту ячейку курсор мыши и выполнить одинарный щелчок ле-вой кнопкой мыши) и нажать Shift+Enter на основной клавиатуре, или

Enter на дополнительной клавиатуре. После выполнения ячейки ниженее появляется выходная ячейка, содержащая результаты вычислений.

Упражнение 1.1. Создайте и выполните следующую ячейку:

In : 2 + 2

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

символ ∗ или просто пробел, например 2 ∗ 2, или 2 2. Для ввода над-строчных и подстрочных знаков и для ввода специальных математиче-

ских символов используется палитра (palette) BasicInput, которую вывидите в правой части экрана. Если палитра на экране отсутствует, то

ее можно вызвать из меню File/Pallets/BasicInput. Щелчок мышью покнопке палитры приводит к появлению соответствующего символа в те-

кущей ячейке.

Упражнение 1.2. Освойте использование кнопок палитры BasicInput. На-

берите с их помощью выражение:

33

√256

+3√

3 9

5

Page 6: mathematica_part1

и вычислите его (обратите внимание на пробел между цифрами 3 и 9, озна-

чающий умножение).

Ответ:75

16

Несмотря на кажущееся удобство, палитра имеет один серьезный недо-

статок – ввод символов с помощью мыши является достаточно медлен-ным. Гораздо удобнее и быстрее пользоваться уже готовыми сочетаниямиклавиш для набора различных формул и символов (см. приложение А).

Mathematica может представить результат в десятичной форме,причем практически с любым требуемым числом знаков. В качестве при-мера выполните следующую ячейку:

In : Sqrt[2]√2√2.

N[√

2]

N[√

2, 20]

Упражнение 1.3. Вычислите значение exp(π

2) с точностью 1000 знаков.

1.2. Объекты

Информацию, вводимую при работе с документом, можно груборазделить на текст, не предназначенный для математической обработ-

ки и совокупность выражений (expressions), каждое из которых обра-батывается (выполняется) ядром системы. Именно выражения являютсяосновным типом данных в Mathematica. Выражения состоят из так на-

зываемых атомарных выражений, к которым относятся символы, чис-ла и строки.

Символы — основные именованные объекты. Имя символа пред-ставляет собой любую последовательность латинских строчных и заглав-ных букв (Mathematica их различает !), цифр и знака $. Имя не должно

начинаться с цифры.

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

писания. Все типы чисел могут содержать сколько угодно значащих цифр.

6

Page 7: mathematica_part1

1.3. Символьные вычисления

Mathematica может работать не только с числовыми выражениями,но и с символьными формулами, что является ее сильнейшим преиму-

ществом. В частности, она может выполнять различные алгебраическиепреобразования, такие как раскрытие скобок в алгебраических выраже-ниях или разложение на множители, решает алгебраические уравнения и

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

элементарных примеров таких операций приведены в следующих ячей-ках.

In :3x4 − 6x2 + 5 + 4x2 − 3

Simplify[(4x3 + 5x2 + 3) − 3(2x2 − 6x + 1)]

Expand[(3x + 2y)3]

Solve[x2 − 16x + 15 == 0, x]

Out :2 − 2x2 + 3x4

x(18 − x + 4x2)

27x3 + 54x2y + 36xy2 + 8y3

{{x → 1}, {x → 15}}

Обратите внимание, что имена встроенных функций (built-in functions) начинаются с больших букв, а их аргумент заклю-

чается в квадратные скобки!

Упражнение 1.4. Выполните следующие задания:

1) приведите подобные слагаемые в многочлене 2x5 − 6x4 +2x3 +11x4−5 + 7x2 + 6x5 − 3;

2) разделите 213x6+213x5+155x4−58x3−46x2+12x+12 на x2+x+1;

3) раскройте скобки в выражении (x + t − τ)2(t − τ);

4) решите уравнение x4 − x3 − 36x2 − 41x − 7 = 0.

1.4. Справочная система

Разумеется, возможности системы Mathematica несравненно ши-ре, чем это было показано в вышеприведенных элементарных примерах.Очень большой объем информации о ее возможностях вы найдете во

встроенной справочной системе. Получить информацию о какой-либо

7

Page 8: mathematica_part1

команде системы Mathematica можно, например, следующим образом.

Выберите пункт меню Help/Help Browser. В появившемся окне наберитеназвание какой-либо команды, и нажмите Enter. В нижележащем окнепоявится справочный текст. Он заканчивается строкой Futher Examples.

Щелкните по треугольнику слева. Появятся дополнительные примерыиспользования этой команды. Для более сложных команд появится толь-

ко перечень групп примеров. Каждая строка в этом перечне представля-ет собой свернутую последовательность ячеек.

1.5. Математические функции

Mathematica содержит очень большой набор математических функ-

ций. Одних только встроенных (built-in) свыше тысячи. Информация оних может быть легко получена с помощью справочной системы. Пере-

числим только несколько наиболее общеупотребительных. Их назначе-ние понятно из названий. Квадратный корень и экспонента могут бытьзаписаны также в обычной форме с помощью палитры BasicInput.

Sqrt[x],√

x, Exp[x], Log[x], Sin[x],Cos[x], Tan[x], ArcSin[x], ArcCos[x],

ArcTan[x], n!, Abs[x], Round[x], Random[x], Max[x, y, z], Min[x, y, z].

Упражнение 1.5. Вычислите ln 2, sin(32◦), | cos(3π/2)| с точностью 30

знаков.Указание: для перевода радиан в градусы воспользуйтесь командой Degree

Помимо элементарных функций в системе есть большое количество спе-

циальных математических функций.

1.6. Графика

Выполнение следующей ячейки приводит к построению графика

функции2

100x7 +

8

10x6 + 9x4 − 100x2 + 1 для x ∈ [−6, 4].

In : Plot[2

100x7 +

8

10x6 + 9x4 − 100x2 + 1, {x,−6, 4}]

8

Page 9: mathematica_part1

-6 -4 -2 2 4

-200

200

400

600

800

Аналогичным образом строятся трехмерные графики с помощью

команды Plot3D:

In : Plot3D[x4 − 100x2 + 100y2 − 2y4 + x y3, {x,−10, 10}, {y,−10, 10}]

-5

0

5

-5

0

5

-8000-6000-4000-2000

0

-5

0

5

Упражнение 1.6. Постройте графики функций:

1) y = (1 − 2 exp(−x)) cos(5x), x ∈ [−6, 6];

2) z = cos3(x) cos3(y) x ∈ [−π, π], y ∈ [−π, π].

Упражнение 1.7. Выполните следующие задания:

1) Получите справку по команде Together и просмотрите дополнительныепримеры. Используя эту команду, приведите к общему знаменателю

выражение:

1

n + 1+

n + 1

n + 2+

n + 2

n + 3.

9

Page 10: mathematica_part1

2) Определите, с помощью какой команды это выражение можно опять

разложить на дроби, причем простейшие. Выполните эту операцию.

3) Получите справку по команде Solve и просмотрите дополнительныепримеры (Further Examples). Используя эту команду, решите систе-

му уравнений:

u + 2v + 3w = 1,

2u + 3v + 4w = 2,

v + w = 3.

4) Найдите в справочной системе информацию по гипергеометрическим

функциям и вычислите значение 2F1(1, 2; 1; 3/10). Ответ:100

49.

5) Найдите информацию о функциях Бесселя и постройте графики функ-

ций J0(x), J1(x) в интервале 0 < x < 10.

1.7. Запись файла и выход из системы

Производится также, как и в других приложениях Windows. Для

этого следует выбрать в меню File пункт Save as, в появившемся диа-логовом окне выбрать нужный диск и каталог, вписать имя файла инажать кнопку Сохранить. Чтобы выйти из программы следует нажать

на кнопку Exit в том же меню File.

2. Занятие 2. Математический анализ в Mathematica

2.1. Операции математического анализа

Просмотрите справочную информацию по командам Limit, D, Int-egrate, NIntegrate, Series (справочные статьи по этим командам, так-

же как и по другим командам, связанным с операциями, относящимися кматематическому анализу, содержатся в разделе Help/Built-in-Functions/

Algebraic Manipulation/Calculus).

Обратите внимание, что выражение, полученное при помощи ко-манды Series, содержит член O[x]n. Он указывает Mathematica , чтовыражение, содержащее O[x]n надо рассматривать как ряд с членами

малыми относительно xn−1. Чтобы привести результат команды Series

10

Page 11: mathematica_part1

к нормальному выражению, следует воспользоваться командой Normal:

In :Series[Exp[x], {x, 0, 3}]Normal[Series[Exp[x], {x, 0, 3}]]

Out :1 + x +x2

2+

x3

6+

x4

24+ O[x]4

1 + x +x2

2+

x3

6+

x4

24

Упражнение 2.1. Выполните следующие задания:

1) Вычислите пределы:

a) limn→∞

n( n

√x − 1) (x > 0) Ответ: Log[x];

b) limn→∞

n∑

k=1

sin(k a

n2) Ответ: a/2.

2) Вычислите производные

a) ( x

√x)′

Ответ: x1

x−2(1 − Log[x]);

b)(

(sinx)cosx + (cosx)sinx)′

Ответ: Sin[x]Cos[x](

Cos[x]Cot[x] − Log[Sin[x]]Sin[x])

+ Cos[x]Sin[x](

Cos[x]Log[Cos[x]] − Sin[x]Tan[x])

;

c)∂6u

∂x3∂y3если u = x3 sin y + y3 cos x

Ответ: −6 Cos[y] + 6 Sin[x].

3) Вычислите интегралы

a)

arcsin(ex)

exdx

Ответ: x − ArcSin(ex) − Log(1 +√

1 − e2x);

b)

∫ ∞

1

ch−ax dx

Ответ:

√πGamma[a2]

Gamma[1+a2 ]

− 1

a

(

(2e)a Hypergeometric2F1[a

2, a, 1 +

a

2,−e2]

)

;

c)

∫ 2

1

xx dx

Ответ: 2.05045.

11

Page 12: mathematica_part1

4) разложите в степенной ряд следующие функции (в разложении учи-

тывайте члены не выше шестого порядка, разложение производите вокрестности нуля)

a) ln(1 + x)

Ответ: x − x2

2+

x3

3− x4

4+

x5

5− x6

6+ O[x]7;

b) ex

Ответ: 1 + x +x2

2+

x3

6+

x4

24+

x5

120+

x6

720+ O[x]7;

c) e−x2

Ответ: 1 − x2 +x4

2− x6

6+ O[x]7.

2.2. Представление вещественных чисел

Вещественное число в Mathematica характеризуется следующими

двумя параметрами:

• Precision — приближенно равно количеству цифр (десятичных зна-

ков) в числе.Замечание: Для чисел с машинной точностью Precision[x] равнозначению параметра $MachinePrecision, а для чисел с произволь-

ной точностью Precision[x] равно количеству знаков после десятич-ной точки плюс десятичный логарифм модуля числа.

• Accuracy — количество цифр после десятичной точки.

В качестве примера выполните следующую ячейку:

In : a = 9876543210.01234567890123456789

Precision[a]

Accuracy[a]

Out :9.8765432100123456789012345679× 109

29.9946

20

Однако следует учитывать, что Precision[a] и Accuracy[a] показыва-

ют количество знаков во внутреннем представлении числа, тогда как на

12

Page 13: mathematica_part1

экране это число может отображаться с меньшим числом знаков:

In :a =√

2.

Precision[a]

Out :1.41421

MachinePrecision

Здесь Mathematica выводит на экран лишь 6 знаков числа a, тогда как впамяти машины она хранит значительно больше — 16 знаков. Их можно

вывести на экран, используя команду InputForm:

In : InputForm[a]

Out : 1.4142135623730951

Mathematica различает два типа внутреннего представления веществен-

ных чисел — числа с машинной точностью (machine-precision numbers) ичисла с произвольной точностью (arbitrary-precision numbers). Числа смашинной точностью содержат фиксированное количество знаков, в

типичном случае — 16, так что значение Precision для них всегда равно16. В отличие от них, числа с произвольной точностью могут со-

держать произвольное, практически сколь угодно большое, количествознаков, и значение Precision для них может быть любым. Операции с

числами с машинной точностью в общем случае выполняются быстрее,чем с числами с произвольной точностью, однако использование чиселс произвольной точностью позволяет получить практически сколь угод-

но точный результат. При вводе вещественного числа Mathematica самаопределяет, какой тип представления ей следует использовать: если для

числа вводится только 16 знаков или меньше, то Mathematica представ-ляет его как число с машинной точностью (т. е. 16-значное), если же

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

In : Precision[210.]

Precision[9876543210.]

Precision[9876543210.0123456789]

Out :MachinePrecision

MachinePrecision

19.9946

Здесь в первых двух случаях Mathematica использовала представление

с машинной точностью, а в последнем — с произвольной точностью. Для

13

Page 14: mathematica_part1

того чтобы определить как именно представлено число, можно также

использовать тест MachineNumberQ

In :MachineNumberQ[9876543210.]

MachineNumberQ[9876543210.0123456789]

Out :True

False

то есть тест подтверждает, что первое вещественное число Mathematicaпредставляет как число с машинной точностью, а второе — иначе, тоесть как число с произвольной точностью.

2.3. Точность численных вычислений

Следует различать точность представления вещественного числаот точности самого этого числа, как результата тех или иных числен-

ных операций. Скажем, интеграл, вычисленный с помощью командыNIntegrate:

In : a = NIntegrate[11Cos[11x], {x, 0, π/2}];по умолчанию представляется как число с машинной точностью, то естьсодержащее 16 знаков:

In : MachineNumberQ[a]

Precision[a]

InputForm[a]

Out :True

MachinePrecision

−1.0000000000000029

Однако можно видеть, что не все из этих 16 знаков являются верными— точное значение интеграла равно -1, так что последние два знака —

неверные. Таким образом, в общем случае точность результата числен-ных вычислений отличается от точности его представления.

Алгоритмы, используемые в Mathematica для численных вычисле-ний, позволяют оценить точность получаемого результата, и вычисления

прекращаются как только требуемая точность достигается. Если же до-стичь ее Mathematica не может, то она выдает комментарий, в которомвысказывает свои соображения относительно причин этого и способов

улучшения результата. При этом следует учитывать, что Mathematica,

14

Page 15: mathematica_part1

разумеется, не может определить действительную точность результата,

она может только оценить ее, и ее оценка может отличаться от действи-тельной точности.

Требуемая точность задается с помощью опций PrecisionGoal иAccuracyGoal:

• PrecisionGoal — общее число требуемых точных знаков в резуль-тате (по умолчанию 6 знаков).

• AccuracyGoal — число требуемых точных знаков после десятичной

точки в результате (по умолчанию не определено).

Следующие примеры поясняют использование этих опций:

In : NIntegrate[Cos[Cos[x]], {x, 0, π}]Out : 2.40394

Здесь было достигнуто требуемое по умолчанию количество точных зна-

ков в результате, т. е. 6, и эти 6 знаков выведены на экран.

In : NIntegrate[Cos[Cos[x]], {x, 0, π},PrecisionGoal− > 10]

Out : 2.4039

Здесь было установлено более высокое значение требуемой точности —10 знаков, и при вычислениях эта точность была успешно достигнута(по оценке Mathematica ). Однако на экран было выведено только 6 зна-

ков результата. Это связано с тем, что в расчетах Mathematica смоглаобойтись только числами с машинной точностью, a для таких чисел по

умолчанию выводится только 6 знаков. Чтобы вывести все полученныезнаки можно использовать команду InputForm.

In : a = NIntegrate[Cos[Cos[x]], {x, 0, π}, PrecisionGoal → 10]//InputForm;

Out : 2.4039394306344133

Здесь были выведены все 16 знаков, содержащихся в числе a. Однако,

в соответствии с установкой PrecisionGoal→10, лишь первые 10 егознаков можно считать верными (по оценке Mathematica ). Некотораячасть остальных знаков тоже может быть верной, но утверждать это мы

не можем.

15

Page 16: mathematica_part1

In :NIntegrate[Cos[Cos[x]], {x, 0, π}, PrecisionGoal → 18]

Out :NIntegrate::tmap: NIntegrate is unable to achieve the tolerances specifiedby the PrecisionGoal and AccuracyGoal options because the working precisionis insufficient. Try increasing the setting of the WorkingPrecision option.

2.40394

Здесь Mathematica не смогла достичь требуемой точности, так как зна-чение PrecisionGoal больше, чем WorkingPrecision. Но ее все таки

можно достичь, изменяя значения других опций команды NIntegrate.В данном случае следует повысить значение опции WorkingPrecision.Эта опция определяет точность представления чисел, используемых во

внутренних вычислениях в процессе интегрирования. По умолчанию еезначение равно 16, и, разумеется, используя такие числа нельзя получить

результат с точностью, превышающей 16 знаков. Если же мы повысимзначение WorkingPrecision, то требуемая точность может быть достиг-

нута:

In : NIntegrate[Cos[Cos[x]], {x, 0, π}, PrecisionGoal → 18, WorkingPrecision → 20]

Out : 2.403939430634412998

Однако в этом случае Mathematica вынуждена использовать во внут-

ренних вычислениях числа в представлении с произвольной точностью,поэтому время вычислений существенно возрастает.

Если увеличение WorkingPrecision не помогает, или время вы-числений чрезмерно возрастает, то надо использовать другие опции. По-

дробно о них можно прочитать в справочной системе. Значения, уста-новленные для них по умолчанию, можно узнать с помощью командыOptions:

Options[NIntegrate]AccuracyGoal → ∞, Compiled→ True, GaussPoints → Automatic, MaxPoints

→ Automatic, MaxRecursion → 6, Method → Automatic, MinRecursion →0,PrecisionGoal → Automatic, SingularityDepth → 4, WorkingPrecision →16

Упражнение 2.2. Выполните следующие задания:

1) Вычислите с точностью 25 знаков интеграл

∫ 2

1

xx dx (используйте оп-

ции PrecisionGoal и WorkingPrecision)

16

Page 17: mathematica_part1

Ответ: 2.050446234534731259656830 .

2) Вычислите с точностью 10 знаков интеграл

∫ π

0

∫ π−x

0

sin2 x + sin2 y dxdy

(используйте опции PrecisionGoal и MinRecursion).

Ответ: 4.727991543 .

3. Занятие 3. Присвоения и подстановки в

Mathematica

3.1. Присвоение

В Mathematica , также как и в традиционных языках программи-

рования, можно вводить переменные и присваивать им значения. Дляэтого в Mathematica используются операторы:

Set (=) – непосредственное присвоение,

SetDelayed (:=) – отложенное присвоение.

До тех пор, пока эти операции используются лишь для присвоения пере-менным каких-либо определенных численных значений, разницы между

ними практически нет — совершенно все равно, выполнить присвоениеa = 10 или a := 10 — результат в обоих случаях получается одним и тем

же — a приобретает значение 10. Но если одной переменной присваива-ется не числовое значение, а значение какой-либо другой переменной, то

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

Введем переменную x и присвоим ей значение 1:

In : x = 1.

17

Page 18: mathematica_part1

Теперь введем еще две переменные — f и g , и присвоим обеим

значение x2 , но для f используем непосредственное присвоение:

In : f = x2.

а для g — отложенное:

In : g := x2.

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

сейчас узнать численное значение f и g, то, разумеется, получим одно ито же значение 1.

In :f

g

Out :f = 1

g = 1

Однако разница между f и g сразу же проявится, как только мыизменим значение x:

In : x = 2;

In :f

g

Out :1

4

Таким образом, различие между непосредственным и отложеннымприсвоением состоит в следующем: при непосредственном присвоении,

например f = x2, сначала производится вычисление значения правой ча-сти равенства, в данном случае x2, а затем f присваивается именно это

вычисленное значение; а при отложенном присвоении, например g := x2,значение правой части в момент присвоения не вычисляется, g устанав-

ливается равным невычисленному выражению x2, а его вычисление про-изводится позднее, причем всякий раз заново, когда требуется найти кон-кретное значение g. Особенно наглядным это различие становится, если

построить графики f и g в зависимости от x:

18

Page 19: mathematica_part1

In : Plot[f, {x, 0, 1}]

0.2 0.4 0.6 0.8 1

0.5

1

1.5

2

Рис. 3. График функции f(x)

Можно видеть, что f не меняется при изменении x, т. е. остаетсяравным своему исходному значению 1, тогда как для g получаем:

In : Plot[g, {x, 0, 1}]

0.2 0.4 0.6 0.8 1

0.2

0.4

0.6

0.8

1

Рис. 4. График функции g(x)

т. е. для каждой точки графика значение g := x2 вычисляется заново, в

соответствии с текущим значением x.

19

Page 20: mathematica_part1

Для того чтобы отменить присвоения, выполненные для какой-

либо переменной, следует выполнить для нее операцию Clear (или = .).Так после выполнения команды

In : Clear[x, f, g]

x, f и g снова становятся просто буквенными символами, никак не свя-

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

In : x

y

z

3.2. Подстановки

Присвоение, выполненное для какой-либо переменной с помощьюопераций = и :=, действует вплоть до окончания текущей сессии рабо-ты с Mathematica, если только не отменяется еще до этого каким-либо

другим присвоением, примененным к этой переменной, либо с помощьюкоманды Clear. Помимо таких присвоений, называемых еще глобаль-

ными подстановками, в Mathematica есть так называемые локальныеподстановки (или просто подстановки, Rules), которые действуют в

пределах лишь одного выражения. Также как и присвоение, подстановкаможет быть:

непосредственной: Rule(− >,→);

отложенной: RuleDelayed(:>, :→).

Чтобы выполнить некоторую подстановку → y во всех частях какого-

либо выражения expr, к этому выражению следует применить функциюReplaceAll:

ReplaceAll[expr, x → y] (expr/.x → y).

Например:

In : x + y/x. → 1

Out : 1 + y

Если подстановки собраны в несколько групп, образующих вложенный

список (Nested List), то выражение будет вычислено по отдельности

20

Page 21: mathematica_part1

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

простого списка:

In : x + y/.{{x → 1, y → 2}{x → 10, y → 20}}n!/.{{n → 1}, {n → 2}, {n → 3}}

Многие команды Mathematica представляют результат своей ра-боты в форме такого вложенного списка подстановок, например, ужеизвестная вам команда Solve:

In :p = a x2 + b x + c

rulelist = Solve[p == 0, x]

Out :p = a x2 + b x + c

{{x → −b −√

b2 − 4ac

2a}, {x → −b +

√b2 − 4ac

2a}}

Если теперь применить список подстановок rulelist к исходномувыражению p, то получим список состоящий из нулей, поскольку каждая

из подстановок придает х значение одного из корней уравнения p ==0. Такая операция позволяет легко проверять правильность найденныхкорней:

In :p/.rulelsit

Simplify[f]

Out :{0, 0}

Если же применить rulelist к самой переменной x, то получим спи-

сок, состоящий из корней

In : rootlsit = x/.rulelist

Out : rootlist = {−b −√

b2 − 4ac

2a,−b +

√b2 − 4ac

2a}

К элементам списка можно обращаться по номеру, как к элементам одно-

мерного массива. Номер элемента записывается в двойных квадратныхскобках:

In : root1 = rootlist[[1]]

root2 = rootlist[[2]]

21

Page 22: mathematica_part1

Упражнение 3.1. Ознакомьтесь с командой численного решения поли-

номиальных уравнений NSolve. Найдите с ее помощью все корни уравнения

x7 + 2x3 + 1 = 0.

Оцените точность решения путем подстановки в исходное уравнение. Вве-

дите переменные root1, root2, . . . и присвойте им значения корней. Исполь-зуйте при этом операции с подстановками и списками, как показано выше.

3.3. Функции пользователя.

Как вы уже могли видеть, Mathematica предоставляет пользова-телю очень большой набор готовых функций. Эти функции называютсявстроенными (built-in functions). Но в дополнение к этому Mathematica

дает пользователю возможность создавать свои функции, называемыевнешними или пользовательскими. Следующие примеры поясняют неко-

торые приемы создания таких функций.

In : f[x_] = x2

In : f[2]

f[−1/3]

f[0.1]

Out :4

1

90.01

In :g[x_, y_] :=√

x2 + y2

g[3, 4]

Out :5

Упражнение 3.2. Задайте функцию y(x) =

∫ x

0

tt dt. Используйте в этой

функции численное интегрирование. Для проверки вычислите y(1), y(5).

Ответ: y(1) = 0.783431, y(5) = 1241.82 .

22

Page 23: mathematica_part1

При задании функций могут использоваться подстановки. Напри-

мер, входными параметрами следующей функции являются коэффици-енты квадратного уравнения, а результатом — список корней этого урав-нения:

In : getrootlist[a_, b_, c_] := x/.Solve[a x2 + b x + c = 0, x]

Здесь команда Solve создает список подстановок:

In : Solve[a x2 + b x + c == 0, x]

Out : {{x → −b −√

b2 − 4ac

2a}, {x → −b +

√b2 − 4ac

2a}}

а функция getrootlist применяет эти подстановки к переменной x, в ре-зультате чего получается список корней уравнения:

In : x/.Solve[a x2 + b x + c = 0, x]

Out : {−b −√

b2 − 4ac

2a,−b +

√b2 − 4ac

2a}

Задав какие-либо конкретные значения коэффициентов a, b и c, получим

список корней соответствующего уравнения:

In :getrootlist[1, 2, 1]

getrootlist[1, 0, 1]

Out :{−1,−1}{−i, i}

Упражнение 3.3. Задайте аналогичную функцию для кубического урав-

нения. Постройте с ее помощью список корней уравнения

x3 + 2x2 + 3x + 4 = 0

Ответ: x1 = −1.651, x2 = −0.175− 1.547 i, x3 = −0.175 + 1.547 i

В Mathematica можно создавать, в частности, и составные функции, т. е.

функции, которые задаются разными выражениями в разных областяхзначения аргумента. Для этого можно использовать функцию Condition(сокращенная запись /;):

In : y[x_] := x/; x ≥ 0

y[x_] := 0/; x ≤ 0

23

Page 24: mathematica_part1

In :y[2]

y[−2]

Out :2

0

Для большей наглядности постройте график определенной выше

функции:

In : Plot[y[x], {x,−1, 1},PlotStyle → RGBColor[1, 0, 0]]

Упражнение 3.4. Задайте следующую функцию и постройте ее график:

y(x) =

exp(1

x2 − 1), |x| < 1;

0, |x| > 1;

Рассмотрим еще пример. Функция Normcalc производит вычисле-ние интеграла от квадрата функции [t] на отрезке (a, b).

In : Normcalc[x_, a_, b_] := Sqrt[NIntegrate[x[t]2, t, a, b]]

Заметьте, что параметр x здесь не обычная числовая переменная, как впредыдущих примерах, а имя (Head) некоторой функции. Ниже в каче-

стве такой функции взяты Sin и определенная выше функция f :

In :Normcalc[Sin, 0, π]

Normcalc[f, 0, π]

Out :1.25331

1

Упражнение 3.5. Выполните следующие задания:

1) Задайте обобщенную функцию δ(x) (дельта-функцию Дирака) как функ-ционал, ставящий в соответствие произвольной пробной функции f(x)

ее значение в точке x = 0. Входным параметром должно быть имяпробной функции, как в примере с функцией Normcalc, а результатом

— значение этой пробной функции в нуле.

2) Аналогичным образом задайте обобщенные функции δ′(x), δ′′(x), δ(x−h).

3) В качестве теста примените построенные обобщенные функции к функ-ции f(x) = exp(−x2). Убедитесь в правильности получаемых резуль-

татов.

24

Page 25: mathematica_part1

4. Занятие 4. Решение алгебраических уравнений

в Mathematica

Mathematica имеет набор функций для решения алгебраических и

трансцендентных уравнений. Рассмотрим сначала алгебраические урав-нения.

4.1. Аналитическое решение алгебраических уравнений

Известно, что решение алгебраических уравнений степени не выше

четырех может быть представлено в радикалах – то есть выраженях, со-держащих линейные комбинации корней соответствующей степени. Это

утверждение называется теоремой Абеля. Естественно, что эта теоремав полной мере относится и к Mathematica . Несмотря на то, что полу-ченные решения порой довольно-таки громоздки, Mathematica всегда

может представить решение в явном виде через радикалы, в полном со-ответствии с теоремой Абеля.

In : Solve[x3 + x2 + 1 == 0, x][[1]]

Out : {x → 1

3

(

−1 −(

2

29 − 3√

93

)1/3

−(

1

2

(

29 − 3√

93)

)1/3)

}

Вообще говоря, Mathematica рассматривает уравнения как логические

выражения. Это позволяет использовать для работы с ними логическиеоперации, например, && – логическое И. С помощью оператора && си-стема уравнений может быть записана в виде:

In : Solve[x + y == 1 && x − y == 0, {x, y}]Out : {{x → 1

2, y → 1

2}}

Логические операции могут быть также использованы для задания до-полнительных условий:

In : Solve[x2 + x == 0 && x! = 0, x]

Out : {{x → −1}}

Выражение ! = используется для обозначения логической операции НЕ.

Попробуем теперь решить уравнение пятой степени:

In : sol = Solve[x5 + x3 + x2 − 2 == 0, x][[1]]

Out : {x → Root[−2 + #12 + #13 + #15&, 1]}

25

Page 26: mathematica_part1

Mathematica представила ответ в специальной форме с использованием

функции Root. По существу, смысл полученного выходного выражениясостоит в том, что Mathematica не может решить данное уравнение ана-литически. Тем не менее, построенное системой Mathematica выражение

типа Root[f, k] может быть использовано для нахождения численного ре-шения:

In : N[x/.sol]

Out : 0.882307

Давайте рассмотрим более подробно синтаксис функции Root:

Root[f, k]

Результатом ее действия является k-й корень уравнения f(x) = 0. То есть,

выражение −2 + #12 + #13 + #15& представляет собой форму записьнашего уравнения x5 +x3 +x2−2 == 0. Такая форма записи называется

в Mathematica чистой функцией (pure function). Выражение #n ис-пользуется для обозначения n-го аргумента функции, а знак амперсанда& показывает, где кончается запись чистой функции. Так, например, вы-

ражение: #1&, является представлением линейной функции. Подробнуюинформацию об использовании pure functions можно найти в справоч-

ной системе.

Несмотря на впечатляющие возможности функции Solve, на прак-тике возникают ситуации, когда ее использование не дает желаемых ре-

зультатов. Рассмотрим простейшее уравнение a x = 0 и решим его спомощью Solve:

In : Solve[a x == 0, x]

Out : {{x → 0}}

Как и следовало ожидать решением данного уравнения относительноx является x = 0. Однако, если a = 0, то это решение не является

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

для работы в подобных ситуациях. Это функция Reduce. Посмотримкак она справится с возникшей задачей:

In : Reduce[a x == 0]

Out : a == 0 ||x == 0

26

Page 27: mathematica_part1

Здесь || служит для обозначения логической операции ИЛИ. Таким об-

разом, ответ представляет альтернативу: или a = 0 (при этом x можетиметь любое значение), или x = 0 (и при этом a может иметь любоезначение).

Рассмотрим другой пример:

In : Solve[a x + b == 0, x]

Out : {{x → − b

a}}

В этом случае Mathematica опять ничего не сообщает относительно

решения уравнения при частных значениях параметров a = 0 и/илиb = 0. Теперь решим тоже самое уравнение с использованием функции

Reduce:

In : Reduce[a x + b == 0, x]

Out : (a == 0 && b == 0)||(

a 6= 0 && x == − b

a

)

Здесь мы получили следующее: 1) если a = 0 и b = 0, то x может

принимать любое значение; 2) если a 6= 0, то x = −b/a.

Таким образом, сравнивая работу двух функций: Solve и Reduce,можно сказать, что функция Reduce выполняет более детальный анализ

решения и приводит также особые решения, соответсвующие некоторымчастным значениям параметров.

Возможности функции Reduce не ограничиваются решением урав-нений. Эту функцию можно использовать и для работы с неравенствами.

Например, определим, при каких значениях x функция y(x) = x4−2x2−1принимает только положительные значения:

In : Reduce[x4 − 2x2 − 1 >= 0]

Out : x ≤ −√

1 +√

2 ||x ≥√

1 +√

2

Теперь создадим новые переменные x1, x2, которым присвоим значения

абсцисс точек пресечения исследуемой функции с осью x. Следует об-ратить внимание на то, что в отличие от Solve, Reduce представляетрезультат не в виде подстановок, а в виде логического выражения. Для

того чтобы преобразовать результат работы функции Reduce в подста-

27

Page 28: mathematica_part1

новки, можно воспользоваться командой ToRules:

In :Reduce[x4 − 2x2 − 1 == 0, Reals]

{ToRules[Reduce[x4 − 2x2 − 1 == 0, Reals]]}

Out :x == −√

1 +√

2 || x =

1 +√

2

{{x → −√

1 +√

2}, {x →√

1 +√

2}}В первой строке у команды Reduce была добавлена опция Reals.

Это было сделано для того, чтобы ответ содержал только действитель-ные числа. Теперь мы можем работать с результатом функции Reduceкак с обычной подстановкой:

In : {x1, x2} = x/.{ToRules[Reduce[x4 − 2x2 − 1 == 0, Reals]]}

Out : {−√

1 +√

2,

1 +√

2}

In :N[x1]

N[x2]

Out :−1.55377

1.55377

Для проверки нарисуем функцию y(x) = x4−2x2−1 и изобразим на

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

манда Point совместно с командой Graphics. Функция Point[{x,y}] со-здает графический примитив – точку с координатами (x, y). Для рисова-

ния графических примитивов служит команда Graphics[Point[{x,y}]].Для одновременного представления нескольких графических объектовна одном рисунке используем функцию Show. Создадим сначала гра-

фический объект – точку:

In : pt1 = Graphics[{PointSize[0.02],RGBColor[0, 0, 0], Point[{N[x1], 0}]}];pt2 = Graphics[{PointSize[0.02],RGBColor[0, 0, 0], Point[{N[x2], 0}]}].

Теперь создадим графический объект – график функции:

In : pl = Plot[x4 − 2x2 − 1, {x,−1, 1}].Теперь совместим созданные графические объекты на одном рисунке:

In : Show[pl, pt1, pt2].

28

Page 29: mathematica_part1

Рис. 5. График функции x4 − 2x2 − 1

4.2. Численное решение алгебраических уравнений

Когда Solve не может представить решение уравнения в радика-

лах (что всегда будет иметь место, когда степень уравнения выше илиравна пяти) имеет смысл решить уравнение численно. Для того чтобы по-

лучить численную аппроксимацию решения алгебраического уравнениялюбой степени, можно воспользоваться командой NSolve. Например:

In : NSolve[x2 − 2 == 1, x]

Out : {{x → −1.73205}, {x → 1.73025}}

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

In : NSolve[x5 + x3 − x == 1, x, 5][[1]]

Out : {x → −0.6217− 0.44065 i}

Кроме NSolve для численного решения алгебраических уравнений мож-но использовать функцию FindRoot. Эта функция предназначена для

решения не только полиномиальных, но и более сложных уравнений. Темне менее ее с успехом можно использовать для решения полиномиальных

уравнений любой степени. Например:

In : FindRoot[x2 + 2x − 1, {x, 2}]Out : {x → 0.414214}

Как видно, синтаксис этой команды несколько отличается от синтаксиса

NSolve. Для функции FindRoot требуется указать начальное значение

29

Page 30: mathematica_part1

x, с которого она начинает искать решение. От выбора начального зна-

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

выбрать начальное значение подходящим образом. Так, в нашем случаефункция имеет еще один ноль помимо найденного. Если построить гра-

фик, то можно увидеть, что второе решение лежит в районе -2. Выберемx = −2 в качестве начального приближения для FindRoot:

In : FindRoot[x2 + 2x − 1, {x,−2}]Out : {x → −2.41421}

Упражнение 4.1. Используя функцию NSolve найдите точки пересече-ния функций y(x) = x4+x−x2+0.5 и y(x) = x+1. Нарисуйте эти функции

на одном графике и красным цветом отметьте точки пересечения.Указание: для рисования точек используйте функции Graphics и Point,

как в рассмотренных выше примерах.

4.3. Аналитическое решение трансцендентных уравнений

При рассмотрении различных физических задач требуется решатьтрансцендентные уравнения. Для решения таких уравнений в Mathematicaимеется ряд встроенных функций. В первую очередь к ним относитсярассмотренная выше функция Reduce. Решим уравнение sin(x) − a = 0:

In : Reduce[Sin[x] − a == 0, x]

Out : C[1] ∈ Integers && (x == π − ArcSin[a] + 2πC[1] || x == ArcSin[a] + 2πC[1]

Функция Reduce представила решение в максимально общем виде – с

учетом периодичности cos. В принципе, можно воспользоваться и функ-цией Solve предварительно установив значение опции InverseFunctions

равным True. Эта опция указывает команде Solve, что для решенияуравнения нужно использовать обратную функцию:

In : Solve[Sin[x]− a == 0, x, InverseFunctions → True]

Out : {{x → ArcSin[a]}}

Однако функция Reduce решает уравнение с учетом периодичности

функции sin(x).

30

Page 31: mathematica_part1

5. Занятие 5. Обобщенные функции в Mathematica

5.1. Обобщенные функции как функционалы

Как известно, обобщенные функции можно рассматривать как функ-

ционалы на некотором пространстве пробных функций. В последнемупражнении предыдущего занятия требовалось задать в форме функцио-налов дельта-функцию и ее производные. Рассмотрим теперь как можно

задать в форме функционала обобщенную функцию P1x . Это позволит

нам также познакомиться с некоторыми новыми командами, полезными

для выполнения символьных и численных расчетов в Mathematica . Бо-лее подробную информацию о этих командах можно найти в справочной

системе. Функционал P1x должен сопоставлять пробной функции ϕ(x)

главное значение интеграла:∫ ∞

−∞

ϕ(x)

xdx.

Если интеграл может быть взят аналитически, то для его нахожденияможно использовать команду Integrate. Если же требуется найти глав-ное значение интеграла, то эту команду надо выполнять с опцией

PrincipalValue. Так что требуемый функционал может быть задан сле-дующим образом:

In : Clear[P1x];

P1x[y_] := Integrate[y[x]/x, {x,−∞,∞},PrincipalValue → True]

В качестве теста применим построенный функционал к функции

ϕ(x) = (1 + x + x2)−1:

In : P1x[ϕ]

Out : − π√3

Упражнение 5.1. Задайте в форме функционала обобщенную функциюθ(x). Примените построенный функционал к пробной функции ϕ(x) = (1+

x + x2)−1.

Ответ:2π

3√

3.

Заданная выше функция P1x обладает одним недостатком — ее мож-но применять только к таким функциям ϕ(x), для которых соответ-

ствующий интеграл может быть вычислен аналитически. А что делать,

31

Page 32: mathematica_part1

если интеграл не может быть вычислен аналитически? Если бы тре-

бовалось просто найти численное значение интеграла, то можно былобы использовать команду NIntegrate. Но здесь задача более сложная– требуется найти главное значение интеграла. Использовать для этой

цели NIntegrate с опцией PrincipalValue нельзя, у NIntegrate та-кой опции нет. Однако Mathematica имеет специальный дополнитель-

ный пакет NumericalMathCauchyPrincipalV alue, в котором опреде-лена функция CauchyPrincipalValue, использующаяся для численной

аппроксимации главного значения интеграла. Справочная информацияоб этом и других стандартных дополнительных пакетах содержится вразделе Help/HelpBrowser/Add-ons. Для работы с пакетом его необходи-

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

NumericalMath′CauchyPrincipalV alue′

После этого можно использовать команду CauchyPrincipalValue. Вы-

числим, например, главное значение интеграла

∫ 2

−1

cos(x)

xdx, который

имеет особую точку x = 0:

In : CauchyPrincipalValue[Cos[x− 1]/x, {x,−1, {0}, 1}]Out : 1.5922

Следует обратить внимание на специальную запись пределов интегриро-вания – особая точка подинтегральной функции должна быть выделена

фигурными скобками.

Упражнение 5.2. Задайте аналог функции P1x с численным расчетомвсех интегралов.

Указание: Для численного расчета несобственных интегралов на интервалах(−∞,−1) и (1,∞) выполните в них замену переменной x = 1/t, которая

преобразует интервалы интегрирования в конечные отрезки (−1, 0) и (0, 1).Примените построенный функционал к пробной функции ϕ(x) = (1 + x +

x2)−1 и убедитесь в правильности результата.Ответ:1.907.

5.2. Обобщенные функции как классы эквивалентности фун-

даментальных последовательностей

Можно доказать, что обобщенные функции можно рассматривать

как классы эквивалентности фундаментальных последовательностей обыч-

32

Page 33: mathematica_part1

ных функций. Проиллюстрируем это утверждение некоторыми приме-

рами, используя Mathematica для вычисления интегралов и построенияграфиков функций. Но сначала вспомним некоторые факты из теорииобобщенных функций. Последовательности обычных функций yn(x), n =

1, 2, . . ., относящиеся к классу эквивалентности δ-функции Дирака δ(x),называются δ-образными. Эти последовательности обладают следующим

свойством:

limn→∞

∫ ∞

−∞yn(x)ϕ(x) dx = ϕ(0), (1)

где ϕ(x) — произвольная функция из множества D (напомним, что в этомножество входят все бесконечно дифференцируемые функции с огра-

ниченным носителем). На языке функционалов приведенное равенствозаписывается следующим образом:

limn→∞

〈yn(x)ϕ(x)〉 = 〈δ(x), ϕ(x)〉, ∀ϕ(x) ∈ D,

что принято кратко записывать так:

yn(x)D′

−→ δ(x), при n → ∞

здесь D′ есть множество обобщенных функций на D. В словесной фор-

мулировке это звучит так: "yn(x) стремится к δ(x) в смысле D′ и это рав-носильно утверждению, что последовательность функций yn(x) принад-

лежит к классу эквивалентности δ-функции. В типичном случае (хотя ине всегда) δ-образная последовательность строится так: берется некото-

рая функция y(x), для которой интеграл∫ ∞

−∞y(x) dx = a

существует и имеет конечное значение, т. е. |a| < ∞ . Далее рассматри-вается последовательность функций:

yn(x) =n

ay(nx), n = 1, 2, . . .

Эта последовательность будет δ-образной. Отметим также, что постро-енная таким образом последовательность будет обладать не только свой-ством (1), но еще и следующим свойством:

limn→∞

∫ b

a

yn(x) dx =

{

1, если 0 ∈ (a, b),

0, если 0 /∈ (a, b).(2)

33

Page 34: mathematica_part1

Упражнение 5.3. Постройте δ-образные последовательности на основе

следующих функций:

1)1

1 + x2;

2) exp(−x2);

3)sin(x)

x;

4) y(x) =

{

1, |x| < 1;

0, |x| > 1;

5) y(x) =

{

exp[1/(x2 − 1)], |x| < 1;

0, |x| > 1.

В каждом из примеров задайте соответствующую функцию y(x); най-

дите, аналитически или численно, коэффициент a затем задайте функциюyn(x), рассматривая n как произвольный параметр, и изобразите yn(x) на

графике (для нескольких первых значений n).В примере (3) проверьте численно выполнение предельного соотно-

шения (2) для интервалов (−1, 1) и (1, 2). Для этого вычислите значения

интегралов

∫ 1

−1

yn(x) dx и

∫ 2

1

yn(x) dx для нескольких первых n и убедитесь,

что значения первого интеграла стремятся к 1, а второго – к 0. Аналогич-

ным образом проверьте для этого примера выполнение соотношения (1),взяв в качестве ϕ(x) функцию exp(−x2).

Теперь рассмотрим пример фундаментальной последовательности, отно-

сящейся к классу эквивалентности функции Хевисайда:

θ(x) =

{

1, x > 0,

0, x < 0,

иначе говоря — последовательности, сходящейся к θ(x) в смысле D′ . Эта

последовательность имеет следующий вид:

gn(x) =

{

exp(−1/nx), x > 0,

0, x ≤ 0,

n = 1, 2, . . . .

Упражнение 5.4. Постройте последовательность (4) и представьте на

графиках несколько первых функций gn(x), а также (gn(x))′. Замечание:последовательность (gn(x))′, как легко понять, является δ-образной.

34

Page 35: mathematica_part1

5.3. Встроенные обобщенные функции

В системе Mathematica есть встроенные обобщенные функции —дельта-функция Дирака и функция Хевисайда, причем как одномерные,

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

что дифференциальные уравнения такого рода, содержащие в качественеоднородности дельта-функцию, широко используются для определе-

ния так называемых функций Грина и имеют важное теоретическое зна-чение.

Упражнение 5.5. Выполните следующие задания:

1) Найдите и просмотрите справочную информацию по встроенным дель-та функции Дирака и функции Хевисайда. Разберитесь, как можно с

помощью этих встроенных функций вычислить следующие величины:

a) 〈δ(x), ϕ(x)〉,b) 〈θ(x), ϕ(x)〉,

и вычислите их, взяв ϕ(x) = (x2 + 2x + 2)−1. Ответ: 1/2, π/4.

2) Просмотрите справочную информацию по команде DSolve и постройтес ее помощью общие решения следующих дифференциальных уравне-

ний:

a) y′ = y2,

b) y′ = δ(x) + x + 1,

c) y′′ + y = δ(x − x0).

35

Page 36: mathematica_part1

А. Использование специальных обозначений для на-

бора выражений в Mathematica

В Mathematica для набора специальных выражений можно исполь-зовать определенные сочетания клавиш (aliasing).

Например, чтобы ввести греческую букву α достаточно набрать

следующую комбинацию клавиш Esc a Esc . Для набора любой другойгреческой буквы нужно заменить "а"другой буквой, являющейся началь-

ной для соответствующего (английского) названия буквы греческого ал-фавита. Подробную информацию о наборе букв греческого алфавита, а

также некоторых других специальных символов, можно получить в спра-вочной системе Mathematica в разделе The Mathematica Book/AdvancedMathematics in Mathematica/Mathematical and Other Notations.

Специальные комбинации клавиш можно использовать также длянабора разнообразных математических выражений. Например, пусть тре-

буется ввести дробьx2

3. Это можно сделать следующим образом:

x Ctrl+6 2 Ctrl+Space Ctrl+/ 3 Ctrl+Space .

Здесь + означает одновременное нажатие клавиш. Сочетание Ctrl+6служит для набора степени у выражения, сочетание Ctrl+Space пере-

водит текстовый курсор в конец текущего выражения, Ctrl+/ – создаетдробь.

Рассмотрим еще один пример: 3√

γ + 1:

Ctrl+2 Ctrl+5 3 Tab Esc g Esc Ctrl+Space + 1.

Сочетание клавиш Ctrl+2 создает символ√

, сочетание Ctrl+5 пе-

реводит текстовый курсор в положение для набора показателя степеникорня, Tab переводит текстовый курсор обратно под знак корня. Вооб-

ще говоря клавиша Tab используется в Mathematica для перехода меж-ду различными "метками-заполнителями"(placeholders). На экране

невыделенный "заполнитель"выглядит так �, а выделенный так �.

36

Page 37: mathematica_part1

Список рекомендуемой литературы

Основная литература

1. Дьяконов В. П. Mathematica 4 : учеб. курс / В. П. Дьяконов.– СПб.и др. : Питер, 2001.– 654 с.

2. Дьяконов В. П. Mathematica 4.1 /4.2 / 5.0 в математических и научно-технических расчетах / В. П. Дьяконов .– М. : Солон-Пресс, 2004.–670 с.

3. Голубева Л. Л. Компьютерная математика. Символьный пакет Mathe-matica : курс лекций / Л. Л. Голубева, А. Э. Малевич, Н. Л. Щег-лова .– Минск : БГУ, 2005. – 102 с.

Дополнительная литература

1. Baumann G. Mathematica for theoretical physics : classical mechanicsand nonlinear dynamics / Gerd Baumann. – 2nd ed. — New York,

NY : Springer, 2004. – 544 p.

2. Trott M. The mathematica guidebook for numerics / Michael Trott. –

New York : Springer, 2006. – 1208 p.

Составители Дорофеев Дмитрий Львович,Долгих Антон Владимирович,Чернов Владислав Евгеньевич,

Артыщенко Степан Владимирович

37