Алгебра и пакет Mathematica 5

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


Векторный анализ



Операции векторного анализа легко определить самостоятельно. Для этого полезны функции Outer и Inner. Функция Outer позволяет создать декартово произведение двух списков. Вот как можно, например, создать список пар, первый элемент которых берется из первого списка, а второй — из второго.

Outer[List,{a,b,c}, {d, e, f} ]
{{{a,d}, {a,e},{a,fn,{{b,d},{b,e},
{b,f}},{{c,cl},{c,e},{c,f}}}


Вот пример, связанный с конкатенацией строк.

Вот числовой пример.

Функция Inner немного похожа на скалярное произведение. Собственно говоря, inner[f, список1, список2, g] и есть скалярное произведение, в котором умножение замещается функцией/, а сложение — функцией g.

vl = {a1, a2, a3}; v2 = {b1, b2, b3>;
Dot[vl,v2] a1 b1 + 32 b2 + a3 bз Inner[Times,vl,v2,Plus]
a1 b1 + 32 b2 + a3 bз 


Теперь можем определить основные операции векторного анализа.

Вот определение градиента. gradient[f ,x_List]:=Map[D[f,#]&,x] Вычислим градиент.

gradient[f[x,у, z], {x,y,z}]
{f(0,1,0)[x, y, z], f(0,1,0)[x, y, z],
f(0,1,0)D[x, y, z]} 


Теперь определим гессиан  hessian[f_,x_List]:=0uter[D,gradient[f,x],x] и вычислим его:

Определяем теперь лапласиан
laplacian[f_,x_List]:=Inner[D,gradient[f,x] ,x] и вычисляем его:
laplacian[f[x,y,z], {x,y,z}]
f(0,0,2)[x, y, z] + f(0,2,0)[x, y, z] f(2,0,0)[x, y, z]

Совсем несложно определить и якобиан.

jacobian[f_List,x_List]:=0uter[D,f,x] Вот пример его вычисления.

Наконец, определяем дивергенцию. divergence[f_List,x_List]:=Inner[D,f ,x] Вот пример ее вычисления.

divergence [ {f [x, у, z], g [x, у, z], h [x, y, z] }, {x, y, z} ]
h(0,1,0)[x, y, z] +
g(0,0,1)[x, y, z]+f(1,0,0)[x, y, z]


Вот еще несколько примеров выполнения операций векторного анализа.

f=x^2+x y^2+x y z^2;g=Exp[xyz];h=Sin[xyz];
gradient[f, {x,y, z}]
{2x+y2+yz2, 2xy +xz2, 2xyz}
jacobian[{f,g,h}, {x,y, z} ] //MatrixForm


Впрочем, операции векторного анализа приходится выполнять не только в декартовой системе координат. Поэтому для выполнения этих операций имеется специальный пакет, загружаемый как обычно: <<Calculus`VectorAnalysis`. В нем предусмотрено выполнение операций в самых разнообразных системах координат — декартовой, цилиндрической, сферической, параболической, тороидальной, бисферической, сфероидальной, биполярной, параболоидной, эллиптической, эллипсоидной и т.д.

По умолчанию устанавливается декартова система координат. Вот как определить установленную систему координат и название ее переменных.

{CoordinateSystem,Coordinates[]}
{Cartesian,{Xx,Yy,Zz}} 


Вот как вычислить градиент.

Grad[Xx+Sin[YyZz]] {l,Zz Cos[YyZz],Yy Cos[YyZz]} 


Систему координат и название переменных можно изменить.

SetCoordinates[Cartesian[х,у,z]] Cartesian[x,у,z]

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

Div[{x y,x у z,Sin[x у z]}]
 у+х z+x у Cos[х у z] 


Установим теперь сферическую систему координат.

SetCoordinates[Spherical[r,th,ph]]
Spherical[r,th,ph] 


Узнаем промежутки изменения координат.

CoordinateRanges[] (0<r<, 0<th<π, -π<ph<π}

Напишем формулы преобразования координат.

CoordinatesToCartesian[[r,th,ph)]

{r Cos[ph] Sin[th],r Sin[ph]
Sin[th],r Cos[th]} 


Найдем якобиан.

jdet=JacobianDeterminant[]
r2 Sin [th] 


Шутки ради вычислим площадь поверхности сферы радиуса R

и объем сферы радиуса R:

При решении многих задач весьма полезно изображать векторные поля графически. Для изображения двухмерных полей следует подгрузить пакет <<Graphics` PlotField`. Вот как с его помощью можно изобразить двухмерное поле.

Не сложнее нарисовать и градиент скалярного поля.

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

Для трехмерных полей нужно загружать пакет <<Graphics `PlotField3D`

Вот как можно нарисовать векторное поле, компоненты которого равны y/z, -x/z и 0.

Есть, конечно, и функция для изображения градиента скалярной функции. Ниже изображен градиент функции xyz.

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