Мультимедиа: геометрия, графика, кино, звук

         

Дифференцирование



Дифференцирование



Для дифференцирования в системе Mathematica предусмотрена команда (функция) D [.,.]. Вот как вычисляется производная функции



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



Глава 10. Алгебра и анализ

Алгебра Замена выражений в формулах Многочлены Поле рациональных дробей Линейная алгебра Анализ Пределы Дифференцирование Ряды

Исследование функций и построение графиков Интегрирование Векторный анализ Дифференциальные уравнения Поля направлений для дифференциальных уравнений и изоклины Нахождение решений дифференциальных уравнений Системы дифференциальных уравнений Резюме

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



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



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

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



Исследование функций и построение графиков



Исследование функций и построение графиков



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

Определение интервалов возрастания и убывания функции

Найдем для примера интервалы возрастания и убывания функции у = x3-30x2+225x+l. Сначала определим функцию.

у=х^3-30*х^2+225*х+1 1 + 225 х - 30 х2 + х3

Данная функция — многочлен, поэтому она всюду дифференцируема. Найдем ее производную.

D[y,x] 225 - 60 х + 3х2

Так как и производная — многочлен, разложим его на множители.

Factor[%] 3 (-15+х) (-5+х)

Теперь видим, что производная отрицательна только на интервале (5; 15). На этом интервале функция, следовательно, строго убывает. На интервалах (-?, 5) и (15, ?) производная положительна. Поэтому на этих интервалах функция строго возрастает.

Нахождение локальных экстремумов

У рассмотренной нами функции у = х3-30x2+225с+1 производная обращается в нуль в точках х= 5 и х= 15. Поскольку это простые нули производной, то именно эти точки и являются точками ее локального экстремума. Легко вычислить значения функции в этих точках и построить ее график.



Линейная алгебра



Линейная алгебра



Произведения векторов и матриц

Скалярное произведение векторов и матриц обозначается точкой.

{a1, а2, a3}.{b1, b2, b3}

a1 b1 + a2 b2 + аз bз

Для вычисления векторного произведения векторов применяется функция Cross. Она обозначается крестиком. Вот как вычисляется обобщенное векторное произведение пяти векторов в шестимерном пространстве.

{1,3,4,5,7,6}х{2,4,5,7,8,1}х{4,5,3,1,2,7}х {3,3,3,4,2,5}х{4,2,1,2,2,5} {522,-1076,1379,-580,60,-55}

Нормы векторов и матриц

С помощью функции Norm можно вычислять разнообразные нормы векторов и матриц.



Многочлены



Многочлены



Чтобы проверить, что выражение ехрr есть многочлен по некоторой переменной var, нужно вызвать функцию PolynomialQ [елрг, var]. Результат будет True, если ехрr является многочленом по переменной var, и False — в противном случае.



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



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



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

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

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



Поле рациональных дробей



Поле рациональных дробей



Дробь, числитель и знаменатель которой — полиномы, называется рациональной дробью. Уже знакомые нам функции Expand и Factor могут применяться к рациональным дробям. Функция Expand раскрывает произведения и целые положительные степени в числителе и представляет рациональную дробь в виде суммы дробей, знаменатели которых совпадают со знаменателем исходной рациональной дроби, а числителями этих дробей служат отдельные слагаемые в раскрытом числителе исходной рациональной дроби.

Функция Apart раскладывает рациональную дробь на простейшие.



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



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



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

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

Давайте применим теперь средства изображения векторных полей для рисования полей направлений для дифференциальных уравнений. Если дифференциальное уравнение первого порядка разрешено относительно производной, т.е. имеет вид y' = f(x, у), то поле направлении для него строится очень просто, нужно лишь в каждой точке (х, у) задать единичный вектор, коллинеарный вектору (1, f(x, у)). Иными словами, достаточно нормировать вектор (1,f(x, у)).

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



Пределы



Пределы



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



в виде поименованных правил. Например,



Пример 1


Для всех дальнейших вычислений х сохраняет свое значение.

х+у

5.8598744820488384738229308546321653819544164930751+ у

Подстановки удобно задавать в виде поименованных правил. Например, можно определить подстановку r1= х->а, и после этого она может быть применена к конкретному выражению с помощью функции ReplaceAll, имеющей также постфиксную форму /.:

r1 = х -> а x+1/.rl

1+а

То же самое можно сделать и так:

ReplaceAll[х + 1, r1]

1+а

Вот пример последовательных замен.

{а,b, с}/.a->b/.b->d

{d,d,c}

Функция ReplaceAll позволяет осуществить несколько подстановок одновременно. Тогда эти подстановки должны быть оформлены в виде списка и заданы вторым аргументом этой функции. Вот пример одновременной замены:

{а,b,с}/.(a->b,b->d)

{b,d,c}

Однако функция ReplaceAll выполняет замену в каждом подвыражении только

раз, рекурсивно замена не выполняется.

а

ReplaceAll [х + х2 , {х -> а, х2 -> х} ]

а+х

Если же нужно делать подстановки повторно, необходимо использовать функцию

ReplaceRepeated.

ReplaceRepeated[x + х2, {х->а, х2-» х} ]

2 а

Функция ReplaceRepeated имеет постфиксную форму // ..

х + х2 // . {х -> а, х2 -> х}

2 а

Пусть имеем список заменяемых и список заменяющих выражений. Тогда правила замены можно сформировать с помощью функции Thread.

rr=Thread[{r,s,t}->{R, S,T}]

 (r->R,s->S,t->T)

Теперь применим эти правила.

В случае нескольких переменных при



Пример 1


В случае нескольких переменных при проверке необходимо указать список переменных: PolynomialQ [expr, [varl, var2,...}]. PolynomialQ[ху,{х,у}] True

Выражение PolynomialQ [ехрr] равно True, если ехрr является полиномом относительно каких-либо переменных. В противном случае результат равен False. PolynomialQ[ху,{х,у}] True PolynomialQ[(Pi+x)у] True PolynomialQ[1/z+xy] False

Чтобы узнать общее число слагаемых в многочлене poly, можно вычислить выражение Length [poly]. Но не забудьте перед этим раскрыть скобки.

PolynomialQ[(a+b+c+d)^100] True Lengthf(a+b+c+d)^100] 2 Length[Expand!(a+b+c+d)^100]] 176851

Функция Variables, примененная к. poly, дает список всех независимых переменных в полиноме poly.

Variables[(a+b+c+d)^100]

{a,b,c,d}

Коэффициенты

Выражение Coefficient [poly, form] имеет своим значением коэффициент при выражении form в полиноме poly.

к сумме рациональных дробей, приводит



Пример 1


Функция Factor, примененная к сумме рациональных дробей, приводит их к общему знаменателю и раскладывает на множители числитель и знаменатель полученной рациональной дроби:

Совсем просто выполняется обращение неособенных



Пример 1


Обратные и псевдообратные матрицы

Совсем просто выполняется обращение неособенных матриц.

Абсолютно ничего сложного. Но помните,



Пример 1


Абсолютно ничего сложного. Но помните, что если двустороннего предела нет, система Mathematica может пытаться подсунуть односторонний вместо него, причем даже предупреждения не будет! Вот тривиальный классический пример, показывающий, что в случае разных односторонних пределов система Mathematica в качестве двустороннего предела просто подсовывает любой из односторонних.

Пример 1



Пример 1

.

 

Чтобы отбросить остаточный член, можно



Пример 1


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

Вот более сложный пример. Пусть



Пример 1


Вот более сложный пример. Пусть нужно найти локальные экстремумы функции

Но не всегда все проходит



Пример 1


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

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



Пример 1


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

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



Пример 1


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

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

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

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

Как видите, система Mathematica обозначает



Пример 1


Как видите, система Mathematica обозначает произвольные постоянные через С[1],С[2],С[3] и т.д.

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

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

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

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

Теперь построим графики функций



Пример 1


Теперь построим графики функций x(t) и y(t) для случая, когда параметр а принимает значение 1/2.

в системе Mathematica имеют заголовки.



Пример 2


Выражения в системе Mathematica имеют заголовки. Например:

Выражение Coefficient



Пример 2


Выражение Coefficient [poly, form^n] эквивалентно Coefficient [poly, form, n].

Функция Together приводит рациональные дроби



Пример 2


Функция Together приводит рациональные дроби к общему знаменателю и после их сложения сокращает общие множители в числителе и знаменателе.

Особенная матрица не имеет обратной,



Пример 2


Особенная матрица не имеет обратной, но для нее можно определить псевдообратную, т.е. такую, произведение которой на исходную наименее уклоняется (по сумме квадратов) от единичной матрицы. (Конечно, для неособенной матрицы ее псевдообратная совпадает с обратной.)

Пример 2



Пример 2



в результате дифференцирования, пришлось упрощать,



Пример 2



Заметьте, что выражение, полученное в результате дифференцирования, пришлось упрощать, так как автоматически упрощение не выполняется! Вот еще один пример.

0[Аbз[х^2],х] 2 Abs [x] Abs'[х]

Подход, я бы сказал, весьма формальный. (Зато он работает даже для функций комплексного переменного!) Из-за формализма вычисления зачастую могут выполняться не до конца.

D[Abs[х^2],х]/.х->1 2 Abs'[l]
Но в целом, если подобные примеры во внимание не принимать, система Mathematica успешно справляется и с вычислением частных (в том числе и смешанных) производных.

Для вычисления полных дифференциалов предусмотрена команда Dt.

в ряд Тейлора функции двух



Пример 2


Ниже приведен пример разложения в ряд Тейлора функции двух переменных.

и непрерывна на всей числовой



Пример 2



Определим нашу функцию в системе Mathematica.

y1=((l-x) (х-2)^2)^(1/3) ((1-х) (-2 + х)2)1/3

Данная функция определена и непрерывна на всей числовой оси. Находим ее производную.

не учтен случаи n=



Пример 2


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

Функция Inner немного похожа на



Пример 2


Функция 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] и вычислим его:

и изоклин, несомненно, дают весьма



Пример 2


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

 


в данном случае функция DSolve



Пример 2


Как видим, в данном случае функция DSolve с поиском решения не справилась. Тем не менее решение может быть представлено в параметрической форме: х = p+sin р, у = p2/2+psin p+cos р+С.

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

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

Чтобы построить фазовый портрет, нужно



Пример 2


Чтобы построить фазовый портрет, нужно воспользоваться функцией ParametricPlot.

Их тоже можно заменить.



Пример 3


Их тоже можно заменить.

представляет собой список коэффициентов при



Пример 3


Результат вычисления выражения CoefficientList [poly, form] представляет собой список коэффициентов при степенях form в полиноме poly. Список составляется в порядке возрастания степеней.

и знаменателе рациональной дроби не



Пример 3


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

С помощью псевдообратных матриц можно



Пример 3


С помощью псевдообратных матриц можно находить решения несовместных систем линейных уравнений.

Решение систем линейных уравнений

Пусть имеем систему линейных уравнений т х = v, где т — матрица системы, а v — вектор правых частей. Ее решение можно найти так.

что для отбрасывания остаточных членов



Пример 3


Заметьте, что для отбрасывания остаточных членов понадобилась только одна команда Normal.

Арифметические операции над рядами

Конечно, ряды можно складывать, вычитать, умножать и даже делить. Причем все действия система Mathematica выполняет практически без дополнительных подсказок. Пусть имеем, например, два ряда Тейлора.

что производную можно упростить, поэтому



Пример 3


Видим, что производную можно упростить, поэтому применяем функцию FullSimplify. (Вообще говоря, это лучше делать всякий раз, когда вычисляются производные.)

Это тавтология. Между тем данный



Пример 3


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

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



Пример 3


Определяем теперь лапласиан
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] Вот пример его вычисления.

Однако не следует думать, что



Пример 3


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

Однако не всегда функция DSolve



Пример 3


Однако не всегда функция DSolve справляется с системами дифференциальных уравнений.

Пример 10.10. Найдем решение системы дифференциальных уравнений у"= y2+z, z'= -2yy'+y, удовлетворяющее начальным условиям у = 0, у'= 0, z = 0 при х = 0.
sol2=DSolve[{y''[x]==y[x]^2+z[x] , z'[x]==-2*y[x]*y'[x]+y[x], у[0]==1,у'[0]==l,z[0]==0},{y,z},{x}) DSolve [{у"[x]==y[x]2+z[x], z'[x]=y[x]-2y[x]y'[x],y[0]==1,y'[0] = 1,z[0] == 0},{y, z),{x}]
Как видите, несмотря на то что в данном случае решением является пара функций у = ё*, z - ef—e1*, функция DSolve не смогла найти его. В таких случаях, как и одно дифференциальное уравнение, так и систему дифференциальных уравнений приходится решать численно. Для этого можно воспользоваться функцией NDSolve. Вызов ее отличается от вызова функции DSolve лишь тем, что в нем нужно указать интервал, на котором ищется решение.
sol2=NDSolve[{y''[x]==y[x]^2+z[x], 2'[х]==-2*у[х]*у'[х]+у[х], у[0]==1,у'[0]= =1, z[0]==0}, {y,z},{x,0,10}] {{y->InterpolatingFunction[{{0.,10.}},<>], z->InterpolatingFunction[{{0.,10.}),<>]}}
В данном случае уравнения представлены в виде интерполяционных функций для у(х) и z(x) на интервале (0, 10). Хотя это и не аналитические выражения, они позволяют вычислить значения наших функций — решений системы дифференциальных уравнений — в любой точке интервала (0, 10).

{y[5],z[5]}/.sol2 { {148.413,-21878.}}

Несложно представить решение и в табличном виде. Ниже, например, приведена таблица значений функций у(х) и z(x) на отрезке [1, 5].

и Plus были заменены их



Пример 4


13 данном случае выражения с заголовками integer, Rational и Plus были заменены их логарифмами. Вот еще пример этого типа. Все выражения с заголовками f или g заменим их квадратами.

Список коэффициентов можно привести по



Пример 4


Список коэффициентов можно привести по определенному модулю.

в знаменателе рациональной дроби. Для



Пример 4


Можно раскрывать скобки только в числителе или только в знаменателе рациональной дроби. Для этого предназначены функции ExpandNumerator и Expand Denominator. Получить числитель и знаменатель рациональной дроби можно с помощью функций Numerator и Denominator, т.е. тех же самых функций, что используются для получения числителя и знаменателя рационального числа.

Для упрощения различных выражений, в том числе и рациональных, полезно применять функцию simplify, которая выполняет алгебраические преобразования над выражением и приводит его к простейшей (с точки зрения системы Mathematica) форме. Данную функцию удобно применять в постфиксной входной форме, т.е. приписывая ее имя после // в конце входного выражения:

и функции для специализированных методов,



Пример 4


Вот как проверяется результат.

m.x-v

{0,0}

Имеются, конечно, и функции для специализированных методов, таких как Гауссово исключение, разнообразные декомпозиции, вычисление миноров и т.д.

Деление можно выполнить так.



Пример 4


Деление можно выполнить так.

и являются критическими для данной



Пример 4


Видим, что в точках х = 1 и х = 2 производная не существует, а в нуль обращается только в точке х = 4/3. Поэтому только эти точки и являются критическими для данной функции. Однако при переходе через точку х — \ производная не меняет знака, поэтому она не является точкой экстремума. При переходе через точку х = 4/3 производная меняет знак минус на плюс, поэтому в этой точке функция имеет минимум. При переходе через точку х = 2 производная меняет знак плюс на минус, поэтому в этой точке функция имеет максимум. Вычисляем минимум и максимум.

Неберущиеся интегралы остаются без изменений



Пример 4


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

Integrate[Ехр[х^2], х] 1/2? Erfi [x]

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

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

Вот еще несколько примеров выполнения



Пример 4


Наконец, определяем дивергенцию. 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

в данном случае существенно использованы



Пример 4


Как видите, в данном случае существенно использованы функции Бесселя.

Но все же есть случай, когда функция DSolve сдается сразу. Это происходит, если в качестве аргумента искомой функции используется выражение, не совпадающее с независимой переменной. (Такие уравнения называются функционально-дифференциальными. К счастью студентов, такие дифференциальные уравнения часто представляют собой крепкий орешек и для профессоров, поэтому в задачниках (а не в жизни!) таких уравнений встречается не очень много.)

Эта таблица, несомненно, более читабельна,



Пример 4


Конечно, это совершенно нечитаемо, и лучше превратить это в обычную таблицу.
x
y(x)
z(х)
1
2.71828
-4.67077
1.2
3.32012
-7.70305
1.4
4.0552
-12.3894
1.6
4.95303
-19.5795
1.8
6.04965
-30.5486
2.
7.38906
-47.2091
2.2
9.02501
-72.4259
2.4
11.0232
-110.487
2.6
13.4637
-167.808
2.8
16.4446
-253.982
3.
20.0855
-383.343
3.2
24.5325
-577.312
3.4
29.9641
-867.883
3.6
36.5982
-1302.83
3.8
44.7012
-1953.49
4.
54.5981
-2926.36
4.2
66.6863
-4380.38
4.4
81.4508
-6552.79
4.6
99.4843
-9797.64
4.8
121.51
-14643.3
5.
148.413
-21878.


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

Вот еще один способ сделать



Пример 5


Вот еще один способ сделать то же самое.

к каноническому виду выполняется путем



Пример 5


Приведение к каноническому виду

Приведение многочленов к каноническому виду выполняется путем раскрытия скобок и приведения подобных.

Разложение на множители

Разложение многочленов на множители над полем рациональных чисел выполняет функция Factor.

Функцию Simplify можно применять также



Пример 5


Функцию Simplify можно применять также для упрощения выражений при определенных условиях. Вот пример.

Simplify[a^3+b^3+c^3-3*a*b*c,a+b+c==0]

0

это есть начальный отрезок ряда,



Пример 5


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

Так что локальный минимум



Пример 5


Так что локальный минимум равен

Чтобы приближенно вычислить определенный интеграл



Пример 5


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

Integrate[Exp[x]/x,{x,1,2}] -Gamma[0,-2]+Gamma[0,-1] Nlntegrate[Exp[x]/x,{x,l,2}] 3.05912

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

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

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



Пример 5


Впрочем, операции векторного анализа приходится выполнять не только в декартовой системе координат. Поэтому для выполнения этих операций имеется специальный пакет, загружаемый как обычно: <<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

Как видим, функция DSolve не



Пример 5


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

table BORDER



Пример 5

А вот как все множители,



Пример 6


А вот как все множители, являющиеся вызовами функций, можно возвести в квадрат:

Разложение на множители выполняет не



Пример 6


Разложение на множители выполняет не только функция Factor, но и функции FactorList и FactorTerms. В результате вычисления выражения FactorList [poly] получается список множителей полинома poly вместе с показателями степеней, с которыми множители входят в разложение poly на множители. Первый элемент списка есть общий численный множитель — так называемое содержание многочлена. Если содержание многочлена равно единице, то список начинается с {1,1}.

Пример 6



Пример 6



Точно так же вычисляется



Пример 6



Точно так же вычисляется и локальный максимум.

y1/.x->2 0

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

Теперь нужно



Пример 6


Теперь нужно вычислить

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



Пример 6


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

что фиктивные переменные, по которым



Пример 6


Заметьте, что фиктивные переменные, по которым производится интегрирование, обозначены в решении через K$номер.

Ниже приведен пример решения задачи Коши с помощью все той же функции

эквивалентно выражению expression для сопоставления



Пример 7


Заметьте, . что выражение HoldPattern [expression] эквивалентно выражению expression для сопоставления с образцом, но оставляет выражение expression в невычисленной форме.

А вот как все вызовы функций, не содержащие степеней и произведений, возводятся в куб.

Функция FactorTerms позволяет вынести общий



Пример 7


Функция FactorTerms позволяет вынести общий числовой множитель.

что для построения графика знак



Пример 7


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

Нахождение наибольшего и наименьшего значений (глобальных экстремумов)

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

Нахождение интервалов выпуклости и точек перегиба

Найдем интервалы выпуклости и точек перегиба функции y2= х4-6х2—6х+1. Сначала введем функцию в систему Mathematica.

y2=x^4-6x^2-6x+1 1-6х-6х2 + х4

Теперь находим вторую производную.

D[y2,{x,2}] -12 + 12 х2

Так как вторая производная положительна при |x| >1, то (-?, -1) и (1, ?) — интервалы выпуклости вниз, а (-1, 1) — интервал выпуклости вверх. Поскольку в точках х = -1 и х = 1 функция меняет направление выпуклости, эти точки являются точками перегиба. Впрочем, в этом можно убедиться и иначе: третья производная

0[у2,{х,3}]/.х->1 24 0[у2,{х,3}]/.х->-1 -24

в этих точках отлична от 0.

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

к полярным координатам. Тогда пластина



Пример 7

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

При решении многих задач весьма



Пример 7


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

Часто решение дифференциального уравнения имеет



Пример 7


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

Пример 10.7. Построение графика решения дифференциального уравнения. Решим дифференциальное уравнение

с помощью PowerExpand, корректны, вообще



Пример 8


Действия со степенями

Функция PowerExpand приводит (а*b) ^с к виду а^с * b^с. Преобразования, сделанные с помощью PowerExpand, корректны, вообще говоря, только если с целое, а а и b положительные.

Кроме того, PowerExpand приводит Log[а^b] к виду b*Log [а].

PowerExpand [Log [ (ab)n] ]

n (Log[a]+Log[b])

Квадратный корень тоже рассматривается как степень.

позволяет вынести общий множитель, не



Пример 8


Вызов FactorTerms [poly, x] позволяет вынести общий множитель, не зависящий от х; FactorTerms [poly, {xl, x2, ...}] последовательно выделяет множители, не зависящие от x1, х2 и т.д. Вычисление выражения FactorTermsList [poly, (xl, x2, . . .}] дает список множителей poly. Первый элемент в списке есть общий числовой множитель, второй — множитель, не зависящий ни от одного из x1, х2, ... . Последующие элементы есть множители, не зависящие от как можно большего числа переменных x1, х2, ....

Деление многочленов

PolynomialQuotient [polyl, poly2] дает частное от деления многочлена poly1 на многочлен poly2, a PolynomialRemainder [poly1, poly2] — остаток.

Наибольший общий делитель многочленов

Важнейшими операциями при работе с полиномами являются нахождение наибольшего общего делителя и наименьшего общего кратного. Выражение PolynomialGCD [poly], poly2] представляет собой наибольший общий делитель многочленов polyl и poly2. При вычислении наибольшего общего делителя все символьные параметры в полиномах трактуются как переменные, и деление на них не допускается.

PolynomialGCD[х^3000-1, х^1503-1]

-1 + х3

Наименьшее общее кратное многочленов

Выражение PolynomialLCM[poly2, poly2] представляет собой наименьшее общее кратное многочленов poly1 и poly2.

Результант

Выражение Resultant [polyl, poly2, var] представляет собой результант многочленов poly1 и poly2, рассматриваемых как многочленов от переменной var.

Resultant[а*х^2+b*х+с, 2а*х+b, х] -

ab2 + 4 а2 с

Пример 8



Пример 8



р на гиперболе ху



Пример 8

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

и градиент скалярного поля.



Пример 8


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

и построим график его решения.



Пример 8

  и построим график его решения.

Сначала с помощью функции DSolve находим решение.

и конечно же, PowerExpand также



Пример 9


Ну и конечно же, PowerExpand также приводит (а^b) ^с к виду а^ (bc).

Раскрытие скобок

Раскрытие скобок выполняет функция Expand. Вот пример.

Поэтому далее мы бы



Пример 9

  (значение р на  гиперболе ху = 2). Поэтому далее мы бы написали 

и функции для вычерчивания полей,



Пример 9


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

Найдя решение, можем построить его



Пример 9


Найдя решение, можем построить его график. Для этого придется, конечно, задать значения произвольных постоянных. В данном случае это уравнение первого порядка, и потому у него только одна произвольная постоянная: с [ 1 ]. Ее значение удобнее всего задать подстановкой.

Можно указать, что при раскрытии



Пример 10


Можно указать, что при раскрытии скобок нужно выполнять приведение по определенному модулю.

и вычислили бы этот интеграл



Пример 10

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

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



Пример 10


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

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

Иногда приходится строить графики решений,



Пример 10


Иногда приходится строить графики решений, получающихся при различных значениях произвольных постоянных. Тогда нужно в подстановке указать список значений. Пусть, например, нужно построить графики решений для следующих значений произвольной постоянной с [ 1 ].

можно указать, что раскрывать скобки



Пример 11


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

Момент инерции относительно оси 0у



Пример 11


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

и функция для изображения градиента



Пример 11


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

Тогда это можно сделать так.



Пример 11


Тогда это можно сделать так.

Однако функция Expand раскрывает не



Пример 12


Однако функция Expand раскрывает не все скобки, а только в произведениях и степенях. Она не раскрывает скобки, например, в знаменателях. Если же нужно раскрыть все скобки, нужно применить функцию ExpandAll.

Эти средства изображения векторных полей



Пример 12


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


Построение графика решения задачи Коши.



Пример 12


Пример 10.8. Построение графика решения задачи Коши. Найдем решение задачи Коши для дифференциального уравнения у"= ау'+у с параметром и построим график его решения для нескольких значений параметра.

Сначала с помощью функции DSolve находим решение задачи Коши.

Конечно же, для функции ExpandAll



Пример 13


Конечно же, для функции ExpandAll также можно указать шаблон, к которому применяется раскрытие скобок. Все выражения, не содержащие шаблона, останутся без изменения.

Приведение подобных

Вызов Collect [expr, x] собирает в выражении ехрr члены с одинаковыми степенями х. Иными словами, функция Collect приводит подобные члены.
Collect[х+4у+5ху,х]. 4 у+х (1+5 у), Collect[х+4у+5ху,у] х+(4+5 х) у
Вызов Collect [ехрr, {x1, х2, ...}] собирает в выражении ехрr члены с одинаковыми степенями х{, затем — с одинаковыми степенями х2 и т.д.

Теперь можем построить графики.



Пример 13


Теперь можем построить графики.

Иногда после приведения подобных нужно



Пример 14


Иногда после приведения подобных нужно к каждому члену применить какую-нибудь функцию. Тогда ее нужно указать третьим параметром функции Collect: Collect [expr, {x1, х2, ...}, функция]. Вот как, например, выполняется разложение коэффициентов на множители после приведения подобных.

Все построенные решения проходят через



Пример 14


Все построенные решения проходят через точку (0, 1) и в этой точке имеют общую касательную, параллельную оси абсцисс.

В функции Collect можно использовать



Пример 15


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

что полученное выражение отличается от



Пример 16


Заметьте, что полученное выражение отличается от

Ниже показано применение шаблона для



Пример 17


хотя и равно ему тождественно.

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

Пример 18



Пример 18

 


В системе Mathematica предусмотрены все



Резюме

В системе Mathematica предусмотрены все функции, необходимые для выполнения основных алгебраических и аналитических операций. Очень легко, в частности, выполняются всевозможные подстановки. Их можно выполнять глобально, одновременно, повторно, по образцу. Предусмотрены действия с дробями и со степенями, раскрытие скобок, приведение подобных. Имеются различные функции для выполнения операций над многочленами, в том числе и весьма трудоемкие для ручного счета, такие как разложение на множители. Легко вычисляются наибольший общий делитель и наименьшее общее кратное полиномов, а также результант. Что касается поля рациональных дробей, то для него предусмотрены не только четыре основных действия (они предусмотрены для любых выражений), но и более специфические операции вроде сокращения, раскрытия произведений и целые положительных степеней в числителе, а также разложение рациональной дроби на простейшие, разложение числителя и знаменателя на множители, приведение к общему знаменателю с последующим сокращением общих множителей числителя и знаменателя в полученной сумме. Ряд функций предназначен для упрощения результатов вычислений.

В области линейной алгебры также предусмотрен широкий набор операций: вычисление различных произведений (векторов и матриц), норм (векторов и матриц), матричные операции (в том числе обращение матриц и нахождение псевдобратных матриц). Есть средства решения систем линейных уравнений, в том числе и несовместных (нахождение псевдорешений).

Что касается операций анализа, то и они, если не считать перехода к пределу, реализованы превосходно. Лишь при вычислении пределов нужно соблюдать осторожность: в случае несовпадения односторонних пределов любой из них система Mathematica может подсунуть в качестве двустороннего. Система Mathematica весьма успешно справляется с вычислением производных (в том числе и смешанных) и интегралов (определенных и неопределенных). После вычисления производных полученный результат иногда нуждается в упрощении. Зато разложение функций в ряд Тейлора, да и действия над рядами выполняются безукоризненно. Все это позволяет произвести довольно полное исследование функций (определить их интервалы монотонности, найти локальные и глобальные экстремумы, найти интервалы выпуклости и точки перегиба) и построить их графики. При необходимости исследовать скалярные или векторные поля, задаваемые функциями нескольких переменных, можно воспользоваться функциями Outer и Inner для определения операций векторного анализа. Легко определяются градиент, гессиан, лапласиан, якобиан и дивергенция. Впрочем, все нужные определения (причем в самых разнообразных системах координат) имеются в пакете Calculus`VectorAnalysis`. Функциями этого пакета можно воспользоваться и для решения других задач, например для исследования дифференциальных уравнений. Для нахождения решений дифференциальных уравнений и их систем используется функция DSolve. Она может не только находить общие решения, но и учитывает дополнительные условия (начальные, граничные) и потому может решать, например, задачу Коши. Если же функция DSolve не может найти решение в аналитическом виде, для численного решения можно воспользоваться функцией NDSolve

Ряды



Ряды



Разложение в ряд Тейлора

Вот как функция tg(x-x3)-sin(x+x3) разлагается в ряд Тейлора:



Системы дифференциальных уравнений



Системы дифференциальных уравнений



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

Пример 10.9. Найдем решение системы дифференциальных уравнений х' = у, у' = -а2х, удовлетворяющее начальным условиям х = 1, у' = 0 при t = 0.



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



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



Операции векторного анализа легко определить самостоятельно. Для этого полезны функции 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}}}

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



Замена выражений в формулах



Замена выражений в формулах



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

Вычисление выражения Set [левая часть, правая часть], или левая часть = правая часть, выполняется следующим образом. Сначала вычисляется правая часть, а затем получившийся результат (вычисленное выражение) присваивается в качестве значения невычисленной левой части. Всюду в дальнейшем левая часть, в какие бы выражения она ни входила, будет заменяться выражением, полученным в результате вычисления правой части. Левая и правая части могут быть списками, и поэтому операцию замены (подстановки) Set можно записать в виде присваивания списков {левая часть,, левая часть2, ...} = {правая часть,, правая часть2, .. .}. В этом случае результат вычисления /-и правой части будет присвоен /-и левой части. В качестве примера присвоим символу х значение а и после этого вычислим выражение (х+1)^2.
х=а а (х+1)^2 (1 + а)2
Вот более сложный случай.
{х,х}={а,b} {а,b} х^2 b^2
Обратите внимание, что никакого предупреждения не было. Это подобно тому, как в языках программирования вполне допустим оператор х = х+1 потому, что действия выполняются не одновременно, а в определенном порядке.

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

Evaluate[ff/@{a,b,с,d}]={1,23,45,678}; ff[b] 23

Как видите, теперь везде ff [b] заменяется своим значением. Пусть теперь b = 1. Заменится ли ff [1] своим значением? Оказывается, нет.

b=1

1

ff[l] ff[l]

Более того, теперь даже ff [b] не заменяется своим значением.

ff [b] ff1]

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

Иногда глобальную! подстановку нужно отменить. Если левая часть есть переменная, это можно сделать с помощью функции Clear. Вызов clear [переменная], переменная2, .. .} отменяет все подстановки значений, присвоенных переменным переменная!, переменная!, ... . Для отмены подстановки значения одной переменной можно использовать присваивание вида переменная = . b=N[Pi,50]

3.1415926535897932384626433832795028841971693993751

b=.

b

b

Присваивание вида переменная = . является синонимом выражения Unset [переменная].

b=N[Pi,50]

3.1415926535897932384626433832795028841971693993751

Unset[b]

b

b

Присваивание, или функция Set, задает глобальную подстановку, т.е. такую подстановку, которая выполняется во всех последующих вычислениях до ее явной отмены. Если же подстановку одного выражения вместо другого нужно сделать в одном конкретном выражении или же в нескольких, то удобнее использовать функцию Rule.

Выражение Rule [левая часть, правая часть], записываемое также в виде левая часть->правая часть, задает правило, в соответствии с которым вместо левой части подставляется вычисленная правая часть. При этом правая часть вычисляется в момент

вызова функции Rule. Если правую часть нужно вычислять в момент применения правила, то нужно вызвать не функцию Rule, а функцию RuleDelayed, вызов которой можно записать в виде левая часть :> правая часть.



За гранью простого



Глава 11. За гранью простого

Новый вид науки Теория универсальности, или насколько сложным может быть поведение простой динамической системы Клеточные автоматы Резюме

Клеточные автоматы



Клеточные автоматы



Клеточный автомат — это совокупность клеток пространства (возможно, многомерного), каждая из которых может находиться в одном из нескольких состояний. Клеточные автоматы представляют собой дискретную модель, основанную на рекуррентных правилах: следующий шаг является результатом применения правил к конфигурации, достигнутой на предыдущем шаге. Вот как эволюционирует Вселенная (иногда ее удобно рассматривать тоже как клеточный автомат), населенная такими автоматами. Все пространство (Вселенная) разбито на клетки, каждая из которых может находиться в одном из нескольких состояний. (Сами клетки тоже можно рассматривать как простейшие автоматы. Тогда можно сказать, что в некоторых клетках "живут" простейшие автоматы.) Эти клетки (простейшие автоматы) подчиняются определенным правилам (законам населяемой ими Вселенной). Сами правила обычно настолько просты, что могут быть занумерованы числами. Однако получающиеся в результате жизнедеятельности таких организмов конфигурации могут быть очень сложными. Иными словами, сообщество примитивных организмов (т.е. организмов, живущих по весьма примитивным правилам) может создать весьма сложную социальную структуру. Возможна и другая трактовка: хотя сами элементарные частицы устроены просто и подчиняются весьма простым законам, они образуют нашу Вселенную. (Разумеется, Вселенная устроена весьма сложно.)

Чтобы увидеть все это на экране, нам понадобится предварительно познакомиться с несколькими функциями. Функция CellularAutomaton [правило, начальная конфигурация, число шагов] генерирует представление (список) конфигурации, в которую переходит начальная конфигурация после указанного числа шагов в соответствии с заданным правилом. Функция Raster [{{а11, а12, ... }, ... }] является двухмерным графическим примитивом, который представляет прямоугольный массив ячеек в градациях серого. (Состояние клетки удобно изображать определенным цветом или градацией серого.) Вот пример.



Новый вид науки



Новый вид науки



Боюсь, я несколько превысил отведенный мне лимит времени, хотя и не успел полностью познакомить вас ни со всей Математикой, ни со всеми функциями системы Mathematica. Памятуя опыт Никола Бурбаки, я и не ставил перед собой такой задачи. Просто я хотел показать, что с помощью пятистрочечных программ, написанных на языке системы Mathematica, школьники, студенты, аспиранты, инженеры и научные сотрудники самых разных профилей могут успешно решать свои задачи. И если вы готовы идти дальше и применять систему Mathematica в своей работе, — я достиг цели, поставленной перед написанием этой книги. Жаль, конечно, что нет такой одной универсальной книги, в которой была бы изложена вся-вся Математика. Даже в этой тоненькой книжечке были затронуты вопросы, о которых пятитомная Математическая энциклопедия даже не упоминает. И уж тем более это справедливо для пятитомного (в семи книгах!) курса высшей математики, написанного В. И. Смирновым. Хотя многотомное собрание сочинений Бурбаки является, вероятно, одним из наиболее полных, и оно не может рассматриваться как абсолютно полное. Впрочем, в качестве одной из наиболее полных, если не самой полной, энциклопедий математики можно рассматривать, на мой взгляд, и систему Mathematica. (Конечно, она и неполна, и многотомна. Ведь ядро, хотя и расширяется от версии к версии, охватывает далеко не все разделы математики. Дополнительные сведения содержатся в пакетах.) Но это не простая, а активная энциклопедия: она не просто выдает информацию, а выполняет необходимые действия (вычисления, например). Как и при использовании любой другой, при применении этой энциклопедии требуется определенная подготовка, — из этой книги вы почерпнули необходимые начальные сведения. В отношении удобства пользования система Mathematica уникальна: ею систематически пользуется сам автор — Стив Вольфрам! Более того, именно с ее помощью Стив Вольфрам открыл новый вид науки! Как это случилось? Как и все сложное, очень просто. Стив начал искать ответ на вопрос: почему простые объекты могут образовывать сложную конструкцию и насколько сложным может быть поведение простых систем?

 



Вот как все это выглядит



Пример 1


Вот как все это выглядит на графике.

особенно при большом числе клеток,



Пример 1


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

Вот теперь действительно есть чему



Пример 2


Вот теперь действительно есть чему удивиться! Численность популяции оказалась периодической функцией.

Конечно, здесь проведены вычисления только дляr = 3,83, а нам нужно провести вычисления для разных r. Давайте проведем их для 250 значений г, равномерно распределенных между r = 2,8 и r = 4,0.

t1=Table[{r,x[r][n]},{r,2.8,4,1.2/249},{n,101,300}];

Здесь для каждого из 250 значений г строится список хn для n- 101, ..., 300. Вот что получается (конец опущен).

это уже нечто вроде приглашения



Пример 2


- это уже нечто вроде приглашения в театр, где актерами будут клеточные автоматы. Но вначале увертюра. Нам понадобится еще одна функция.

Чтобы построить график, этот список



Пример 3


Чтобы построить график, этот список нужно сделать плоским:

toshow=Flatten[t1,1);

Теперь список будет иметь вид (конец опущен)

{{2.8,0.642857},{2.8,0.642857},{2.8,0.642857},{2.8,0.642857}, {2.8,0.64 2857},{2.8,0.642857},{2.8,0.642857},{2.8,0.642857},

и мы можем построить график, наглядно демонстрирующий поведение последовательности {*„} при различных значениях параметра г в отображении хn+1= rхn(1-хn).

Теперь используем правило 481,



Пример 3


Теперь используем правило 481, и занавес поднят!

Из графика видно, насколько сложно



Пример 4


Из графика видно, насколько сложно зависит поведение популяции от r.

Еще раз обратим внимание на простенькую формулу хn+1 = rхn(1-хn). При небольших г (0<r<1) хn стремится к нулю независимо от выбора XQ. Судя по формуле хn+1= rxn(1-хn), вид, численность которого вначале равна XQ, выжить не может, сколько бы животных ни было вначале. Поведение последовательности в этом и в других случаях удобно представлять графически. Нарисуем кривую y=f(x) при заданном значении г и прямую у = х. Отложим х по оси абсцисс, проведем вертикаль до пересечения с кривой у —/(х) (точка А), а затем из точки пересечения горизонталь до пересечения с линией у = х (точка В). Теперь вновь проведем вертикаль до пересечения с кривой у = f(x), что даст нам точку С с координатой х2. Тогда х2 =f(х1). Взяв точку х2 за начальную и повторив все те же операции, получим х3, затем х4 и т.д.

здесь мы видим только конечный



Пример 4


Естественно, здесь мы видим только конечный результат. Давайте теперь посмотрим, как эволюционирует Вселенная с одним единственным атомом (число 1), окруженным пустотой (нулями) по правилу 30. Вот начальное состояние:

Теперь рисуем график, чтобы представить



Пример 5


Теперь рисуем график, чтобы представить поведение последовательности хn при n->?.

А вот та же Вселенная



Пример 5


А вот та же Вселенная через три секунды (секунда = 1 шаг):

то все значения х„ лежат



Пример 6


Из рисунка видно, что хn->0 при n->?.

Из формулы хn+1 = rхn(1-хn) следует, что функция f(x) переводит отрезок [0, 1] в отрезок [0, r/4]. Если r<4, то все значения х„ лежат на отрезке [0, 1] при условии, что 0<х<1. Так что формула хn+1 = rхn(1—хn) задает отображение отрезка [=, 1] в себя.

Пусть теперь r немного больше 1, например r = 2.

для удобства наблюдателей, приведен негатив



Пример 6


Здесь, правда, для удобства наблюдателей, приведен негатив Вселенной, притом перевернутый!

Отвечая на вопрос Наполеона о необходимости Создателя, можно сказать, что если у этой Вселенной и был Создатель, то им был Стив Вольфрам!

Несомненно, самым известным двухмерным клеточным автоматом является игра "Жизнь", придуманная Джоном Конвеем в 1970 году. Именно она прославилась своими многочисленными узорами и способностью заставлять людей тратить уйму машинного времени на поиски еще более интересных узоров! В этой игре с очень простыми правилами есть все: катапульты, ружья, паровозы, планеры, циклы, пожиратели планеров, крокодилы, стационары, семафоры и аннигиляция. Крокодил, например, является пожирателем планеров, поскольку он проглатывает планер без всякого ущерба для себя. С помощью функции CellularAutomaton вы можете разыграть захватывающие сценки из этой Вселенной!

А если клетки в придуманной вами Вселенной будут достаточно малыми, а процесс эволюции — достаточно длительный (например, 80 шагов), вы можете увидеть самоподобные конфигурации, и тогда вспомните о фракталах, множествах Мандельброта и Жулиа! Для обстоятельного разговора о них, конечно, нужна отдельная книга, и, возможно, не одна. Ну а мы, кратко обсудив в главе 1 применение системы Mathematica к изучению фракталов, теперь завершили своеобразный цикл 5" (очень редкий — с нечетным показателем!), ведь эта глава — одиннадцатая. И последняя — в этой книге. И если ваше знакомство с системой Mathematica продолжится, я считаю, вы прочли эту книгу недаром. Ну а сейчас пришло время сказать, как это знакомство продолжить. Иными словами, сейчас я собираюсь вкратце перечислить хотя бы некоторые ресурсы по системе Mathematica и по ходу дела указать на то, что осталось "за кадром".

к постоянному, отличному от нуля,



Пример 7


Видим, что при этом значении г последовательность {хn} ведет себя по-другому: хn стремится к постоянному, отличному от нуля, значению хn при n—>?. В применении к исходной биологической задаче это означает, что численность такого вида по прошествии нескольких лет стабилизируется и перестанет меняться со временем.

Значение х* может быть найдено из уравнения х* = f(x*).

Все точки, удовлетворяющие этому уравнению, являются неподвижными точками функции f, так как если х, = х', то и х2 = х', хn = х' при любом n.

При r<1 квадратное уравнение х=rх(1- х) имеет один неотрицательный корень х=*0. При t->1 неотрицательных корня два: х* = 0 nх* = (t-1)/r. При r= 1 происходит бифуркация: неподвижная точка х' = 0 теряет устойчивость, а вновь появившаяся точка становится устойчивой.

Можно довольно просто определить, будет ли устойчивой неподвижная точка х отображения f[x]. Пусть х„ = х + ?хn, где ?хn — малое число. Если точка устойчива, то с ростом n величина |?хn| должна уменьшаться. Перепишем формулу хn+1 = f(xn, r) в виде

в последнем равенстве опустить член



Пример 8


Если в последнем равенстве опустить член о(?хn), то полученное приближенное равенство будет выполняться тем точнее, чем меньше ?хn (мы пренебрегли членами, пропорциональными (?хn)2, (?хn)3 и т.д.). Поскольку x* = f(x), то 

И для того чтобы



Пример 9



И для того чтобы ?хn+1->0 при n->?, должно выполняться неравенство

и есть условие устойчивости точки



Пример 10



Это и есть условие устойчивости точки х*.

Будем дальше увеличивать параметр r. Поведение системы снова изменится: в последовательности {хn}, начиная с достаточно больших и, будут чередоваться числа, близкие к некоторым двум числам я, и а2. (Точнее говоря, последовательность устроена так, что x2n+1->a1, х2n+1->n2 при n->?) Эти числа связаны соотношениями а1 = f(а2), а2 = f(а1). Иными словами, в этом случае отображение хn+1 = rхn(1—хn) имеет устойчивый цикл с периодом 2. Обозначим этот цикл 52. Наличие цикла S* в нашей модели означает, что численность популяции будет меняться с периодом в 2 года.

Выясним, как выглядят циклы на графике. Для этого определим программу cobwebPlot.

Сначала протестируем эту программу.



Пример 11


Сначала протестируем эту программу.

Теперь нарисуем картинку для случая



Пример 12


Теперь нарисуем картинку для случая г = 1.

Теперь нарисуем картинку для случая



Пример 13


Теперь нарисуем картинку для случая г = 2.

как выглядит двойной цикл



Пример 14


Наконец, выясним, как выглядит двойной цикл (цикл с периодом 2).

Переход от неподвижной точки, которую



Пример 15


Переход от неподвижной точки, которую можно считать циклом S1, к циклу 52 произошел в результате бифуркации, которая получила название бифуркации удвоения периода. Точка х при этом не исчезла и осталась неподвижной, однако величина

опять изменяется. Возникает цикл S4:



Пример 16

cтала больше 1.

При дальнейшем увеличении г поведение последовательности {хn} опять изменяется. Возникает цикл S4: х4n->а1, x4n+1->a2, х4n+1->a3> x4n+3->а4 ПРИ n->?, причем а2 = f(a1), а3=f(a2), аn =f(an). Численность популяции начинает колебаться с периодом в 4 года.

и это еще не все.



Пример 17


Но и это еще не все. Приведем еще несколько примеров поведения наших последовательностей.

Последовательно увеличивая значение параметра, мы



Пример 18


Последовательно увеличивая значение параметра, мы увидим циклы S8, S16, S32 и т.д. При этом каждый раз цикл S2 теряет устойчивость, и устойчивым становится цикл S2 . Наконец, при некотором значении г (его иногда обозначают г„) формула xn+1 = rхn(1-хn) дает уже непериодическую последовательность {xn}.

Полученная нами картина оказалась очень интересной. Во-первых, в поразительно простой модели хn+1 = rхn(1-хn) заложено очень сложное поведение. Во-вторых, в ней удается проследить большое количество бифуркаций, приводящих к усложнению решения. Сделать это в более сложных моделях гораздо труднее. Как это ни удивительно, но пока встречались только циклы, период которых равен степени 2.

Чтобы понять, чем это вызвано, и изучить поведение модели более подробно, наряду с функцией f(x) удобно рассмотреть отображение f(f(х)), обозначаемое далее через f2(х), и вообще положить fn+l(x) =f(fn(x)), считая, конечно, что f(n) =f(х).

Построим график f(x).

Вот нужные нам определения.

f[х_,r_]:=г*х*(1-х); ff[x_,r_,n_]:=Module[{t=x},Do[{t=f[x,r],x=t},{n}];t]

Сначала рассмотрим случай устойчивой неподвижной точки. Вот что получим для случая г = 3.

Теперь рассмотрим случай устойчивого цикла



Пример 19


Теперь рассмотрим случай устойчивого цикла S2.

х во всех неподвижных точках



Пример 20


График функции f(x) пересекается с прямой у = х во всех неподвижных точках отображения / (ведь для любой неподвижной точки х отображения f имеем f2(х*) = f(f(x')) = f(x') = (х'), а также в точках, принадлежащих циклам 52 (потому что а2 = f(a1) = f(f(a2)) и а1 = f(a2) = f(f(f()))- Увеличивая параметр r, мы растягиваем функцию f(x) вдоль оси у. И если при некотором значении г линии у = х и у = fix) пересекаются в одной точке, то с увеличением г могут появиться еще две точки пересечения. Они-то и будут определять цикл S2.

Таким образом, переход от 51 к 52 в отображении f(x) обусловлен тем, что в отображении f (х) одна из неподвижных точек теряет устойчивость и в ее окрестности появляются две новые устойчивые неподвижные точки. Здесь вновь происходит бифуркация. Рассматривая функции f4(х), fn(x) и так далее, можно посмотреть, как происходят следующие удвоения.

Пример 21



Пример 21



можно понять не только качественные,



Пример 22



На примере модели хn+1 = rхn(1- хn) можно понять не только качественные, но и удивительные количественные закономерности. Чтобы проследить за ними, построим график х(r): по оси х будем откладывать х1, х2, ..., лежащие на устойчивом цикле, по оси г — значения параметра. Циклу S* будут соответствовать две точки на одной вертикали, циклу S1 — четыре и т.д. Тогда получим ранее приведенный график, отражающий усложнение устойчивых циклов в отображении хn+1 = rхn(1-хn), происходящее в результате бифуркаций удвоения периода.

Обозначим через R1, R2, R}, ... те значения параметра г, в которых происходили удвоения, а через r1, r2, г3, ... — значения параметра, при которых х= 1/2 является элементом цикла S2, S4, Ss и т. д. Введем также величины d1, d2, ..., dn, .., равные расстоянию между х = 1/2 и ближайшим к нему элементом цикла S2 при r = rn. Расчеты показали, что числа f(x) и rn при больших и ведут себя как геометрическая прогрессия со знаменателем a = 4,6692016... Другими словами, 

также имеет предел, равный



Пример 23

  и отношение

dn/dn+ 1 также имеет предел, равный некоторому числу а, причем а = 2,5029078...

Что будет, если вместо функции хn+1 = rхn(1—хn) взять любую другую симметричную функцию, которая имеет на отрезке [О, 1] один максимум и около вершины близка к квадратичной параболе. Пусть в ней также происходит бесконечная последовательность бифуркаций удвоения при изменении некоторого параметра. Оказалось, что в любой такой модели числа а и 5S будут одними и теми же! Более того, независимо от вида функции предел lim(-a)nf2n[(x-0,5)/(-a)n,rn] существует и будет одной и той же универсальной функцией, обозначаемой часто через g0(х).

Эти удивительные закономерности были обнаружены и поняты американским математиком М. Фейгенбаумом в 1978 году. В силу универсальности чисел а и 5 и функции g0(x), a также других функций такого типа эту теорию называют теорией универсальности.

Что же означают эти результаты?

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

Другие процессы — случайные, хаотические. К ним относится турбулентное движение жидкости, шумы в различных электронных системах и т.д. Они требуют другого, статистического описания, которое позволяет получить некоторые усредненные характеристики процессов. Такие явления также очень важны, но используются гораздо реже из-за их сложности и недостаточной изученности. В одних случаях турбулентное движение жидкости позволяет транспортировать уголь, руду и многое другое по трубам. В других — с турбулентными вихрями приходится бороться. Хорошо зная законы турбулентного движения, можно было бы строить более быстрые и экономичные суда и самолеты.

Теория Фейгенбаума приводит к парадоксальному выводу: между хаосом и порядком есть глубокая внутренняя связь. Непериодический, случайный процесс возникает как предел все более сложных структур (циклов S2n). Хаос возникает как сверхсложная организация (цикл S2 )! Этот вывод является очень общим: он может относиться к моделям экологии, гидродинамике — к любым системам, где есть последовательность бифуркаций удвоения периода.

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

Еще более сложная .картина может наблюдаться в многомерном (например, в двухмерном) случае. Если модель к тому еще и дискретная, то можно говорить о клеточных автоматах.

Система Mathematica может помочь решать



Резюме

Система Mathematica может помочь решать задачи школьникам, студентам, аспирантам, инженерам и научным сотрудникам самых разных профилей. Система Mathematica — это не только интеллектуальный калькулятор, используемый в интерактивном режиме, но и система программирования, сервер и помощник с энциклопедическими познаниями в области математики. Как показал ее сам автор — Стив Вольфрам, — она может даже помочь открыть новый вид науки!

Теория универсальности или насколько сложным может быть поведение простой динамической системы



Теория универсальности, или насколько сложным может быть поведение простой динамической системы



Возможно, заголовок кажется вам заумным. Может быть, это просто оттого, что вы никогда не слышали о динамических системах. Не беспокойтесь, все очень просто: в данном случае под динамической системой понимается любая система, в которой некоторый параметр определяется рекуррентным уравнением хn+1 =f(xn, r). В частности, под динамической системой можно понимать числовую последовательность, определяемую таким уравнением. Где встречаются такие последовательности? Да почти повсюду. Вот простейший пример.

Допустим, нас интересует изменение численности какого-либо вида животных в определенном районе. Один раз в год мы считаем их и получаем число х. По этим данным можно построить последовательность x1, х2 ..., хn, ... (n = 1 соответствует первому измерению). Логично предположить, что среди этих чисел есть какая-то закономерность. Естественно ожидать, что численность популяции в (n+1)-й год хn+1 зависит от того, сколько животных было год назад, т. е. от величины хn. Поэтому в простейшем случае хn+1 = f(xn, r).

Здесь f— непрерывная функция; r— некий параметр, который зависит от биологических особенностей рассматриваемого вида. В популяционной генетике часто предполагается, что хn+1 = rxn(N-xn).

Эта формула показывает, что численность вида быстро растет, пока она мала (xn<N), и начинает убывать, когда животных становится слишком много. Если сдeлать замену переменных хn = x'nN, r = r'/N, то в новых переменных наше уравнение будет иметь вид х'n+1 = г' х'n(1—х'n). Тем самым мы элиминировали параметр N и привели уравнение к более естественной для математиков форме. Теперь по самому смыслу задачи 0<х'n<1. Простоты ради опустим штрихи и займемся исследованием этой более простой динамической последовательности.

Что же будет происходить с различными видами (т.е. с последовательностями хn+1 = rхn(1— хn) с различными r) по прошествии достаточно долгого времени? Чтобы ответить на этот вопрос для нашей простейшей модели, достаточно выяснить, как будет вести себя последовательность {хn} при различных значениях г. Давайте проведем численный эксперимент. Сначала дадим нужные нам определения.

х[r_][0]=0.5; x[r_][n_]:=x[r1[n]=r х[r][n-1]<1-х[r][n-1])

Таким образом, мы задали начальный член последовательности х0 = 0,5. Теперь положим, r = 3,83, и вычислим первые пятьдесят членов последовательности.