Файл: Mathematica для математиков. Часть Реализация основных понятий математического анализа.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 25.10.2023

Просмотров: 291

Скачиваний: 7

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

103
Если кроме векторов нужно задать точки их приложения, то список векторов надо дополнить координатами точек следующим образом.
???????????????? = {{{{−????, −????}, {−????, ????}}, {{−????, ????}, {????, −????}}, {{−????, ????}, {????????, −????????}}},
????, −???? , ????, ???? , ????, ???? , ????, ???? , ????, ???? , ????, ???? ,
{{{????, −????}, {????????, −????????}}, {{????, ????}, {????, −????}}, {{????, ????}, {−????, ????}}}};
????????????????????????????????????????????????????????[????????????????, ???????????????????????????????????????????? → ????. ????](* предыдущий рисунок справа *)
Графики на предыдущем рисунке отличаются только значениями, указанными на координатных осях.
Можно изобразить только те вектора, которые были преданы. Для этого используется значение опции VectorPoints→All.
????????????????????????????????????????????????????????[????????????????, ???????????????????????????????????????????? → ????. ????, ???????????????????????????????????????????????? → ????????????]
(следующий рисунок слева).
Можно изобразить вектора вместе с точками их приложения
???????????????????????? = ????????????????????????????[????????????????????[????????????????[[????, ????, ????]], {????, ????}, {????, ????}], ????];
????????????????????????????????????????????????????????[????????????????, ???????????????????????????????????????????? → ????. ????, ???????????????????????????????????????????????? → ????????????,
???????????????????????? → {????????????, ????????????????????????????????????[????. ????????], ????????????????????[????????????????????????]}](* пред. рис. в середине *)
Можно рисовать стрелочки постоянного размера (те же значения data и points, что и в предыдущем коде).
????????????????????????????????????????????????????????[????????????????, ???????????????????????????????????????????? → {????. ????, ????. ????, ????????????????}, ???????????????????????????????????????????????? → ????????????,
???????????????????????? → {????????????, ????????????????????????????????????[????. ????????], ????????????????????[????????????????????????]}](* пред. рис. справа *)
Вместе с векторным полем можно рисовать линии тока поля. Для этого используется опция StreamPoints.
???????????????????????? = ???????????????????????????? ???????????????????? ???????????????? ????, ????, ???? , ????, ???? , ????, ???? , ???? ;
????????????????????????????????????????????????????????[????????????????, ???????????????????????? → {????????????, ????????????????????????????????????[????. ????????], ????????????????????[????????????????????????]},
???????????????????????????????????????????????? → ????????]
Пример. Нарисовать поле нормалей единичной окружности.
???? = ????, ???? ;
???? = ????, ???? ;(* векторное поле *)
???? ????_ = ???????????? ???? , ???????????? ???? ;(* параметрическое уравнение кривой *)
???????? = {????, ????}/. ????????????????????????[???? → ????[????]];
???????????????? = ????????????????????[????????, {????, ????, ????????, ????/????}];(* точки вместе с векторами *)

104
???????????????????????? = ????????????????????[????????????????[[????, ????]], {????, ????????????????????????[????????????????]}];(* только точки *)
???????????? = ????????????????????????????????????????????????????????[????????????????, ???????????????????????????????????????????????? → ????????????, ???????????????????????????????????????????? → ????. ????,
???????????????????????? → {????????????, ????????????????????????????????????[????. ????????], ????????????????????[????????????????????????]}];
???????? = ????????????????????????????????????????????????????????[????[????], {????, ????, ????????}];
????????????????[????????????, ????????](* следующий рисунок слева *)
Если вы измените вторую и третью строки предыдущего кода, например так
???? = {???? − ????, ???? + ????};
????[????_] = {????????????????[????], ????????????????[????]}; то построите другое векторное поле на другой кривой (предыдущий рисунок справа).

Многие опции функций VectorPlot и ListVectorPlot имеют такой же смысл как и у функции Graphics и мы не будем здесь повторяться, поясняя их значение.
Для построения векторных полей в трехмерном пространстве используется функция VectorPlot3D.
????????????????????????????????????????????????[{????, ????, ????}, {????, −????, ????}, {????, −????, ????}, {????, −????, ????}](* след. рисунок слева *)
Используйте функцию Evaluate для символьного вычисления векторного поля перед его построением.
????????????????????????????????????????????????[????????????????????????????????[????[????????????[????
????
+ ????
????
+ ????
????
], {{????, ????, ????}}]],
{????, −????????, ????????}, {????, −????????, ????????}, {????, −????????, ????????}, ????????????????????????????????????nts → 5]
(предыдущий рисунок в середине).
Можно управлять цветом и формой стрелок. В следующей команде форма стрелок задается опцией VectorStyle→"Arrow3D", а опция
VectorColorFunction→Hue задает цвет в соответствии с нормой (Norm) векторного поля.
????????????????????????????????????????????????[{????, −????, ????}, {????, −????, ????}, {????, −????, ????}, {????, −????, ????},
???????????????????????????????????? → ????????????, ???????????????????????????????????????????????? → ????, ???????????????????????????????????????????????????????????????????????????? → ????????????,
???????????????????????????????????????????? → "????????????????????????????"](* предыдущий рисунок справа *).
В следующем примере мы рисуем поле градиента скалярного поля
z
y
x
u



2 2
в окрестности поверхности
0

u
. Для этого мы используем


105 опцию RegionFunction. С ее помощью мы выделяем узкую область векторного поля в окрестности этой поверхности.
???????????????????????????????????????????? = ????
????
+ ????
????
− ????;
???????????????????????????????????????????? = ????[????????????????????????????????????????????, {{????, ????, ????}}];
???? = ????????????????????????????????????????????????[????????????????????????????????????????????, {????, −????, ????}, {????, −????, ????}, {????, ????, ????},
???????????????????????????????????????????????? → ????????, ???????????????????????????????????????????? → ????. ????????, ???????????????????????? ????. ???? ,
???????????????????????????????????????????????????????? → ????????????????????????????????[{????, ????, ????}, −????. ???? ≤ ???????????????????????????????????????????? <= 0.1]];
???? = ????????????????????????????????????????????????????[???????????????????????????????????????????? == ????, {????, −????, ????}, {????, −????, ????}, {????, ????, ????},
???????????????? → ????????????????, ???????????????????????????????????????????????? → ????????????????????????????[????. ????, ????????????????????]];
{????, ????, ????????????????[????, ????]}
Если векторное поле задано дискретно, т.е. задан набор векторов (троек чисел), то векторное поле можно построить функцией ListVectorPlot3D. Как и другие аналогичные функции она вначале выполняет интерполяцию данных, а потом рисует стрелки векторов.
????????????????????????????????????????????????????????????????[????????????????????[{????, ????, ????}, {????, −????, ????, . ????}, {????, −????, ????, . ????}, {????, −????, ????, . ????}]]
(следующий рисунок слева).
Обратите внимание на координаты точек векторного поля. Они представляются индексами векторов {x,y,z}, а не значениями x,y,z.
В следующем коде мы изображаем векторное поле нормалей к сфере. Но с помощью опции DataRange это поле отнесено к реальным координатам точек, а не к индексам векторов.
???????????????????????????????????????????? = ????
????
+ ????
????
+ ????
????
− ????;
???????????????????????????????????????????? = ????[????????????????????????????????????????????, {{????, ????, ????}}];
???????????????? = ????????????????????[????????????????????????????????????????????, {????, −????, ????}, {????, −????, ????}, {????, −????, ????}];
???? = ????????????????????????????????????????????????????????????????[????????????????, ???????????????????????????????????? → {{−????, ????}, {−????, ????}, {−????, ????}},
???????????????????????????????????????????????? → ????????, ???????????????????????????????????????????? → ????. ????, ???????????????????????? ????. ???? ,
???????????????????????????????????????????????????????? → ????????????????????????????????[{????, ????, ????}, −????. ???? ≤ ???????????????????????????????????????????? <= 0.1]];
???? = ????????????????????????????????????????????????????[???????????????????????????????????????????? == ????, {????, −????, ????}, {????, −????, ????}, {????, −????, ????},
???????????????? → ????????????????, ???????????????????????????????????????????????? → ????????????????????????????[????. ????, ????????????????????]];
????????????????[????, ????](* предыдущий рисунок справа *)

106
Для одновременной визуализации скалярного и векторного поля можно использовать функции VectorDensityPlot и StreamDensityPlot. Они строят график векторного поля или его линий тока на фоне графика плотности нормы этого поля (или другой скалярной функции, которую укажет пользователь). Фон раскрашивается в цвета, яркость которых соответствует значению этого скалярного поля. В формате
VectorDensityPlot[{v x
,v y
},{x,x min
,x max
},{y min
,y max
}] рисуются стрелочки векторного поля, а скалярной функцией, значения которой используются для графика плотности, является норма векторного поля
{v x
,v y
}.
????????????????????????????????????????????????????????????????????[{????
????
− ????
????
, −????
????
}, {????, −????, ????}, {????, −????, ????}](* след. рис. слева *)
Используйте функцию Evaluate для символьного вычисления векторного поля перед его построением
????????????????????????????????????????????????????????????????????[????????????????????????????????[????[????????, {{????, ????}}]], {????, −????, ????}, {????, −????, ????}]
(предыдущий рисунок справа).
Можно явно указать точки, в которых должны быть нарисованы стрелочки. Для этого используется опция VectorPointe→точки.
???????????????????????? = {{−????, −????}, {−????, ????}, {????, −????}, {????, ????}};
????????????????????????????????????????????????????????????????????[{????, ????}, {????, −????, ????}, {????, −????, ????},
???????????????????????????????????????????????? → ????????????????????????, ???????????????????????????????????????????? →. ????????,
???????????????????????? → {????????????, ????????????????????????????????????[????????????????????????], ????????????????????[????????????????????????]}] (* след. рис. слева *)
В качестве примера изобразим вектора поля только на двух окружностях
???????????????????????? = ????????????????[????????????????????[{????????????[????], ????????????[????]}, {????, ????, ????????, ????/????}],
????????????????????[{????. ????????????????[????], ????. ????????????????[????]}, {????, ????, ????????, ????/????}]];
????????????????????????????????????????????????????????????????????[{????, ????}, {????, −????, ????}, {????, −????, ????},
???????????????????????????????????????????????? → ????????????????????????, ???????????????????????????????????????????? → ????????????????????,
???????????????????????? → {????????????, ????????????????????????????????????[????????????????????????], ????????????????????[????????????????????????]}]
(предыдущий рисунок справа).
Опции ColorFunction и VectorColorFunction позволяют управлять цветом фона и стрелочек. В следующем примере значением, которое используется для выбора цвета является норма векторного поля.
????????????????????????????????????????????????????????????????????[{???? + ????, ???? − ????}, {????, −????, ????}, {????, −????, ????},
???????????????????????????????????????????????????? → "????????????????????????", ???????????????????????????????????????????????????????????????????????????? → ????????????]
(следующий рисунок слева).


107
Можно рисовать векторное поле и линии его тока совместно. Для этого используется опция StreamPoints→n, где n количество линий тока.
????????????????????????????????????????????????????????????????????[{???? + ????, ???? − ????}, {????, −????, ????}, {????, −????, ????},
???????????????????????????????????????????? → ????????????, ???????????????????????????????????????????????? → ????????](* пред. рис. справа *)
В формате
VectorDensityPlot[{{v x
,v y
},s},{x,x min
,x max
},{y min
,y max
}] выражение s определяет скалярную функцию, значения которой будут использоваться при построении графика плотности (фона).
????????????????????????????????????????????????????????????????????[{{????, −????}, ????????????[????
????
+ ????
????
]}, {????, −????, ????}, {????, −????, ????},
???????????????????????????????????????????????? → ????](* следующий рисунок слева *)
У функции VectorDensityPlot имеется возможность построения шкалы цветов.
????????????????????????????????????????????????????????????????????[{{????, −????}, ????????????[????
????
+ ????
????
]}, {????, −????, ????}, {????, −????, ????},
???????????????????????????????????????????????? → ????, ????????????????????????????????????????????−> ????????????????????????????????????[{"????????????????????????????????????????", {????, ????}}]]
(предыдущий рисунок справа ).
Построим векторное поле на фоне его дивергенции
???? = {????????????[????], −????????????[????]};
???? = ????????????[????, {????, ????}]
????????????????????????????????????????????????????????????????????[{????, ????}, {????, −????, ????}, {????, −????, ????},
???????????????????????????????????????????????? → ????????] (* следующий рисунок слева *)
Cos[????] + Sin[????]
Построим векторное поле на фоне нормы его ротора
???? = {????????????[????], −????????????[????]};
???????????? = ????????????????[????, {????, ????}]
????????????????????????????????????????????????????????????????????[{????, ????????????????[????????????]}, {????, −????, ????}, {????, −????, ????},
???????????????????????????????????????????????? → ????????](* предыдущий рисунок справа *)
−Cos[????] − Cos[????]

108
Функция StreamDensityPlot строит линии тока на фоне графика плотности некоторого скалярного поля. По умолчанию этим скалярным полем является норма векторного поля.
????????????????????????????????????????????????????????????????????[{????????????[????], −????????????[????]}, {????, −????, ????}, {????, −????, ????}]
(следующий рисунок слева )
В формате
StreamDensityPlot[{{v x
,v y
},s},{x,x min
,x max
},{y min
,y max
}] выражение s задает скалярную функцию, значения которой будут использоваться при построении графика плотности. В качестве примера построим линии тока поля на фоне его дивергенции.
???? = {????????????[????], −????????????[????]};
???? = ????????????[????, {????, ????}]
????????????????????????????????????????????????????????????????????[{????, ????}, {????, −????, ????}, {????, −????, ????}](* предыдущий рис. справа *)
Cos[????] − Cos[????]
Построим линии тока, которые проходят через заданные точки. Для этого используем опцию StreamPoints→точки.
???????????????????????? = ????????????????????????[{−????, −????, ????, ????, ????}, ????];
????????????????????????????????????????????????????????????????????[{????????????[????], −????????????[????]}, {????, −????, ????}, {????, −????, ????},
???????????????????????????????????????????????? → ????????????????????????, ???????????????????????? → {????????????, ????????????????????????????????????[????. ????????], ????????????????????[????????????????????????]}]
(следующий рисунок слева)
К графику линий тока можно добавить график векторного поля (стрелочки).
????????????????????????????????????????????????????????????????????[{????????????[????], −????????????[????]}, {????, −????, ????}, {????, −????, ????},
???????????????????????????????????????????????? → ????????????????????????,
???????????????????????? → ????????????, ???????????????????????????????????? ????. ???????? , ???????????????????? ???????????????????????? ,
???????????????????????????????????????????????? → ????????, ???????????????????????????????????????????? → ????????????????](* пред. рис. в середине *)
Имеется также опция Mesh, которая позволяет рисовать линии уровня некоторой скалярной функции. По умолчанию такой функцией является норма векторного поля.
????????????????????????????????????????????????????????????????????[{????????????[????], −????????????[????]}, {????, −????, ????}, {????, −????, ????},
???????????????????????????????????????????????? → ????????????????????????, ???????????????????????????????????????????????? → ????????, ???????????????????????????????????????????? → ????????????????,
???????????????????????? → ????????????, ???????????????????????????????????? ????. ???????? , ???????????????????? ???????????????????????? ,
???????????????? → ????????, ???????????????????????????????????? → ????????????????????](* предыдущий рисунок справа *)


109
Для дискретных наборов данных аналогами функций VectorDensityPlot и
StreamDensityPlot являются функции ListVectorDensityPlot и
ListStreamDensityPlot
. Возможности этих функций сходны и мы не будем на них останавливаться.
3.5
Ряды
3.5.1
Вычисление конечных и бесконечных сумм.
Для символьного вычисления конечных и бесконечных сумм используется функция Sum. В формате Sum[f,{i,i max
}] она вычисляет сумму вида


max
1
i
i
f
????????????[???????? − ????, {????, ????????}]
144
Sum[f,{i,i max
}] может быть введена как

max
i
i
f . Трафарет ввода суммы можно найти на панели специальных символов «Basic Math Input». Можно также использовать специальные комбинации клавиш. Для ввода знака суммы» наберите Esc–sum–Esc. Потом надо ввести подстрочный и надстрочный индексы у значка суммы Σ. Для этого введите Ctrl-_ (подчеркивание), затем
Ctrl-% (или Ctrl-^, затем Ctrl-%). Введите значения нижнего и верхнего пределов суммирования. Ctrl–пробел возвращает курсор на нормальный уровень ввода, где введите суммируемое выражение. Следующая команда эквивалентна предыдущей.
(???????? − ????)
????????
????
144
В формате Sum[f,{i,i min
,i max
}] задается начальное i = i
min и конечное i
max значение счетчика.
????????????[????, {????, ????, ????}]
30 или
????
????
????=????
30
В формате Sum[f,{i,i min
,i max
,di}] задается еще шаг счетчика di.
????????????[????, {????, ????, ????????, ????}]
21
В формате Sum[f,{i,i min
,i max
},{j min
,j max
}] вычисляется двукратная сумма вида
 


max min max min
i
i
i
j
j
j
f
????????????[(???? + ????)
????
, {????, ????}, {????, ????}]
266

110
Допустимо суммирование по большему количеству переменных/индексов.
Можно суммировать выражения, содержащие более чем одну переменную; другие переменные будут трактоваться, как константы.
????
????
????!
????
????=????
???? +
????
2 2
+
????
3 6
+
????
4 24
+
????
5 120
+
????
6 720
+
????
7 5040
Как и выше можно задать шаг изменения переменной суммирования.
????????????
????
????
????!
, {????, ????, ????, ????}
???? +
????
3 6
+
????
5 120
+
????
7 5040
В двойной сумме «внутренние» пределы суммирования могут зависеть от внешнего индекса.
????????????[????
????
+ ????
????
]
????
????=????
????
????=????
Sin ???? + ???? + Sin ????
2
+ ???? + Sin ????
3
+ ???? + Sin ????
2
+ ????
2
+
Sin[????
3
+ ????
2
] + Sin[????
3
+ ????
3
]
Результат вычисления суммы может быть представлен символически.
????
????
????
????=????
1 30
????(1 + ????)(1 + 2????)(−1 + 3???? + 3????
2
)
(−????)
????
????
????????
????
− ????
????
????=????
−1 + (−1)
????
− 2????
4(1 + 2????)
????????????[
????
????(???? + ????)(???? + ????)
, {????, ????}]
1 4

1 2(1 + ????)(2 + ????)
Пределы суммирования могут быть бесконечными (Infinity). Такие суммы принято называть рядами и Mathematica умеет их вычислять.
????
????
????

????=????
????
2 6


111
(−????)
????+????
(???????? − ????)
????

????=????
5????
5 1536
(−????)
????−????
????
(???? + ????)
????

????=????
????
2 12
− Log[2]
????
????! (???? + ????)!

????=????
BesselI[????, 2]
Множество, которое пробегает индекс суммирования, можно задавать конечным списком.
????????????[????[????], {????, {????, ????, ????}}]
????[????] + ????[????] + ????[????]
Если найти результат суммирования в символьной форме не удается,
Mathematica возвращает сумму невычисленной.
????????????[????/(????! + ????), {????, ????????????????????????????????}]
????
1 + ????!

????
Однако, для числовых рядов можно получить приближенное значение суммы, используя функцию N.
????[%]
1.8064971
Применение функции N к результату, полученному с помощью функции Sum, эквивалентно использованию функции NSum, которая служит для численного суммирования рядов. Для бесконечных числовых рядов результат получается только в случае, если ряд сходится.
????????????????[????/(????! + ????), {????, ????????????????????????????????}]
1.8064971
???????? = ????????????????[(−????)^????/????!, {????, ????, ∞}]
0.049787068
Последняя сумма вычисляется символьно
???????? = ????????????[(−????)^????/????!, {????, ????, ∞}]
1

3
и ошибка вычислений cоставляет
???????? − ????????
3.469447˟10
-17
У функции NSum имеются опции, которые управляют точностью вычислений.
AccuracyGoal определяет абсолютную погрешность вычислений, используя

112 количество значащих цифр. PrecisionGoal->n определяет для значения x погрешность вычислений равную
n
x

10
. Когда включены опции
AccuracyGoal->m и PrecisionGoal->n, то Mathematica пытается выполнять вычисления величины x с погрешностью


n
m
x


10
,
10
max
. Опция
WorkingPrecision определяет количество значащих цифр, используемых во внутренних вычислениях; установка
WorkingPrecision→
MachinePrecision приводит к вычислениям с процессорной точностью.
Использование этих опций идентично их использованию для функции
NIntegrate.
???????? = ????????????????[(−????)^????/????!, {????, ????, ∞}, ???????????????????????????????????????????????????????????????? → ????]
0.04979
По умолчанию функция NSum суммирует первые 15 членов перед тем, как переходит к аппроксимации «хвоста» ряда. Однако это не всегда корректно.
Например, построим график следующей последовательности
????????????????????????????????????????????????[
????
???? − ????????
????
+ ????
, {????, ????, ????????}, ???????????????????????????????????? → ????????????,
???????????????????????????????????????????? → {????????????????????????????????????, ????????????????????????}]
Максимальное значение последовательность достигает на 20 – м члене.
Поэтому суммирование 15 – ти членов с последующей аппроксимацией
«хвоста» будет иметь большую погрешность
????????????????[
????
(???? − ????????)
????
+ ????
, {????, ????, ∞}]
2.2214029
Чтобы вначале просуммировать большее количество элементов используется опция NSumTerms.
????????????????[
????
(???? − ????????)
????
+ ????
, {????, ????, ∞}, ???????????????????????????????????? → ????????]
2.1569165
По умолчанию функция NSum выполняет проверку сходимости ряда. Если вы заранее знаете, что ряд сходится, то отключив проверку сходимости опцией
VerifyConvergence
False можно ускорить вычисления.
Если ряд не сходится, то функция NSum в качестве результата возвращает
ComplexInfinity.
????????????????[????, {????, ????, ∞}]
ComplexInfinity
Но часто она выводит «угрожающие» сообщения, и представляет какой – то численный результат, которому нельзя доверять.