Файл: 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
Но часто она выводит «угрожающие» сообщения, и представляет какой – то численный результат, которому нельзя доверять.