Файл: Mathematica для математиков. Часть Реализация основных понятий математического анализа.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 25.10.2023
Просмотров: 290
Скачиваний: 7
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
62
????????????????????????????????????[????]
{
1 91
,
2 + 3ⅈ
91
,
4ⅈ
91
,
5 + 6ⅈ
91
}
Функция
Orthogonalize[{v
1
,v
2
,...}] строит нормированный ортогональный базис из векторов v
1
,v
2
,....
????????????????????????????????????????????????????[{{????, ????, ????}, {????, ????, ????}, {????, ????, ????}}]
{{1,0,0},{0,1,0},{0,0,1}}
Те же вектора, но в другой последовательности.
????????????????????????????????????????????????????[{{????, ????, ????}, {????, ????, ????}, {????, ????, ????}}]
{{
2 5
,
1 5
, 0}, {−
1 30
, 2/15, 5/6}, {
1 6
, − 2/3,
1 6
}}
Если вектор в списке один, то он просто нормируется.
????????????????????????????????????????????????????[{{????, ????, ????}}]
{{
3 11
,
1 11
,
1 11
}}
Если векторов меньше, чем размерность пространства, то выполняется обычная ортогонализация
????????????????????????????????????????????????????[{{????, −????, ????}, {????, −????, −????}}]
{{
1 3
, −
1 3
,
1 3
}, {0, −
1 2
, −
1 2
}}
Если векторов в списке больше, чем размерность пространства, то последние вектора возвращаются нулевыми.
????????????????????????????????????????????????????[{{????, −????, ????}, {????, −????, −????}, {????, ????, ????}, {−????, ????, ????}}]
{{
1 3
, −
1 3
,
1 3
}, {0, −
1 2
, −
1 2
}, {
2 3
,
1 6
, −
1 6
}, {0,0,0}}
Функцию Orthogonalize можно применять к матрицам (спискам списков)
????????????????????????????????[????????????????????????????????????????????????????[{{????, −????}, {???? + ????, ???? − ????}}],
???????????????????????????????????????????? ⧴ (???? ∈ ????????????????????&&???? ∈ ????????????????????)]
{{
????
????
2
+ ????
2
, −
????
????
2
+ ????
2
}, {
????
????
2
+ ????
2
,
????
????
2
+ ????
2
}}
Функция Orthogonalize может использовать свою собственную функцию скалярного произведения, может обрабатывать многомерные списки, имеет две опции. Подробнее с ней вы можете познакомиться по справочной системе.
Функция Dot вычисляет скалярное произведение векторов, а также может выполнить матричное умножение списков (матриц) и умножение матрицы на вектор
????????????[{????, ????, ????}, {????, ????, ????}]
???????? + ???????? + ????????
Инфиксной формой функции Dot является оператор '
.
' (точка). С его помощью мы можем вычислить произведение векторов и/или матриц.
{{a,b},{c,d}}.{x,y}
{ax+by,cx+dy}
63 или
{x,y}.{{a,b},{c,d}}
{ax+cy,bx+dy}
В первом случае {x,y} выступает, как вектор-столбец, во втором - как вектор- строка. В следующем выражении присутствуют оба типа.
{????, ????}. {????, ????}
????
2
+ ????
2
Векторное произведение векторов выполняется функцией Cross.
Cross[{1,2,3},{2,4,5}]
{-2,1,0}
Инфиксной формой функции Cross является оператор '
' (крест). Он вводится как Esc – cross – Esc.
{????, ????, ????} ⨯ {????, ????, ????}
{???????? − ????????, −???????? + ????????, ???????? − ????????}
Функция EuclideanDistance[u,v] вычисляет евклидово расстояние между векторами
????????????????????????????????????????????????????????????????????[{????, ????, ????}, {????, ????, ????}]
Abs[???? − ????]
2
+ Abs[???? − ????]
2
+ Abs[???? − ????]
2
Если вы уверены, что координаты векторов вещественные, то можно избавиться от модулей, выполнив замену
????????????????????????????????????????????????????????????????????[{????, ????, ????}, {????, ????, ????}]/. (????????????[????_]^???? → ????^????)
(???? − ????)
2
+ (???? − ????)
2
+ (???? − ????)
2
Здесь подстановка
Abs[x_]^2 → ????^2 любой «квадрат модуля выражения» заменяет «квадратом выражения», т.е. выражение вида
2
expr
Abs
заменяется выражением
2
expr при любом expr .
Евклидово расстояние эквивалентно норме разности векторов.
????????????????????????????????????????????????????????????????????[{????, ????, ????}, {????, ????, ????}] == ????????????????[{????, ????, ????} − {????, ????, ????}]
True
Функция VectorAngle[u,v] вычисляет угол между векторами u и v.
???? = {????, ????, ????};
???? = {????, ????, ????};
????????????????????????????????????????????[????, ????]
ArcCos[ 2/3]
????????????????????????????????????????[{????????????????????, ????????????????????[{{????, ????, ????}, ????}], ????????????????????[{{????, ????, ????}, ????}]}]
Если координаты векторов вещественные, то выполняя очевидные замены, можно получить классическое выражение для угла между векторами
64
????????????????????????????????????????????[{????, ????, ????}, {????, ????, ????}]/. {????????????????????????????????????[????_] → ????, ????????????[????_]^???? → ????^????}
ArcCos
???? ???? + ???? ???? + ???? ????
????
2
+ ????
2
+ ????
2
????
2
+ ????
2
+ ????
2
Вот один пример использования функции VectorAngle.
????????????????????????????????????????????????[????????????????????????????????????????????[{????, ????, ????}, {????, ????, ????}] < ????????/???? && ???? ≤ ????,
{????, −????, ????}, {????, −????, ????}, {????, ????, ????}, ???????????????????????????????????? → {????, ????, ????}]
Функция Projection[u,v] вычисляет проекцию вектора u на вектор v.
????????????????????????????????????????[{????, −????, ????}, {????, ????, ????}]
1 14
,
1 7
,
3 14
Выражение для вычисления проекции имеет вид
v
v
v
v
u
, где черта сверху означает комплексное сопряжение. Для вещественных векторов оно совпадает с классическим определением.
Пример. Разложить вектор u на составляющие: вдоль вектора v и ортогональный к v вектор.
???? = {????, ????, ????};
???? = {????, ????, ????};
???????????????? = ????????????????????????????????????????[????, ????]
{
1 3
,
2 3
,
4 3
}
???????????????? = ???? − ????????????????????????????????????
{
2 3
,
1 3
, −
1 3
}
Проверим, что вектора uort и upar в сумме дают вектор u и, что они ортогональны.
???????????????? + ????????????????
{1,1,1}
????????????????. ????????????????
0
□
В формате Projection[u,v,f] вычисляется проекция вектора u на вектор v
, используя в качестве скалярного произведения функцию f. Например, если координаты векторов вещественные, то в качестве f надо выбирать функцию
Dot.
????????????????????????????????????????[{????, ????, ????}, {????, ????, ????}, ????????????]
????(???????? + ???????? + ????????)
????
2
+ ????
2
+ ????
2
,
????(???????? + ???????? + ????????)
????
2
+ ????
2
+ ????
2
,
????(???????? + ???????? + ????????)
????
2
+ ????
2
+ ????
2
65
Под векторами можно понимать функции. Тогда в качестве скалярного произведения можно использовать определенный интеграл. Например
????????[????????_, ????????_]: = ????????????????????????????????????[???????? ∗ ????????, {????, −????/????, ????/????}]
????????????????????????????????????????[????
????
, ????????????[????], ????????]
(−8 + ????
2
)Cos[????]
????
Здесь мы создали функцию ip[f
1
,f
2
]
, которая при вычислении проекции используется для вычисления скалярного произведения функций.
Функция Thread[f[args]] «проносит» f сквозь любой список/вектор, который появляется в аргументе args. В результате создается список значений функции f на элементах списков из args.
Thread[f[{a,b,c}]]
{f[a],f[b],f[c]}
????????????????????????[????[{????, ????, ????}, ????]]
{????[????, ????], ????[????, ????], ????[????, ????]}
????????????????????????[????[{????, ????, ????}, {????, ????, ????}]]
{????[????, ????], ????[????, ????], ????[????, ????]}
Thread[{a,b,c}=={x,y,z}]
{a
x,by,cz}
Последний результат станет понятен, если аргумент функции Thread представить в полной форме
{????, ????, ????} == {????, ????, ????}//????????????????????????????????
Equal[List[????, ????, ????], List[????, ????, ????]]
Т.о. функция Equal «проносится» внутрь своих списочных аргументов.
В формате Thread[f[args],h] функция Thread «проносит» f сквозь любой объект с заголовком h, который появляется в аргументе args.
????????????????????????[????????????[???? == ????], ????????????????????]
Sin[????] == Sin[????]
Рассмотрим теперь преобразование поворота векторов. Оно выполняется функцией RotationTransform .
Вначале рассмотрим вектора на плоскости.
В формате
RotationTransform[θ] возвращается матрица преобразования поворота, которую можно применить к любой паре чисел (двумерному вектору или координатам точки на плоскости). Следует уточнить, что возвращается объект
– функция TransformationFunction, который действует как функция и который можно применять к одномерным спискам.
????????????????????????????????????????????????????????????????????[????]
Если такую функцию применить к вектору, то мы получим повернутый вектор.
????????????????????????????????????????????????????????????????????[????/????][{????, ????}]
{0, 2}
66
????????????????????????????????????????????????????????????????????[????][{????, ????}]
{????Cos[????] − ????Sin[????], ????Cos[????] + ????Sin[????]}
В следующем коде мы создаем анимацию вращения вектора. Меняя угол поворота от 0 до 2 π, мы пересчитываем координаты его конца с помощью функции RotationTransform для каждого нового значения θ .
???????????? = {????, ????};
???????????????????????????? = ????????????????????????????????[{????????????????????, ????????????????????????, ????????????????????[{{????, ????}, ????????????}]}];
????????????????????????????[
???????? = ???????????????????????????????????????????????????????????????????? ???? ???????????? ;
???????????? = ???????????????????????????????? ????????????????????, ???????????????????? ????, ???? , ???????? ;
???????????????? ????????????????????????????, ????????????, ???????????????????? → ????????????????, ???????????????????????????????????? → −????, ???? , −????, ???? ,
{????, ????, ????????}, ???????????????????????????????????????????????????????????????? → ????????????????????]
В формате RotationTransform[θ,pnt] возвращается матрица поворота вокруг точки pnt. Следующая команда вычисляет координаты точки {x,y} после поворота ее вокруг точки {1,0} на угол θ.
????????????????????????????????????????????????????????????????????[????, {????, ????}][{????, ????}]
{1 − Cos[????] + ????Cos[????] − ????Sin[????], ????Cos[????] − Sin[????] + ????Sin[????]}
Сравните с результатом поворота вокруг начала координат.
????????????????????????????????????????????????????????????????????[????, {????, ????}][{????, ????}]
{????Cos[????] − ????Sin[????], ????Cos[????] + ????Sin[????]}
Построим анимацию вращения точки {1,1} одновременно вокруг двух точек: начала координат {0,0} и точки {1,0}.
???????????????????? = ????. ????????; ???? = {????, ????}; ???????????? = {????, ????};
???????????????????? = ????????????????????????????????[{????????????????????, ????????????????????????????????????[????????????????????], ????????????????????[{????, ????}]}];
???????????????????? = ????????????????????????????????[{????????????????, ????????????????????????????????????[????????????????????], ????????????????????[{????, ????}]}];
???????????????????? = ????????????????????????????????[{????????????????, ????????????????????????????????????[????????????????????], ????????????????????[????]}];
????????????????????????????[
???????? = ????????????????????????????????????????????????????????????????????[????][????];
???????????????????????? = ????????????????????????????????[{????????????, ????????????????????????????????????[????????????????????], ????????????????????[????????]}];
???????? = ????????????????????????????????????????????????????????????????????[????, ????????????][????];
???????????????????????? = ????????????????????????????????[{????????????????????, ????????????????????????????????????[????????????????????], ????????????????????[????????]}];
????????????????[????????????????????, ????????????????????, ????????????????????????, ????????????????????????, ????????????????????, ???????????????????? → ????????????????,
???????????????????????????????????? → {{−????. ????, ????. ????}, {−????. ????, ????. ????}}, ???????????????????????????????????? → ????],
{????, ????????????????????[????, {????, ????, ????????, ????/????????}]}, ???????????????????????????????????????????????????????????????? → ????????????????????]
67
Здесь на рисунке слева показана панель анимации в нулевой момент времени.
Черная точка является началом координат, вокруг которой выполняется одно вращение. Серая точка {1,0} является центром второго вращения. Синяя точка
{1,1} является стартовой для обоих вращений. На среднем рисунке показано положение точек после поворота на угол
3
/
. Красная точка вращается вокруг начала координат, а зеленая – вокруг точки {1,0}. На правом рисунке показано положение точек после поворота на угол π.
В формате RotationTransform[θ,u
0
][u] выполняется поворот 3D вектора u вокруг 3D вектора u
0
на угол θ.
????????????????????????????????????????????????????????????????????[????, {????, ????, ????}][{????, ????, ????}]
{????Cos[????] − ????Sin[????], ????Cos[????] + ????Sin[????], ????}
У функции RotationTransform имеется еще несколько форматов вызова, с которыми вы можете познакомиться по справочной системе.
Много других типов операций со списками описаны нами в первой части пособия.
3
.4.2 Дифференциальные операции векторного анализа
Градиент. Функция Grad[f,{x
1
,x
2
,...,x n
}] вычисляет градиент
n
x
f
x
f
x
f
...,
,
,
2 1
Первым аргументом должно быть выражение f[x
1
,x
2
,...,x n
]
, а вторым – список переменных.
????????????????[????[????, ????, ????], {????, ????, ????}]
{????
(1,0,0)
[????, ????, ????], ????
(0,1,0)
[????, ????, ????], ????
(0,0,1)
[????, ????, ????]}
????????????????[????
????
+ ????
????
+ ????
????
, {????, ????, ????}]
{2????, 2????, 2????}
Можно вычислять градиент функции любого количества переменных (меньше и больше трех).
????????????????[????[????, ????], {????, ????}]
{????
(1,0)
[????, ????], ????
(0,1)
[????, ????]}
????????????????[????[????], {????}]
{????
′
[????]}
Градиент можно вычислять в различных системах координат. Для этого имеется следующий формат Grad[f,{x
1
,x
2
,...,x n
},”система”]
, где третьим аргументом передается строка – имя системы координат.
????????????????[????[????, ????, ????], {????, ????, ????}, "????????????????????????????????????????????"]
{????
(1,0,0)
[????, ????, ????],
????
(0,1,0)
[????, ????, ????]
????
, ????
(0,0,1)
[????, ????, ????]}
68
Первым аргументом может быть список функций. Например, можно вычислить градиент от градиента.
???? = ????????????????[????
????
+ ????
????
+ ????????????
????
, {????, ????}]
????????????????[????, {????, ????}]//????????????????????????????????????????
{3????
2
+ 3????
2
, 6???????? + 3????
2
}
6???? + 4???? 4???? + 6????
4???? + 6???? 6???? + 6????
Функцию Grad можно использовать для определения экстремальных точек функции нескольких переменных. Напомним, что если в стационарной точке функции
2 – х переменных
0
,
0
y
x
f
f
выполняется условие
0 2
y
x
y
y
x
x
f
f
f
, то она является точкой строгого экстремума, а именно строгого максимума, если в ней
0
x
x
f
, и строгого минимума, если
0
x
x
f
Пример. Исследовать на экстремум функцию
y
x
y
x
x
y
x
f
12 15 3
,
2 3
????[????_, ????_] = ????
????
+ ????????????
????
− ???????????? − ????????????;
????????????????????????[????[????, ????], {????, −????, ????}, {????, −????, ????}]
Вычисляем градиент функции и находим стационарные точки.
???????????????? = ????????????????[????[????, ????], {????, ????}]
???????????? = ????????????????????[???????????????? == {????, ????}, {????, ????}]
{−15 + 3????
2
+ 3????
2
, −12 + 6????????}
{{???? → −2, ???? → −1}, {???? → −1, ???? → −2}, {???? → 1, ???? → 2}, {???? → 2, ???? → 1}}
Вычисляем матрицу Гессе
y
y
y
x
y
x
x
x
f
f
f
f
x
H
функции, ее определитель
(гессиан)
2
y
x
y
y
x
x
f
f
f
и вторые производные
y
y
x
x
f
f
,
в стационарных точках.
???????? = ???????????????? ????????????????, ????, ???? ;
????????????[????????]/. ????????????
????[????[????, ????], {????, ????}]/. ????????????
{108, −108, −108,108}
{−12, −6, 6, 12}
Гессиан
положителен в первой и последней точках, следовательно они являются точками экстремума. В первой точке (-2, -1)
0
x
x
f
, следовательно, это точка максимума. В точке (2, 1)
0
x
x
f
и поэтому она является точкой минимума. Другие две точки не являются точками экстремума.
Заметим, что матрицу Гессе мы вычисляли как градиент от градиента, поскольку градиент можно применять к списку функций.
69
????????????????????????[????]
???????? = ????????????????[????????????????[????[????, ????], {????, ????}], {????, ????}];
????????//????????????????????????????????????????
????
(2,0)
[????, ????] ????
(1,1)
[????, ????]
????
(1,1)
[????, ????] ????
(0,2)
[????, ????]
□
Напомним, что в декартовой системе координат градиент можно вычислять с использованием функции D. В формате D[f,{{x
1
,x
2
,…}}] вычисляется вектор производных
,
,
2 1
x
f
x
f
скалярной функции f (точнее выражения f[x
1
,x
2
,...]). Но этот вектор и является градиентом функции в декартовой системе.
????[????[????, ????], {{????, ????}}]
{????
(1,0)
[????, ????], ????
(0,1)
[????, ????]}
????[(????
????
+ ????
????
)
????
, {{????, ????}}]
{4????(????
2
+ ????
3
),6????
2
(????
2
+ ????
3
)}
Производная функции u по направлению находится как
e
,
u
grad
, где угловые скобки обозначают скалярное произведение векторов, а вектор e
является единичным вектором заданного направления.
Пример. Найти производную функции
y
x
y
x
f
2
sin
,
2
в точке
2
/
,
1
в направлении вектора
5 4
,
5 3
v
. Имеем
????[????_, ????_] = ????
????
????????????[????????];
???? =
????
????
, −
????
????
; (* единичный вектор *)
???????????????????? = ????????????????[????[????, ????], {????, ????}]/. {???? → ????, ???? → ????/????}
{0,-2}
Поскольку v – единичный вектор, то производная по направлению будет
???????????????????????????????? = ????. ????????????????????
8 5
□
Пример. Найти производную функции
z
x
z
y
y
x
z
y
x
f
,
,
в точке
1
,
1
,
1
в направлении
1 2 3 4 5 6 7 8 9 10 ... 19
k
j
i
v
2
. Имеем
????[????_, ????_, ????_] = ???????? + ???????? + ????????;
???????? = ????????????????[????[????, ????, ????], {????, ????, ????}]/. {???? → ????, ???? → ????, ???? → ????}
{2,2,2}
???? = {????, ????, −????};
???? = ????????????????????????????????????[????]
2/3,
1 6
, −
1 6
70
???????????????????????????????? = ????. ????????
4
□
Дивергенция. Функция Div[{f
1
,...,f n
},{x
1
,...,x n
}] вычисляет дивергенцию
n
n
x
f
x
f
1 1
вектор – функции {f
1
,...,f n
}.
????????????[{????[????, ????, ????], ????[????, ????, ????], ????[????, ????, ????]}, {????, ????, ????}]
????
(0,0,1)
[????, ????, ????] + ????
(0,1,0)
[????, ????, ????] + ????
(1,0,0)
[????, ????, ????]
????????????[{????, ????, ????}, {????, ????, ????}]
3
Вектор – функции можно присваивать имя и использовать его вместо списка из скалярных функций.
????[????_, ????_, ????_]: = {????
????
, ????
????
, ????
????
}
????????????[????[????, ????, ????], {????, ????, ????}]
2x+2y+2z
Дивергенцию можно вычислять в криволинейных системах координат. Для этого имеется следующий формат
Div[{f
1
,...,f n
},{x
1
,...,x n
},”система”], где третьим аргументом передается строка – имя системы координат.
????????????[{????????????????[????????], −????????????????[????????]}, {????, ????}, "????????????????????"]
4Sin[2????]
Дивергенция вектора любой размерности является скаляром.
????????????[{???? ????????????[????], ???? ????????????[????], ???? ???? ????, ????
????
+ ????
????
}, {????, ????, ????, ????}]
???? ???? + Sin[????]
В криволинейной системе координат дивергенция вектора с постоянными компонентами может быть отлична от нуля.
????????????[{????, ????, ????}, {????, ????, ????}, "????????????????????????????????????"]//????????????????????????????????
2 + Cot[????]
????
Функцию Div может применяться к спискам функций.
????????????[{{????????????[????, ????], ????????????[????, ????]}, {????????????[????, ????], ????????????[????, ????]}}, {????, ????}]
{f12
(0,1)
[????, ????] + f11
(1,0)
[????, ????], f22
(0,1)
[????, ????] + f21
(1,0)
[????, ????]}
Ротор. Функция Curl[{f
1
,f
2
,f
3
},{x
1
,x
2
,x
3
}] вычисляет ротор вектор –
функции
3 2
1 3
3 2
1 2
3 2
1 1
,
,
,
,
,
,
,
,
x
x
x
f
x
x
x
f
x
x
x
f
по формуле
2 1
1 2
1 3
3 1
3 2
2 3
,
,
x
f
x
f
x
f
x
f
x
f
x
f
????????????????[{????, −????, ????????}, {????, ????, ????}]
{0, 0, −2}
Для вектор – функции двух переменных команда Curl[{f
1
,f
2
},{x
1
,x
2
}] вычисляет
2 1
1 2
x
f
x
f
71
????????????????[{????
????
, ????
????
}, {????, ????}]
3????
2
− 2????
Функция Curl работает даже тогда, когда ее первым аргументом является скалярная функция.
????????????????[????[????], {????}]
????
′
[????]
????????????????[????[????, ????], {????, ????}]
{−????
(0,1)
[????, ????], ????
(1,0)
[????, ????]}
Ротор можно вычислять в криволинейных системах координат. Для этого имеется следующий формат вызова
Curl[{f
1
,...,f n
},{x
1
,...,x n
},”система”], где третьим аргументом передается строка – имя системы координат.
????????????????[{????????????????[????????], −????????????????[????????]}, {????, ????}, "????????????????????"]
−4Cos[2????]
В криволинейной системе координат ротор вектор – функции с постоянными компонентами может быть отличен от нуля.
????????????????[{????, ????, ????}, {????, ????, ????}, "????????????????????????????????????"]
Cot[????]
????
, −
1
????
,
1
????
Ротор градиента равен нулю. Действительно
????????????????[????????????????[????[????, ????, ????], {????, ????, ????}], {????, ????, ????}]
{0,0,0}
Векторное поле, ротор которого тождественно равен нулю, называется безвихревым. Результат последней команды показывает, что векторное поле, являющееся градиентом некоторого скалярного поля, является безвихревым.
Скалярное поле, градиентом которого является векторное поле, называется потенциалом этого векторного поля.
Например, потенциал поля точечного заряда q в пространстве задается выражением
r
q
k
u
, где r расстояние от точки до заряда, а k – некоторая постоянная. Действительно, градиент скалярного поля u порождает векторное поле F
????[????_, ????_, ????_] = −
????????
????
;
???? = ????????????????[????[????, ????, ????], {????, ????, ????}, "????????????????????????????????????"]
{
????????
????
2
, 0,0}
Поскольку сила притяжения направлена вдоль радиуса – вектора точки и обратно пропорционально квадрату расстояния, то последнее выражение показывает, что векторное поле F является полем силы притяжения. Кроме того
????????????????[????, {????, ????, ????}, "????????????????????????????????????"]
{0,0,0}