Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Mathematica 5. ╨б╨░╨╝╨╛╤Г╤З╨╕╤В╨╡╨╗╤М

.pdf
Скачиваний:
5
Добавлен:
19.11.2023
Размер:
33.75 Mб
Скачать

Вот график функции.

Plot[у2,{X,-2.5,3}];

Интегрирование

Неопределенные интегралы, или первообразные

Чтобы найти неопределенный интеграл, можно воспользоваться командой in teg rate:

Integrate [Sqrt [х/ (l-x*Sqrt [х] )],х]

4 Ух

Ч~ -1«Э/2

Но не всегда все проходит так гладко. Например, в интеграле

Integrate [хАп, х]

хЬп

1 + п

не учтен случай п = 1. Вот еще пример.

Integrate [Exp [-Abs [х] ],х]

L-Abstx] dx

Это тавтология. Между тем данный интеграл равен ех—\ при х<0 и 1—е~х в ос­ тальных случаях. (Я здесь не опустил 1 для того, чтобы интеграл был непрерывен при х=0.) Впрочем, многие интегралы, даже технически сложные для студентов, берутся без проблем:

Integrate [xA3*ArcCos [х] /Sqrt [1-хЛ2],х]

- у Vl - х2 (2 + х2) ArcCos [х]

Неберущиеся интегралы остаются без изменений или выражаются через специаль­ ные функции

Integrate [Exp [хЛ2] ,х]

у V/тErfi [х]

Алгебра и анализ

351

Определенные интегралы

Команда Integrate вычисляет и определенные интегралы, если в ней задать не только переменную интегрирования, но и ее пределы.

Integrate[Sin[х]An*Sin[n*x],{х,0, Pi}]

If[n>-1, 2"пя Sin [

],

Integrate [Sin [x] n Sin [n x] ,

{x, 0, л}, Assumptions -» n < -1 ]]

Чтобы приближенно вычислить определенный интеграл (например, неберущийся), можно воспользоваться командой NIntegrate.

Integrate[Exp[х]/х,{х,1,2}] -Gamma[0,-2]+Gamma[0,-1]1 NIntegrate[Exp[x]/х, {x, 1,2}]

3.05912

]

Пример 10.1. Вычислим моменты инерции относительно осей координат Ох и пластины с плотностью 1, ограниченной кривыми ху= \ , ху = 2, у = 2х, х = 2у и рас-1 положенной в I квадранте.

Нарисуем пластину.

Plot [{у=1/х,у=2/х,у=2х,у=х/2}, {х, 0,10},

!

AspectRatio->l,PlotPoints->2000,

 

PlotRange->{{0,2.4}, {0,2.4}}] ;

 

Теперь нужно вычислить /, = jj y'dxdy и /у = JJx2dxdy , где G — пластина. Чтобы

со

свести эти интегралы к повторным, перейдем к полярным координатам. Тогда пла­ стина будет ограничена лучами <р, = arctg 0.5 и <р2 = arctg 2 и кривыми

352

Глава Ю;

(значение p на гиперболе х у = 1) и р2 =

V2

(значение р на

л/sin cpcosq)

^/sincpcosq)

 

гиперболе ху = 2). Поэтому далее мы бы написали l x = JJy 2dxdy =

Р2(Ф)

|</ф

J p2sin2qx/p

с

 

Ф|

р,(ф>

и вычислили бы этот интеграл обычным путем. Но с помощью системы Mathematica все можно сделать проще:

Ix=Integrate [roA3*Sin [phi] Л2, (phi,ArcTan[1/2],ArcTan[2]},

{ro, 1/Sqrt[Sin[phi]*Cos[phi]],Sqrt[2]/Sqrt[Sin[phi]*Cos[phi]]}]

9_

8

Момент инерции относительно оси Оу можно вычислить точно таким же методом. Впрочем, очевидно, что момент инерции относительно оси Оу равен моменту инер­ ции относительно оси Ох.

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

Операции векторного анализа легко определить самостоятельно. Для этого полез­ ны функции Outer и Inner. Функция Outer позволяет создать декартово произведе­

ние двух списков. Вот как можно, например, создать список пар, первый элемент ко­ торых берется из первого списка, а второй — из второго.

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

{{{a,d},{a,e},{a, f}}, {{b,d},{b,e},{b, f}}, {{c,d},{c,e},{c, f}}}

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

Outer[StringJoin,{ "re”,"un"},{"cover","draw","wind"},{"","ing","s"}

({{cover, covering,covers},{draw,drawing,draws},{wind,winding,winds}},{ (recover,recovering,recovers},{redraw,redrawing,redraws},{rewind,rewin ding,rewinds}}, {{uncover, uncovering, uncovers}, {undraw, undrawing, undraw s},(unwind, unwinding, unwinds}}}

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

Outer[Plus, {1,2,3}, {10,20, 30} ]//MatrixForm 11 21 31 \

12 22 32

113 23 33 ,

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

замещается функцией /, а сложение — функцией g.

vl={ai, а2/ а3} ; v2s{bi, b2 , Ъ3};

Dot[vl,v2 ]

aibi + а 2b 2 + аз Ьз

Inner[Times, vl, v2, Plus]

ai bi + a2b 2 + аз Ьз

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

Алгебра и анализ

353

Вот определение градиента,

gradient[f_,x_List]:=Map[D[f,#]&,x]

Вычислим градиент.

gradient[f[x,y,z],{x,y,z}]

{f {1'°'0)

[x, уf

z ]

,

f (0* 0)

[x f уf

z ]

f f(0'°'1) [ X , уf z]}

Теперь определим гессиан

hessian [f__,x_List] :=Outer [D,gradient [f,x] ,x]

и вычислим его:

hessian[f[x,y,z],{x,y,z }]//MatrixForm

[x, Уг

z] '

'f(2,0,0)

[X/ y f

z] f(1,1,0)

[X/ y,

Z]

fU/O/l)

f(l'1'О)

[x, yr

z] f(0f2,0)

y f

z]

£*(0/ 1f1)

[x, У/

z]

^f(1,0,1)

[X/ y,

z] f (0,1,1)

[x, y,

z]

f(°*°*2)

[X/ У*

z] ,

Определяем теперь лапласиан

laplacian[f_, x_List] :=Inner [D,gradient [f,x] ,x]

и вычисляем его:

laplacian[f[x,y,z],{x,y,z}] f(0'°'2) [x, у, z] +

f(0,2,0) [x^ y f z ] + f (2,0,0) [x ^ y r z]

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

jacobian[f_List, x_List] :=Outer [D, f,x]

Вот пример его вычисления.

jacobian[{f[x,у,z],g[x,y,z],h[x,y,z ] },{x, y,z)]//MatrixForm

f(l,°,°) [ X , y,

Z] f(0,l,0) [x,y f z ]

f(0,0,l) [ X / y f

zj'

g(i,o,°) [x, y,

z] g*0'1'0) [x, y, z]

g*0'0'1*[x, y, z]

Vh d , o , 0) [x, y,

z] h(0#1'0) [x, y, z]

h(0'°'1)[x, y,

z] ,

Наконец, определяем дивергенцию,

divergence [f_List, x__List] :=Inner [D, f,x]

Вот пример ее вычисления.

divergence[{f[x, у, z] ,g[x,y, z] ,h[x,y,z] }, {x,y,z}]

h ( 0 , 0 , l )

z ] +

g (0,l'0) [Xf

y t Zj + f (1,0,0) [X/ у ' Zj

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

f=xA2+x уЛ2+х у zA2;g=Exp[х у z];h=Sin[x у z]; gradient[f,{x,y,z}]

( 2 x + y 2 + y z 2, 2 x y + x z 2, 2xyz} jacobian[{f,g, h},{x, y, z}]//MatrixForm

354

Гпава Ю

'2 х + у2 + у z2

2 x y + x z 2

2 х у z

'

exyzy Z

exyzxz

exyzx y

,

,yzCos[xyz]

xzCos[xyz]

xyCos[xyz]

Впрочем, операции векторного анализа приходится выполнять не только в декарто­ вой системе координат. Поэтому для выполнения этих операций имеется специальный пакет, загружаемый как обычно: «Calculus'VectorAnalysis4.В нем предусмотрено

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

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

{C o o rd in a te S yste m , C o o r d in a t e s [ ] }

{Cartesian, {Xx, Yy,Zz}}

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

Grad[Xx+Sin [Yy Zz]]

{1,Zz Cos[Yy Zz ],Yy Cos [Yy Zz] }

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

SetCoordinates [Cartesian [х, у, z] ]

Cartesian [х, у, z]

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

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

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

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

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

CoordinateRanges [ ]

(0<г«», 0<th<rc, -7t<ph^7t}

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

C o o rd in a te s T o C a rte s ia n [{г,th, ph}]

(rCos[ph] Sin[th],r Sin[ph] Sin[th],r Cos[th]}

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

jd e t= Ja co b ian D e te rm in a n t [ ]

r2 Sin [th]

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

Integrate[jdet, {th, 0, Pi),{ph, -Pi, Pi) ]/.r->R 4лR2

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

Integrate[jdet, {th,0,Pi}, {ph,-Pi, Pi),{r, 0,R) ] 4лR3

3

Алгебра и анализ

355

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

P l o t V e c t o r F i e l d [ {Sin[х y],Cos[x у ] },

{х,0,Pi}, {у, 0, Pi},

PlotPoints->20,ScaleFunction->(.5#&) ,ScaleFactor->None];

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

PlotGradientField[Sin[х]*Cos[уЛ2],{х,-Pi/2,Pi/2},{у, -Pi/2, Pi/2}] ;

1 \ \ V V > t I \ \ У V

t f t t </ f t 4 ' / r 4 4 < ^ r r

1

V

^ ^

* * 4 \ V ^

1 \ \

\

У '

i i

\

* r

1 / t

/ ' -

* ' / / / i \

'* l 1 1 1 1

'i * \ 1 1 I

vV \ \ * ♦ * b* V К Л T

4 f

т

i

* i

i

* * 4 t 4 t

v » M t "

> > У \ \ t t

356

Гпава Щ

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

vectors=Table[{{Sin[u],Cos[u]},{иА2 Sin[2u],uA2 Cos[2u]}}, {и,0,2 Pi,Pi/16Н ;

ListPlotVectorField[vectors,ScaleFactor->None,Frame->True];

Для трехмерных полей нужно загружать пакет «Graphics4PlotField3D'

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

PlotVectorField3D [{у,-х, 0} /z,{х,-1,1},{у,-1,1},{z,1,3}];

Алгебра и анализ

357

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

PlotGradientField3D[х у z,{x,-l,l},{y,-l,l},{z,-l,lj];

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

Дифференциальные уравнения

Поля направлений для дифференциальных уравнений и изоклины

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

Построение поля направлений для дифференциального уравнения

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

уравнение

первого порядка разрешено относительно производной, т.е. имеет вид

У ' = Л х ,у ) ,

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

каждой точке (х, у) задать единичный вектор, коллинеарный вектору (l,yfo у))- Иными словами, достаточно нормировать вектор (1,/(х, у)).

Пример 10.2. Нарисуем поле направлений для дифференциального уравнения

PlotVectorField[{1,хА2-уА2}/Sqrt[1+(хА2-уА2)А2],

{х,-Pi,Pi},{у,-Pi,Pi),PlotPoints->20,

ScaleFunction->(.5#&),ScaleFactor->None];

358

Гпава 10

Совсем несложно начертить и изоклины интегральных кривых дифференциального уравнения первого порядка, разрешенного относительно производной, т.е. имеющего вид у' = Ах, y i

Построение изоклин интегральных кривых дифференциального уравнения

Если дифференциальное уравнение первого порядка разрешено относительно производной, т.е. задано в виде у ' = Л х , У), то изоклины являются линиями уровня Дх, у) = С. Следовательно, задача построения изоклин сводится к построению линий уровня.

Пример 10.3. Построим изоклины уравнения у ' = (у-1)х.

ContourPlot[(у-1)*х,{х,-10,10},{у,-10,10},ContourShading->False];

10

5

0

-5

-10

-10

- 5 0

5

10

Алгебра и анализ

359

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

Нахождение решений дифференциальных уравнений

Решает дифференциальные уравнения функция DSolve.

Пример 10.4. Решим уравнение у'"+4у' = sec It.

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

yh=DSolve[у*'1[t]+4 y ’[t] ==0, y[t], t]

{{y[t]

C[3] - J C [2] Cos [2 t] + J C[l] Sin [2 t] }}

Как видите, система Mathematica обозначает произвольные постоянные через

С[1], С [2], С [3] И Т.Д.

Пример 10.5. Решим уравнение 4 у '2—9х = 0.

Решение.

yh=DSolve[4у '[х]Л2-9х == 0, у[х], х] {{у[х] -> -х3/2 + С [1] }, {у [х] -»х-3/2 + С [1] }}

Заметьте, что в учебниках и задачниках это решение обычно записывается в неяв­ ной форме: (у—С)2 = х3.

Пример 10.6. Решим уравнение х = y'+sin у'.

Решение.

yh=DSolve[x == у ’[х]+Sin[у’[х]], у[х], х] Solve::tdep

The equations appear to involve the variables to be

solved for in an essentially non-algebraic way. More...

DSolve [x — Sin [y'[x] ] + y'[x] , у [x] , x]

Как видим, в данном случае функция DSolve с поиском решения не справилась. Тем не менее решение может быть представлено в параметрической форме:

х = p+sin р, у = р2/2+р sin p+cos р+С.

Впрочем, не спешите обвинять функцию DSolve — ведь решение записано нами не в

виде явной функции!

Вот еще один пример, когда решение находится как неявная функция.

DSolve[

у *[х]

_

у ’ ’ [х] + ------- Sin [у [х] ] у

1[зс]2х

X

 

Cos [у [х] ] х2 у 1[х ]3 == 0, у [ х ] , х]

Solve::tdep

The equations appear to involve the variables to be

solved for in an essentially non-algebraic way. More...

360

Гпава Ю