M A T L A B В МАТЕМАТИЧЕСКИХ ИССЛЕДОВАНИЯХ
M A T H E M A T I C A L E X P L O R A T I O N S W I T H
M A T L A B
Ke Chen, Peter Giblin, Alan Irving
I CAMBRIDGE 1
UNIVERSITY PRESS
Перевод с английского В. Е. Кондрашова и С. Б. Королева
Москва «Мир» 2001
УДК 519.68 ББК 32.973 443
443
ЧенК., ДжиблинП., Ирвинг А. MATLAB в математических исследованиях: Пер. с англ.— М.: Мир, 2001.-346с. ил. ISBN 5-03-002821-8 Это один из последних зарубежных учебников по использованию MATLAB'а в математической работе, которых там издано уже несколько десятков ввиду широкой популярности данного программно-математического пакета. MATLAB хорошо известен и в России благодаря своей исключительно высокой эффективности при программировании и визуализации результатов. Имеющиеся на русском языке книги на эту тему посаяшены в основном описанию обширной системы команд пакета, и по ним даже опытным специалистам не так просто овладеть этой современной технологией проведения расчетов. Поэтому предлагаемая книга будет интересна и полезна всем, кто изучает или применяет MATLAB. Для студентов, аспирантов и преподавателей вузов, а также для практиков-вычислителей.
ВБК 32.973
Редакция литературы по математическим паукам
ISBN 5-03-002821-8 (русск.) ISBN 0-521-63920-4 (англ.)
© Cambridge University Press 1999 © перевод на русский язык, оформление, «Мир», 2001
От переводчиков
Книга эта — хорошо отработанный на практике учебный курс. Прозрачные по постановке и интересные по смыслу прикладные задачи позволят читателю получить неформальное представление как о возможных приложениях математики к задачам реальной жизни, так и об исключительной эффективности программирования и методов визуализации, реализованных в МАТЪАВ'е. Авторы не увлекаются использованием сложных команд пакета и в своих предположениях о подготовке читателя не выходят за рамки того, что так или иначе излагается по математике первокурсникам физикоматематических и технических факультетов вузов. Поэтому книга как нельзя лучше подходит для первоначального знакомства с теперь уже трудно обозримыми приложениями математики к другим отраслям знания и способами их реализации. MATLAB —очень общая система многоцелевого назначения, которая вышла на рынок программных продуктов почти 20 лет назад и с тех пор непрерывно совершенствовалась и расширялась, так что изучать и применять ее можно по-разному. Но первоначально ее основу составляли алгоритмы решения систем линейных уравнений и задач на собственные значения, разработанные в 1970-х гг., откуда и произошло ее название «матричная лаборатория». Уже освоение только этих задач открывает перед пользователем очень большие возможности. Теперь она представляется наиболее эффективной при проведении прикидочных расчетов и при разработке (в поисках и апробации) новых алгоритмов. Сейчас уже существует несколько десятков специальных приложений к MATLAB'у, посвященных более узким проблемам. Это вычисления на языке формул, обработка сигналов и изображений, инженерное программирование в виде блок-схем, нечеткая логика, решение экономических задач и многое другое. Но любое из этих приложений можно изучать только после первоначального освое-
6
От переводчиков
ния MATLAB'a —хотя бы в объеме этой книги. Англоязычный интерфейс системы не является существенным препятствием для использования MATLAB'a. Большая часть приложений и многие команды MATLAB'a написаны на его простом, удобочитаемом программном языке и поэтому полностью открыты для пользователя и могут быть модернизированы им в своих целях. Только код сравнительно немногих базовых команд, реализованных на языке С, недоступен ему, так что MATLAB можно рассматривать как почти открытый программный продукт. Интерфейс MATLAB'a с С и Фортраном как по программам, так и по данным позволяет, с одной стороны, использовать многие из написанных на этих языках процедур, а с другой — применять MATLAB при программировании на них. Большинство приложений после их установки означает для пользователя просто расширение списка доступных ему команд. Излагаемый в книге материал рассчитан на использование версий MATLAB'a не ниже четвертой, хотя авторы и не оговаривают этого явно. В пятой и последней, шестой (конец 2000 г.), версиях появились возможности и для объектного программирования — наиболее общего принципа построения больших прикладных программ. В настоящее время помимо MATLAB'a широкое распространение получил ряд других программно-математических систем высокого уровня - MAPLE, MATHEMATICA, MATH CAD, и они теперь оказывают заметное влияние друг на друга. Например, система символьных вычислений MAPLE практически полностью (за исключением ее привычных по начертанию символьных выдач) уже давно включена в MATLAB. Но MATLAB, по-видимому, надолго останется первым среди них по возможностям получить численные результаты, поскольку он и многочисленные приложения к нему создавались прежде всего для этих целей. Программируя на Фортране или С, мы как бы складываем программу из отдельных «кирпичиков* — элементарных команд, и формально для этого нужно лишь точно знать описание их работы, что и дается разработчиками такого языка в обязательной фирменной документации к нему. Здесь успех в реализации сложного алгоритма основан прежде всего на личном опыте специалиста
От переводчиков
7
и, в частности, на его умении пользоваться соответствующими библиотеками стандартных программ. Если такие программы мало помогают в решении конкретной задачи, то работа над ней окажется длительной и трудной. А студенты тратят немало усилий на изучение азов таких языков, т.е. их формальных описаний, и на выполнение многочисленных, но не очень содержательных упражнений. Другое дело — программно-математические системы высокого уровня. В них гораздо больше команд, в которых, как правило, реализованы достаточно сложные алгоритмы. Поэтому здесь сразу предоставляются возможности выполнять более содержательные примеры без специального изучения основ программирования. Но границы применимости таких алгоритмов часто оказываются недостаточно четкими. Эти обстоятельства приводят к тому, что помимо документации с описанием команд (она, конечно, остается обязательной, но мало подходящей для освоения системы из-за большого теперь объема) возникает потребность в учебниках, и обычно трудно, да и не нужно отражать все возможные аспекты использования такой системы в одном учебнике. Эти учебники, как и большинство приложений, обычно создаются уже пользователями, а не разработчиками самой системы. За рубежом вышли десятки учебников по MATLAB'y и приложениям к нему. Список последних изданий можно найти в интернете на сайте фирмы Math Works Inc. Там же можно познакомиться с рекламными материалами на все ее программные продукты. Русскоязычные издания по MATLAB'y, перечень которых приведен в конце книги, в основном следуют фирменной документации и содержат описание команд, а потому не очень подходят для первоначального ознакомления с системой, хотя они, несомненно, полезны тем, кто уже работает на MATLAB'e. Поэтому мы надеемся, что данная книга найдет своих читателей среди студентов, преподавателей и тех специалистов-практиков, кто захочет использовать в своей повседневной работе эту одну из самых эффективных программноматематических систем — MATLAB. По мере его распространения у нас обязательно появятся в ближайшие годы свои учебники по MATLAB'y и его приложениям.
8
От переводчиков
Мы весьма признательны авторам книги за предоставленные нам рабочие материалы английского издания в Т^Х'е и за список замеченных ими опечаток. Наши собственные поправки немногочисленны и оформлены в виде подстраничных примечаний. Поскольку мы сами уже несколько лет используем MATLAB в своей работе, нам будут интересны замечания и предложения читателей, которые можно направлять электронной почтой в наш адрес
[email protected] и за которые мы заранее им благодарны. В. Е. Кондратов, С. Б. Королев
Предисловие
Математика прошла долгий путь с той поры, когда приходилось рисовать многоугольники палочкой на песке. Теперь во многих, хотя и не во всех разделах математики среди ведущих специалистов наблюдается все возрастающее понимание того, что современные компьютерные технологии могут открыть широкие возможности как перед студентами, так и перед преподавателями. Эта книга возникла главным образом из успешной попытки дополнить традиционные математические курсы еще одним, который бы всерьез использовал эти благоприятные возможности. Считается, что студенты первого курса университета в Великобритании приобретают широкий спектр математических навыков — логически аргументировать, воспринимать ноьые концепции, вычислять без ошибок, переводить повседневные проблемы на соответствующий математический язык, строить математические модели и оценивать полученные приближения. Чтобы способствовать развитию некоторых из этих навыков, мы решили воспользоваться известным и мощным вычислительным пакетом MATLAB®. Он предоставляет удобные средства помочь студентам попять некоторые вещи графически, увидеть в сложных задачах лес прежде отдельных деревьев и дать подход к более реалистичному моделированию. Мы выбрали MATLAB, а не какой-то иной, более сложный и базирующийся на алгебре пакет по причине постепенного развития процесса обучения. MATLAB позволяет студенту естественно перейти в своем образовании от работы с ручным калькулятором к возможностям программирования высокого уровня через использование мощных вычислительных и графических модулей. Последнее означает, что при этом студенты могут заниматься программированием без предварительного изучения его основ. И наконец, студенты, не имевшие навыков работы с клавиатурой, получат представление о важном современном техническом средстве — компьютере. Наш курс и эта книга были разработаны для студентов, осваивающих математику в тех рамках, которые сложились для первого года обучения в университетах Великобритании. В нашем случае студент уже завершил первый семестр по основным предметам и, таким образом, имеет базовые знания по анализу, комплексным
10
Предисловие
числам, векторам и матрицам. В этой книге мы предполагаем, что читатель достаточно владеет анализом, но лишь немного знаком с другими разделами. Типичный студент будет постоянно расширять эту базу, решая некоторые избранные задачи из таких разделов, как элементарная статистика, механика, линейная алгебра, теория чисел, дифференциальные уравнения, ряды Фурье и т.п., так что знакомство с новым материалом будет сочетаться с закреплением у лее известного. Подобно Галлии, книга делится на три части. Первая часть начинается с очень элементарного практического введения в особенности MATLAB'a, за которым следует ряд методических глав по работе с MATLAB'OM. В них читатель встретится с теми математическими понятиями и на деле познакомится с теми методами MATLAB'a, которые особенно пригодятся в последующих тематических главах. Так, по ходу дела вводятся все стандартные программные структуры и команды MATLAB'a: матрицы, целые числа и элементы теории чисел, графическое представление кривых на плоскости, подгонка данных и приближение функций по методу наименьших квадратов, моделирование случайных распределений, обыкновенные дифференциальные уравнения. Таким образом, студент, изучая возможные применения MATLAB'a, заодно ознакомится с математикой, которая интересна сама по себе. Во второй части содержится несколько учебных работ, называемых «исследованиями», которые основаны на ранее введенных понятиях, Матрицы используются при рассмотрении магических квадратов, перестановок и решений линейных систем; операции с целыми числами применяются при нахождении наибольших общих делителей множеств случайных чисел, при проверке чисел на простоту и в оценке способов тасования игральных карт; методы приближений используются при решении нелинейных уравнений и интерполяции и т.д. В каждом случае исследовательское отношение к учебному материалу поддерживается большим количеством упражнений как вычислительного, так и чисто математического характера. Наконец, в третьей части содержится несколько примеров «построения моделей», где читателю дается возможность применить навыки, полученные в первой части. Математическое моделирование не излагается здесь в законченном виде и требует некоторой степени математической зрелости, которой студенты-первокурсники могут и не обладать. Тем не менее мы полагаем, что имеющиеся возможности MATLAB'a и важность самого моделирования как математического искусства не позволяют нам упустить открываю-
Предисловие
11
щуюся возможность. На практике мы нашли, что студенты хорошо справляются с этими задачами. В Ливерпуле мы требовали от студентов тщательной проработки за шесть недель вводного материала (часть первая), а после этого предлагали им выбрать для изучения любые три работы из второй и третьей частей (но не менее одной из каждой). Двух недель оказывалось достаточно для выполнения каждой из работ, так что весь курс занимал двенадцать недель. Мы, конечно, постарались важные вопросы распределить равномерно по всей книге. Но проницательный читатель обнаружит три различных стиля в изложении исследовательских работ второй и третьей частей, ввиду многообразия подходов, которое мы считаем вполне здоровым явлением. Книга дополнена приложениями, в которых приводятся краткий список команд MATLAB'a, информация о символьных вычислениях (не использующаяся явно в тексте книги) и о представлении MATLAB'a в Интернете, и, наконец, перечисляются по главам Мфайлы, написанные авторами. Как пользоваться книгой Книга будет полезна в следующих ситуациях. Во-первых, она может быть использована сама по себе в качестве достаточно полного курса. Во-вторых, она будет полезной при планировании сходных занятий — тогда многочисленные примеры из исследовательских работ будут удобным материалом для составителей. В-третьих, книга пригодится для самообучения тем, кто не хочет изучать систему формально, по документации к ней. В любом случае читателю предстоит проработать всю книгу, сидя за компьютером, за исключением упражнений чисто математического содержания. Предварительный беглый просмотр этого предисловия и гл.1 поможет новичку сориентироваться в материале. Читатель, уже знакомый с МАТХАВ'ом, может сразу перейти к гл.2. В случае сомнений можно быстро освежить свои знания, выполнив упражнения в конце гл.1. М-файлы, упоминаемые в тексте, можно свободно скопировать. Детали получения копий приведены в одном из приложений. Некоторые решения и подсказки преподаватели могут получить в электронной форме по разрешению издателя. MATLAB может быть установлен на многих платформах. Для определенности предполагается, что читателю доступен MATLAB
12
Предисловие
в среде Microsoft Windows. Если это не так, читатель может почувствовать некоторые неудобства на ранних стадиях при работе с файлами и при редактировании командных строк в соответствии с имеющейся платформой, но все М-файлы должны работать исправно, а материал самой книги от платформы не зависит. Распространители книги дадут краткий обзор тех ключевых мест, в которых местный читатель может сбиться с пути праведного. Благодарности Мы очень благодарны коллегам из Ливерпуля, которые помогали нам в подготовке этого курса и обеспечили доступ к материалу. Это Найджел Бэкхаус, Эрик Эдмонд, Тоби Холл, Нилл Керк, Дик Вейт, Невилл Уотерс. Мы особенно благодарны студентам, слушавшим курс в течение нескольких лет: их усилия помогли обнаружить неоднозначности в исследовательских работах и сделать материал более дружественным и, надеемся, более точным, чем он был вначале. Все оставшиеся ошибки, конечно, на нашей совести. П. Джиблин также благодарит Университет Брауна в Провиденсе за его щедрое гостеприимство во время написания части этой книги, а также комиссию Фулбрайта за оплату этой командировки. Ливерпуль, октябрь 1998
Ке Чеп, Питер Джиблип, Алан Ирвинг
MATLAB® —зарегистрированная торговая марка The Math Works, Inc.
Часть I
Основы 1.
Введение 15 1.1. Первые шаги в MATLAB'e 15 1.2. Векторы и графики 18 1.3. Создание и редактирование скрипт-файлов 1.4. Получение распечаток 28 Упражнения 28
2. Матрицы и комплексные числа 30 2.1. Векторы и матрицы 30 2.2. Комплексные числа 35 2.3. Динамика населения: матрица Лесли Упражнения 40
21
37
3.
Целые числа 44 3.1. Цикл вычисления чисел Фибоначчи 44 3.2. Условный цикл: Зп + 1 или задача о граде 46 3.3. Евклидов алгоритм нахождения наибольшего общего делителя 47 3.4. Теорема Ферма и степенной алгоритм 49 Упражнения 52 3.5. Приложение 55
4.
Графики и кривые 57 4.1. Полиномы 57 4.2. Простые примеры вычерчивания кривых 4.3. Полиномы Тейлора 61 4.4. Приближения с помощью функции polyfit 4.5. Задача о козе 64 4.6. Огибающие семейства линий 65 Упражнения 68 4.7. Приложение 72
58 62
14 Представление данных 74 5.1. Анализ данных 74 5.2. Приближение по методу наименьших квадратов Упражнения 85 5.3. Приложение 87 Вероятность и случайные числа 90 6.1. Генерирование случайных чисел 90 6.2. Случайные целые числа 92 6.3. Моделирование равномерных распределений 94 6.4. Моделирование нормальных распределений 94 6.5. Моделирование экспоненциальных распределений Упражнения 98 6-6. Приложение 100 Дифференциальные и разностные уравнения 105 7.1. Обыкновенные дифференциальные уравнения (ОДУ) 105 7.2. Системы дифференциальных уравнений 108 7.3. Разностные уравнения 111 Упражнения 113
78
95
1 Введение
1.1. Первые шаги в MATLAB'e Если вы еще не работали с МАТЪАВ'ом, то, чтобы запустить его, надо сделать двойной щелчок вашей мышью на нужной пиктограмме (иконке) или спросить об этом у своего приятеля. Спросить у приятеля — часто самый быстрый путь получить помощь, и на будущее мы советуем пользоваться этим, если в чем-то не удалось разобраться самостоятельно. Если слова «щелчок» и «иконка* ничего вам не говорят, вам нужна дополнительная помощь по началам Windows. К тому же может случиться, что ваша система не использует Microsoft Windows и вам будет достаточно просто набрать в командной строке matlab и нажать клавишу <Enter>. Так будет, например, если вы используете какую-либо систему типа UnixlK Если запуск прошел нормально, вы увидите приглашение MATLAB'а
для начала вычислений. В дальнейшем любая строка, начинающаяся с >>, обозначает клавиатурный ввод для MATLAB'a: имеется в виду, что вы наберете необходимое, но без знака >>, который система выводит автоматически.
1.1.1. Арифметика в MATLAB'e В MATLAB'e есть основные арифметические операции: + (сложение), - (вычитание), * (умножение) и / (деление). Степень обозначается через "" , так что набрав »
5*5+12"2
и нажав <Enter>, получим
169 ^ В дальнейшем мы будем делать в нужных местах специальные примечания о редактировании и работе с файлами в среде, отличной от Windows.
16
Глава 1. Введение
Не забывайте нажимать <Enter> после набора строки, чтобы послать ее для выполнения. Законы старшинства операций встроены, но в сомнительных случаях пользуйтесь круглыми скобками. Например, для строки
ans
Элементарные функции, известные вам по работе с ручными калькуляторами, здесь также реализованы. Выполните строки »
sqrt(5~2+12~2)
»
expClogCl.7))
А чтО; думаете, даст sin(pi/2)? Попробуйте. На самом деле MATLAB имеет для числа тг встроенное значение тг = 3-1415926... Просто наберите pi, когда оно вам потребуется. Попробуйте следующее: >> pi >> format long >> pi >> format short MATLAB выведет значительно больше значащих цифр, чем выдается по умолчанию в режиме format short. 1.1.2. Использование переменных Вы можете приписать числовое значение «переменной» для использования в последующих вычислениях. Выполните >> х=3 и получите х=
1.1. Первые шаги в MATLAB'e
17
Но можно получить и что-нибудь более полезное, например, >> rad=2; ht=3; » vol=pi*ht*rad~2 vol = 37.6991 Обратите внимание, что первая строка содержит две «команды» и ни одна из них не выдает результата! Когда MATLAB встречает инструкцию с символом ; (точка с запятой) в конце, он запрещает вывод результата. Инструкция в действительности выполняется, но ее результат умалчивается, что вы можете проверить, выполнив >> rad=4; » г ad rad =
Использование символа ; позволяет избежать хаотического заполнения экрана промежуточными результатами. Помните об этом, разбирая последующие примеры. Не забывайте, что каждая переменная должна как-то получить значение прежде, чем вы сможете использовать ее в дальнейших вычислениях. Так, после выполнения предыдущих примеров и строки » i = х~2 + 2*х*у + у~2 будет выдано примерно такое сообщение ??? Undefined function or variable у Это не требует пояснений. После засылки у=4; повторное вычисление f пройдет успешно. Кстати отметим, что быстрый способ повторить предыдущую строку MATLAB'a —это нажимать клавишу «стрелка-вверх» (t) до тех пор, пока не выберется желаемая команда. Попробуйте это сейчас. Если исходная строка была не совсем правильной или же вы хотите получить новую строку из сложной, но схожей с ней и выполненной ранее, вы можете воспользоваться этим же приемом. Выбрав требуемую строку, используйте «стрелки-в-сторону» («— и —>•) 2-4196
18
Глава 1. Введение
совместно с клавишей Delete, чтобы отредактировать ее нужным образом. В качестве упражнения попробуйте, используя предыдущие строки, вычислить объем правильного круглого цилиндра с радиусом 2 и высотой 1/4. Вы получили тг? При затруднениях с запоминанием уже заданных вами имен переменных попробуйте выполнить who или whos. Попробуйте обе команды. Вы узнаёте перечисленные переменные?
1.2. Векторы и графики Одно из удовольствий, которое вы будете испытывать при изучении MATLAB'a, состоит в простоте построения графиков. Основные принципы таковы: (i) выберите последовательность ж-значений, т.е. вектор значений аргумента; (ii) вычислите у = /(х), т.е. получите соответствующий вектор узначений; (iii) нарисуйте график у от х. Прежде чем проделать это, стоит потратить немного времени, чтобы узнать кое-что о том, как MATLAB работает с векторами. 1.2.1. Векторы Выполните следующие примеры, в которых все результаты будут векторами. Не спешите, обдумывая каждый результат. » и=[2,2,3] » и=[2 2 3] » v=[l,0,-l] >> w=u-2*v » range=l:13 » odd=l:2:13 » down=20:-0.5:0 » even=odd+l » xgrid=0:.05:1; x=xgrid*pi » y=sin(x) Первые две строки показывают, что элементы вектора могут разделяться пробелами или запятыми. Если вы боитесь вставить пробел случайно, то можете придерживаться записи с запятыми. Таким
1.2. Векторы и графики
19
образом, [1+1 2 3] означает то же, что и [ 2 , 2 , 3 ] , а [1 + 1 2 3] — то же, что и [ 1 , 1 , 2 , 3 ] ! Заметьте, что векторы могут быть любой длины. Они могут быть строками, как выше, или векторами, подобными >> w' ans = О 2 5
где апостроф обозначает транспонирование (Т). В MATLAB'e векторы трактуются просто как специальный случай матриц, о которых вы узнаете значительно больше в следующей главе. Обратите внимание, что произошло, когда представляемый вектор оказался слишком длинным и не уместился в одной строке. Тогда система сначала отображает столько элементов, сколько их умещается в строке, а остальные переносит на следующие строки. Элементы вектора-строки трактуются как «столбцы». Элементарная функция вектора х, такая, как sin(x), также является вектором того же типа. Мы можем использовать этот факт при создании графиков функций, как показано в следующем разделе. MATLAB знает как перемножать матрицы соответствующих размеров. Это будет обсуждаться подробнее в следующей главе. А сейчас попробуйте выполнить строки wJ*w >> u*u Вы понимаете смысл полученных результатов? Почему последняя строка не работает? Пусть теперь вы хотите получить множество значений z, данное 2 выражением z ~ у , где вектору у уже были присвоены некоторые значения. Из предыдущего опыта вы понимаете, что »
z=y*y
не приемлемо для MATLAB'a. Присвоение >> z=y*y J
20
Глава 1. Введение
выполняется системой, но вычисляется как скалярное произведение у -у! Чтобы заставить MATLAB перемножить векторы поэлементно, выполните »
z=y.*y
где точка перед символом * есть ключевой признак поэлементной операции. Подобным же образом u./v и у.""2 понимаются как поэлементные операции над векторами одинаковых размеров. 1.2.2. Кое-что о графиках Теперь выполните whos, чтобы удостовериться, что х и у определены, как выше. Они оба должны быть 1 х 21-матрицами (т.е. векторами-строками). Построить график легко. Просто выполните >> plot(x.y) и чуть подождите. Как по волшебству, появится замечательная незамысловатая кривая у — sin а; от аргумента %. Оси выбираются автоматически в соответствии с областями изменения переменных. Это простейший возможный случай. Потом вы захотите делать более сложные вещи. А сейчас попробуйте следующее: » t i t l e ( ' G r a p h of y=sin(x)') » xlabel('x') » ylabel('y') » yl=2*x; >> hold on » plotCx.yl,'r') Вероятно, вы сможете разгадать значение каждой из этих команд. Например, yl=2*x определяет значения новой функции у ~ 2х, hold on дает MATLAB'у указание сохранить выведенный график, a plot (x,yl, ' г ' ) рисует новую кривую поверх прежней. Заметьте, что оси были скорректированы1^ и вторая кривая нарисована красным цветом. В этих примерах соседние точки соединялись прямолинейными отрезками. Если захотите, вы можете задать вид точек, которыми ^ Предполагается, что вы используете MATLAB 4-й версии. Имеется несколько небольших различий между этой и более ранними версиями, особенно в отношении графических команд.
1.3. Создание и редактирование скрипт-файлов
21
рисуется кривая, выбрав символы, как показано далее. Выполним строки >> >> » >>
hold off plot(x,y,'+') plot(x,y,'g*') J plot(x,y, w.')
MATLAB сделал то, что вы ожидали? Вы воспользовались клавишей | , чтобы повторно выполнить предыдущие команды? Можно получить подсказку об использовании любой команды МАТЪАВ'а. Выполните, например. >> help plot >> help hold >> help sin и т.д.
1.3. Создание и редактирование скрипт-файлов Начав работать, вы вскоре найдете утомительным снова и снова вводить те же самые или подобные им последовательности команд. К счастью, есть простой путь обойти это: нужно просто сохранить любую часто повторяемую последовательность команд в виде файла, называемого «скриптом» или «М-файлом». После этого можно вызывать этот список команд так часто, как надо. Например, в каком-то сеансе работы вы захотели найти расстояние между точками А и В, заданными соответственно векторами а = (1,0, —2) и b — (2,3,1). Зная, что вектор смещения между ними равен d = b-a и что \d\2 - d - d , вы можете воспользоваться следующей последовательностью команд МАТЪАВ'а: » а=[1,0,-2]; » Ь=[2,3,1]; >> d=b-a; » dd=d*d'; >> dist=sqrt(dd)
22
Глава 1. Введение
чтобы решить эту частную задачу. Это неплохо, но, предположим, у вас теперь пять точек, и нужно выбрать из них две наиболее близкие друг к другу. Очевидно, что тогда вы захотите сохранить в «скрипте» (файле) как можно больше таких шагов, которые допускали бы затем их полное повторение. 1.3.1. Редактирование и сохранение текстовых файлов Сначала нам необходимо рассмотреть управление файлами и их редактирование. Пользователи, не использующие Windows Если вы не используете Microsoft Windows, то здесь вам нужно будет сделать некоторые изменения в процедурах. Однако как бы ни был MATLAB инсталлирован на вашем компьютере, без сомнения там будет какой-нибудь текстовый редактор. Предполагая, что он носит имя e d i t , вероятно самый легкий способ вызвать его из MATLAB'a —это выполнить >> ' e d i t fname где fnarae —имя текстового файла, который либо уже существует, либо будет существовать ко времени окончания вами работы. Если это не срабатывает, проконсультируйтесь с кем-то, знающим настройку вашей системы, или с более опытным пользователем. Пользователи Windows Windows устанавливается со своим собственным базовым редактором текстовых файлов под именем Блокнот (Notepad), пиктограмму которого молено обычно найти в разделе Стандартные программы (Accessories Group). Типичная установка MATLAB'a в Windows прямо использует эту программу, почему и мы ограничимся ею. Чтобы открыть и отредактировать новый файл с именем myf i l e .га, непосредственно из MATLAB'a, сделайте следующее: (i) В меню MATLAB Command Window щелкните мышью на F i l e , (ii) Щелкните на New, а затем на M-file. (iii) В Блокноте, который вы только что открыли, можно набирать любые строки, например, У, myfile.m '/, Это просто название (идентификатор) самого файла. 7, Эти три строки суть строки комментария, на которые '/, MATLAB не обращает внимания. dispC I am an M-file')
1.3. Создание и редактирование скрипт-файлов
23
(iv) Щелкните на F i l e а затем на Save As. (v) В окошечке F i l e Name, открывшемся в ожидании, наберите myfile.m. (vi) Щелкните на ОК. Вы только что создали файл, который MATLAB может найти и использовать. Вернувшись в MATLAB Command Window, вы теперь можете спросить MATLAB, найдет ли он этот файл. Выполните >> type myfile и увидите строки, которые набрали раньше. Если этого не получилось, вернитесь к шагу (i) и снова вызовите Блокнот щелчком по F i l e в MATLAB Command Window, но дальше выберите Open M-f i l e . Вы увидите окно ввода, соответствующее myf i l e . m. Если не получилось и это, вернитесь прямо к началу этого раздела, но желательно с кем-то, кто проследил бы за правильностью ваших действий. 1.3.2. С крипт-файлы Если все прошло нормально, то теперь вы имеете первый пример скрипт-файла. Чтобы использовать его, просто наберите >> myfile после чего увидите что-то вроде I am an M-file Теперь о чем-то более полезном. Откроем М-файл, чтобы повторить ранее приведенные команды для определения расстояния между двумя точками. Действуя, как и раньше, откройте новый М-файл с именем distab.m, содержащий несколько строк с комментариями 7. distab.m
7, Вычисляет расстояние между двумя векторами а и Ъ 7. ... включая дополнительные строки (те, которые начинаются с %), которые помогут вам вспомнить, как это работает. Далее пойдут рабочие строки d=b-a; dd=d*d'; dist=sqrt(dd)
24
Глава 1. Введение
Не забудьте сохранить файл, щелкнув мышью сначала по File, a затем по Save As, как это делалось при создании mfile.m. Если необходимо, еще раз просмотрите тот пример. Окончив редактирование файла, при желании можно закрыть Блокнот, щелкнув по File и затем по Exit. Можно оставить Блокнот и открытым, но это может привести к путанице, если окажется, что открыто слишком много окон с Блокнотом. При закрытии Блокнот всегда сам напомнит вам о сохранении последних изменений в файле. Теперь задайте компоненты векторов а и Ь, если не сделали этого раньше: » а=[1,0,-2]; » Ъ=[2,3,1] ; Затем найдите расстояние, просто выполнив >> distab Получилось? Если нет, вернитесь в Блокнот и сделайте еще одну попытку. Проделайте это для различных точек А я В, в частности и для таких пар, где правильность определения расстояния просто проверить, например, для Л s (1,2,3) и В = (1,1,3). » а=[1,2,3] ; » Ъ=[1,1,3]; >> distab Чтобы узнать, какие М-файлы вы создали или какие еще есть в MATLAB'e, воспользуйтесь командой what. Если же вы хотите проверить назначение М-файла, можно использовать команду help (точно так же, как для любой команды MATLAB'a): » help myfile » help sqrt » help sin Команда help выводит начальные строки с комментариями в начале М-файла. Вот почему всегда считается хорошим правилом включать строки комментария (начинающиеся с %) в шапку М-файла. Также полезно включать в первую строку комментария имя файла. Заметьте, что myfile —это имя инструкции MATLAB'a (того, что вы набираете для исполнения), тогда как myfile. m— имя файла, содержащего ее определение.
1.3. Создание и редактирование скрипт-файлов 25 1.3.3.
Файлы функций
Было бы утомительным присваивать значения компонентам двух векторов перед каждым обращением к нашему «скрипту». Можно соединить присвоение входных значений с действующими инструкциями вызова М-файла. используя М-файл типа функция. Кроме того, одновременно можно присвоить полученные значения новым переменным, т.е. создать файл-функцию distf n, такую, что, набрав »
dab=distfn([l,2,3],[1,1,3]);
» а=[1,2,3]; Ъ=[1,1,3]); >> dab=distfn(a,b); вы присвоите правильное значение расстояния переменной dab без каких-либо дополнительных хлопот. Вот как нужно сделать изменения в скрипт-файле distab.m. чтобы он стал файлом-функцией distf n.m. Пусть ваш Блокнот уже закрыт, так что начнем редактирование с самого начала: (i) В меню MATLAB Command Window щелкните мышью на File. (ii) Щелкните по Open M-file, чтобы открыть Блокнот, и просмотрите список доступных М-файлов, т.е. оканчивающихся на .т. {если потребуется, смените окончание *.txt в рамке ввода имени файла File Name на * .m). (iii) Выберите distab.m. (iv) Теперь можно внести изменения. Сначала измените строки комментария, чтобы отразить новое имя и назначение файла, а затем измените исполняемые инструкции MATLAB'a так, чтобы ваш файл принял вид: У, distfn.m У. Вычисляет расстояние между двумя точками, заданными '/• векторами а и b У, Вызов: У, dist=distfn(a,b) У. ввод: а,Ь (векторы положения точек) У, вывод: distfn - расстояние между точками function dist=distfn(a,b) d=b-a; dd=d*d'; dist=sqrt(dd);
26
Глава 1. Введение
(v) Щелкните по Save As. (vi) В окошечке File Name, открывшемся в ожидании, наберите distfn.m. (vii) Щелкните по ОК. Вернувшись в MATLAB Command Window, вы теперь можете, набрав help distfn, прочесть, как пользоваться этой функцией. Выполните »
d i s t - d i s t f n ( [ l , 1 , 1 ] , [2,2,2])
или >> dist=distfn(a,b) чтобы присвоить найденное расстояние переменной dist. Если вы вносите не одно исправление, то можете забыть поставить в некоторых местах символы ; . Для исправления любых ошибок просматривайте файл, используя Блокнот. М-файлы-функции (или «М-функции»), т.е. М-файлы с первой исполняемой строкой вида function . . . , обладают одним очень важным свойством. Кроме самого имени (здесь это distfn), все другие переменные (a, b, dd и т.д.)—чисто внутренние для этой функции. Это помогает уменьшить путаницу с другими вычислениями и переменными, используемыми вами. Проверьте это, выполнив >> who >> clear >> who » dist=distfnC[l)l,lj,[2,2,2]) >> who Команда clear удаляет все ранее определенные переменные. После выполнения функции dist=distfn(. .) внутренние переменные не оставляют и следа в вашем МАТЪАВ-сеансе. 1.3-4- Файлы дневника работы и сохранение файлов Иногда вам может понадобиться запомнить те ваши действия, которые отображались на экране дисплея. Позднее вам может потребоваться распечатать их (см. следующий раздел). Сделать это очень легко. Чтобы понять это, выполните >> diary sectl.txt » '/. Начало раздела 1
1.3. Создание и редактирование скрипт-файлов
27
>> '/, сейчас несколько команд >> myfile >> d i s t = d i s t f n ( [ 1 , 1 , 1 ] , [ 2 , 2 , 2 ] ) >> diary s e c t 2 . t x t >> '/, Я хочу сохранить это где-то еще >> х = 0 : . 1 : 1 ; >> у=х.*х >> p l o t ( x , y ) >> diary.off Сеанс будет протекать вполне нормально. Команда diary f name дает MATLAB'y указание записать копию выводимого на экран текста (числа и буквы) в файл с именем fname. Команда diary off прекращает запись. В приведенном сейчас примере часть вывода записывается в один файл, а часть — в другой. Для просмотра полученного вы можете воспользоваться Блокнотом и, если необходимо, отредактировать записи. Вызовите Блокнот, как обычно щелкнув по F i l e , и с помощью fJpen просмотрите список файлов с окончаниями имен на * . t x t . В этом списке вы увидите s e c t l . t x t и sect2.txt. Взглянув на s e c t 2 . t x t , вы, вероятно, будете разочарованы, не найдя там графика у = х 2 . Это потому, что графики и другие графические образы нелегко представить в текстовой форме. В следующем разделе будет показано, как обойти эту трудность. При окончании сеанса с MATLAB'OM все текущие переменные и их значения теряются. Обычно это не создает проблем. Начать сеанс заново можно строкой >> clear освободившись тем самым от всего предыдущего. Если же вы всегаки хотите сохранить то, что получили, наберите, например. >> save monday или >> save monday x,y где вторая команда сохранит только явно указанные переменные в файле monday. Можно вновь загрузить сохраненное на следующий день или когда пожелаете командой >> load monday
28
Глава 1. Введение
Помните, что таким способом сохраняются лишь сами переменные, т.е. их текущие значения. Все формулы, которые вы применяли, будут потеряны, если вы не запомните их в некотором М-файле.
1.4. Получение распечаток 1-4-1- Пользователи Windows Одно из преимуществ использования среды Windows состоит в том, что печать текстовых файлов, таких, как файлы дневника работы или М-фаЙлы, выполняется одинаково во всех приложениях. MATLAB — стандартное приложение и поэтому использует все достоинства такого подхода. Это же верно и для графиков, полученных с помощью MATLAB'a. Чтобы получить печатную копию М-файла или другого текстового файла, просто откройте его с помощью Блокнота обычным образом (см. предыдущий раздел). Щелкните на File, а затем на Print. И все! Если не получилось, возможно, вам надо проверить Print Setup в том же самом меню, чтобы узнать, куда выводится распечатка. При необходимости вы можете вызвать вашего местного специалиста по обслуживанию компьютеров. Но обычно все уже настроено, так что все распечатки идут на нужный принтер. Графики выводятся на печать точно так же, но вы должны использовать кнопки File и Print в окне, в котором построено изображение (обычно это Figure No. 1). 1.4-2. Пользователи, не работающие nod Windows Если у вас нет системы Windows или вы хотите обойтись без нее, можно выполнить »
!print fname.txt
или воспользоваться подходящей командой печати вашей операционной системы (например, 1р или lpr для Unix). Для графиков команда MATLAB'a print обычно настроена на вывод текущего изображения на принтер, заданный по умолчанию. Если это не так, попробуйте воспользоваться советами из help print. Потерпев неудачу и здесь, расспросите вашего терпеливого друга.
Упражнения
29
Таблица 1.1. Сводка вышеприведенных основных команд plot(х,у) title С'Заголовок') sqrt(х) hold on х=-1:.2:1 format long help sqrt diary f i l e l . t x t 1
plot(x,y,'*') xlabel ('Надпись по оси х') sin(x) hold off y=x.*x format short help myfile diary off
plot(x,y,'+g') ylabel ('Надпись по оси у ' ) exp(x) dotprod=x*y' i ) save fname load fname
С = транспонирование)
Упражнения Прежде чем идти дальше, проверьте уровень вашего умения, выполнив все приведенные ниже упражнения. Если вы не сможете вспомнить некоторые из команд, загляните в табл. 1.1. При необходимости вернитесь назад и перечитайте нужный раздел. 1.1
Найдите сумму первых четырех членов последовательности
1.2
1 2 3 2x3' 3x4' 4x5' Определите вектор t со значениями компонент, равномерно расположенными с шагом 0.2 между 0 и 6 включительно. Теперь используйте его, чтобы нарисовать кривые
f(t) = sm(irt) g(t) = ехр(—t) sin(7r() на одном графике, изобразив первую зеленым, а вторую — желтым цветом. Если вы не уверены, как применить нужные вам функции MATLAB'a, наберите help exp и т.д. Улучшите график, добавив белую линию, соответствующую у = 0. 1.3 Воспользуйтесь редактором, чтобы создать М-файл, в котором определяется длина каждой из сторон треугольника АБС, вершины которого заданы векторами а = [1,2,3], b — [2,3,4] ис = [3,4,5].
Матрицы и комплексные числа
2.1. Векторы и матрицы 2.1.1.
Векторы
Кратко вспомним, как вводятся векторы. Пусть а= (-1,2,4)
и Ъ = (1.5,2,-1).
Присвоим эти векторные значения переменным а и Ь, вводя либо » »
а = [-1 2 4] b = [1.5 2 -1]
либо » »
а = [-1,2,4] Ъ = [1.5,2,-1]
Таким образом, могут быть использованы пятые. Один способ определения внутреннего дения, двух векторов а • Ъ, был указан в дем другой способ, использующий идею ния, также введенного в гл. 1. Набрав >>
либо пробелы, либо заили скалярного произве§1.2. Здесь мы привепоэлементного умноже-
с=а.*Ь
где перед знаком умножения * стоит точка, перемножим векторы а и b поэлементно и получим вектор с — [—1.5,4,—4]. Тогда скалярное произведение получается суммированием компонент вектора с: >>
sum(c)
что дает а • b — —1.5. Аналогично >>
sqrt(sum(a.*a))
2.1. Векторы и матрицы
31
дает длину а. В действительности, команда MATLAB'a norm сразу найдет длину (норму) вектора. Чтобы найти угол 9 между а и Ь, мы можем воспользоваться формулой в = arccosa • b/(jaj jb|). В MATLAB'e arccos обозначается через acos, так что вычисления, проводимые таким способом, могут быть записаны как >> theta = acos( 5Шп(а.*Ъ) / sqrt (sum(a. *a)*sumCb.*b)) ) что дает приблизительно в = 1.693 радиан. 2.1.2. Матрицы Матрица А= вводится для вычислений в MATLAB'e как » А=[-1 1 2;3 -1 1;-1 3 4] со строками-векторами, разделенными точками с запятыми, или как » А = [-1 1 2 3 -1 1 -1 3 4] с различными строками, разделенными <Enter>, и потому появившимися на разных строках экрана. Приглашение MATLAB'a » не появится, пока вы не закончите ввод матрицы закрывающей скобкой J. Если случайно вы написали в одной из строк больше элементов, чем в другой, то получите сообщение об ошибке. Заметьте, что при желании вы можете разделять элементы в строке запятыми:
Если вы найдете избыточным число пробелов между числами в строках выдач MATLAB'a, то можете избавиться от лишних с помощью команды >> format compact На каком-то этапе загляните в help format, чтобы узнать, как можно управлять видом выходных данных MATLAB'a.
32
Глава 2. Матрицы и комплексные числа Система уравнений —xi + x См. гл. 16, где обсуждаются плохо обусловленные системы.
42
Глава 2. Матрицы и комплексные числа
Запустите ваши М-файлы в MATLAB'e и сохраните результаты в дневнике работы. Для этого наберите (в МАТЪА1Ге) diary ch2q2.txt, а затем ch2q2. чтобы выполнить данный М-файл, затем наберите ch2q2a, чтобы прогнать следующий М-файл, и, наконец, ch2q2b, чтобы запустить третий файл. Когда вы прогоните все файлы, наберите diary off. Вернитесь к редактору и вызовите файл ch2q2.txt, чтобы просмотреть его содержимое. Вы увидите, что результаты решения этих близких систем уравнений сильно отличаются. Вы, конечно, можете вставить свои собственные комментарии к результатам и распечатать дневник, чтобы получить «твердую копию». 2.3 Скопируйте М-файл leslie.m и отредактируйте его так, чтобы он был удобен для изучения популяции кошек, описываемой возрастными диапазонами 0-1, 2-5, 6-10 и 11-15 и удовлетворяющей следующим модельным предположениям: • Кошки старше 15 лет не учитываются. • Рождения происходят в диапазоне 2-5 (Ь% в год). • Уровень смертности котят для диапазона 0-1 равен в,к% в год. • В диапазоне 2-5 выживают все. • Уровень смертности для диапазона 6-10 равен dp% в год, а для диапазона старшего возраста 11-15 равен &А% В ГОД. Пусть имя этого М-файла будет cats.m. (a) Найдите матрицу для случая b = 15, с1к — 5, UR — 2 и d-A = 30. (Наберите, например, diary ch2q3.txt, затем запустите М-файл, набрав cats и введя необходимые данные, и в заключение наберите diary off.) (b) Возрастет или уменьшится вся популяция за пять лет, если ее исходное распределение равно [20, 20, 20, 20]? Вы можете использовать sum, чтобы просуммировать все элементы вектора. Можете снова воспользоваться diary ch.2q2q3.txt, чтобы включить результат определения величины популяции за этот период и дополнить его своим комментарием: было ли возрастание или уменьшение популяции. Заметьте, что используя то же имя для дневника работ, вы добавляете новый материал к старому. Не забывайте выполнять diary off каждый раз, когда вы временно приостанавливаете запись в этот дневник. (c) Найдите наибольшее по абсолютной величине собственное значение и соответствующий собственный вектор матрицы
Упражнения
43
Лесли С развития популяции кошек. Заметьте, что в »
V=C(:,1)
будет первый столбец V матрицы С. Это очень полезно, если вы хотите в дальнейшем что-то сделать с этим столбцом, например, сравнить его с другим вектором. (d) Используя исходную популяцию из (Ь), покажите, что вектор популяции (N) после 50 лет приблизительно пропорционален собственному вектору из (с). Повторите все, выбрав исходную популяцию по собственному желанию. Вспомните, что »
VI./V2
дает вектор, содержащий отношения элементов V I и V2.
Целые числа
В этой главе мы введем структуры MATLAB'а, имеющие отношение к некоторым свойствам целых чисел.
3.1. Цикл вычисления чисел Фибоначчи Наберите последовательность >> » >> » >>
f = [1 1] f(3) = f C D -* f f(4) = f(2) •»• f
Ш) f ( 3 ) ;
Последняя команда выведет вектор [ 1 1 2 3]. Таким образом, f (1) ссылается на первый элемент вектора f, f C2) —на второй, и т.д. Мы можем проделывать это снова и снова в цикле: » f = [1 И ; for k = 1:15 f ( k + 2 ) = fCk+1) + f ( k ) ; end » f
Обратите внимание, что MATLAB не выводит приглашение », пока, цикл не завершит end. Цикл for. . .end последовательно выбирает значения 1,2,... ,15 для переменной к и для каждого из них добавляет к вектору f новый элемент f(fc + 2). Так, для к = 1 вектор f выглядит как [1 1 2]; для к — 2 он принимает вид [1 1 2 3] и т.д. Точка с запятой после выражения для f (к + 2) запрещает вывод на экран результатов его вычисления на каждом из 15 шагов цикла. Набрав »
plotCf,'*')
3.1. Цикл вычисления чисел Фибоначчи
45
получим график значений, каждая точка (г,f(г)) которого изображается символом *. Команда p l o t (f ) соединит эти точки отрезками прямой, и мы получим ломаную линию. Элементы вектора f являются числами Фибоначчи 1,1. 2, 3, 5.8,13, 21, 34,... . Они формируются, как и выше, по правилу f(l) — f(2) = 1; f(k+2) = f(fc+l)-t-f(fc)
для к > 1. Приведенные команды могут быть записаны в М-файл. Другой вариант таких вычислений получается с помощью «цикла while»: f=[l
13;
k=l;
while f(k) < 1000 f(k+2)=f(k+l)+f(k); k=k+l; end f plot(f) Этот М-файл сохраним под именем fibno.m и выполним, набрав fibno. Отступы слева используются здесь, чтобы показать структуру М-файла, но на его работу и результат они не влияют. На этот раз две команды между while и end выполняются до тех пор, пока условие цикла {(к) < 1000 остается истинным. Поскольку f (16) = 987 и f (17) — 1597, последнее значение к, при котором выполняется цикл while, есть к ~ 16. Значение, принимаемое к по окончании работы всего М-файла, равно 17, поскольку к увеличилось на 1 во время исполнения последнего шага цикла. Отметим важное различие между циклами for и while: • В цикле for переменная цикла (к в нашем примере) автоматически увеличивается на 1 при каждом проходе цикла. Если вы хотите, чтобы начальным значением этой переменной было а и оно увеличивалось каждый раз на d, пока не превысит 6, набирайте for k = a : d : b end • В цикле while переменная (к, как и выше) не увеличивается автоматически. Вы должны сами увеличивать ее явным образом в каждом цикле, как это делалось выше присвоением k=k+l.
46
Глава 3. Целые числа
3.2. Условный цикл: Зп + 1 или задача о граде Пусть п — положительное целое число. Выполним итерациями следующий процесс: если п четно, заменим его на п/2; если же п нечетно, заменим его на Зп + 1. Так, начиная с п = 10, мы последовательно получим 5,16,8,4,2,1. Здесь мы приводим М-файл, который выполняет это автоматически для любого заданного (вводимого) п. Назовем его hail.m. Обратите внимание, что rem(a,b) в MATLAB'e —это остаток от деления а на Ь. n=inputС'Enter n ' )
while п>1 k=k+l; if rem(n,2)==0 n=n/2; else n=3*n+l; end f(k)=n; end barCf) Чтобы использовать этот файл, наберем h a i l и затем введем, к примеру, 25 <Enter>. Результат получится в виде гистограммы, а не в виде графика кривой, как раньше. Эта гистограмма для п — 1000 приведена на рис. 3.1. Если после выполнения этого М-файла мы наберем к, то в ответ получим точное число шагов, необходимых для достижения 1, считая исходное значение как шаг 1. (Так, например, для п — 8 получатся числа 8,4,2,1, соответствующие 4-м шагам.) При п — 1000 необходимо сделать 112 шагов, что приближенно можно увидеть из гистограммы на рис. 3.1. Если же после выполнения этого М-файла набрать maxCf), то получим максимальное значение, которое достигает п во время итераций — это наивысшая точка гистограммы. При начальном значении 1000 получится 9232. Сделаем некоторые комментарии к работе h a i l . m . (i) Обратите внимание на увеличение к в цикле while. С равным успехом это можно сделать позже в этом же цикле, после строки f(k) — п.
3.3. Евклидов алгоритм нахождения наибольшего общего делителя
20
40
60
ВО
100
47
120
Рис, 3.1. Итерация «задачи о граде» для начального п = 1000. (ii) Обратите внимание и на конструкцию if. . . e l s e . . .end. Все действия должны завершаться оператором end. Но можно использовать if. . .end без альтернативного «else». (iii) Символ —= двойного равенства означает сравнение. Скорейший способ проверить нечто на четность — вычислить остаток от деления на 2, что и делает rem(n,2). (iv) Символ ; после оператора в if ставить не обязательно (но и вреда не будет). Для произвольного п неизвестно, всегда ли этот процесс сходится к 1. Не найдено ни одного числа, которое не приводило бы к 1, но общего доказательства здесь пока нет. Больше об этом можно прочесть в [13].
3.3. Евклидов алгоритм нахождения наибольшего общего делителя Чтобы найти наибольший общий делитель (НОД) двух целых чисел а и Ь, где Ь > 0, сначала разделим Ь на а: а = bq + г, where 0 < г < Ъ. Здесь q — частное, а г—остаток, который мы находим как r=rem(a,b)
Глава 3. Целые числа Таблица 3.1. Алгоритм Евклида. Шаг
1 2 3 4
Текущее « 69 15 9 6
Текущее 6 15 9 6 3
Текущее ц 4 1 1 2
Текущее г 9 б 3 0
(Если необходимо, частное q можно найти, выполнив q=f 1оог(а/Ъ).) Поэтому всегда НОД(«, Ь) = НОД(а - bq, Ь) - НОД(г, Ь) = НОД(Ь, г).
(3.1)
В том особом случае, когда г является делителем Ь (это обозначается через т\Ь и читается как 'г делит 6'), последнее число в колонке для b просто равно 71. Н а б р о с о к д о к а з а т е л ь с т в а с о о т н о ш е н и я (3.1), Первое равенство в (3.1) следует из того, что а и Ь имеют 'точно те. :>х;е. делители, что и пара а — bq и Ь. и поэтому их НОД равны. Чтобы увидеть это, предположим, что d\a и d\b. Тогда а = aid, b = b\d для некоторых целых а\ и Ь\, и поэтому a — bq — d(ai — biq), так что d является делителем и для а — bq. II обратно, такие же самые аргументы показывают, что общий делитель a — bqiib является и делителем а. Второе равенство в (3.1) следует просто из определения г, а третье — из того, что перестановка чисел не изменяет их НОД. Идея алгоритма Евклида состоит в том, чтобы заменять а на Ъ и Ъ на ;• и повторять все действия. Положим а = 69, b = 15. Вычисления можно свести в табл. 3.1. Тогда НОД(69,15) = НОД(15, 9) — Н0Д(9, 6) = НОД(6, 3) = 3, так как в конце 6 делится на 3 точно и, следовательно, НОД равен 3. Чтобы реализовать этот алгоритм в MATLAB'e, нужно находить остатки г и затем заменять о на Ь, Ь на г. Вычисления продолжаются до тех пор, пока остаток г > 0, но предпочтительнее использовать условие b > 0, поскольку в конце цикла они равны и, кроме того, до начала, цикла значение г еше не определено. Легче попять уже написанный М-файл, чем описать его! Понимаете ли вы, почему за НОД принимается последнее значение а, вычисленное этой процедурой, а не последние значения Ъ или г? '/, Функция вычисления НОД чисел а и b. У, Для пробного запуска нужно набрать, например, У, gcdiv(69,15)
3-4. Теорема Ферма и степенной алгоритм
49
У. Для надежности перед началом вычислений устраняется У, возможная отрицательность а,Ъ function h=gcdiv(a,b) if a. Пусть 6п и 7п обозначают целые числа, представпмые в обычной десятичной системе счисления в виде цепочек символов из п шестерок и п семерок соответственно. Так. G.j = 6666 и т.д. Воспользуйтесь командой gcdiv, чтобы найти ИОД чисел 6П и 7п для п — 1, 2, 3 . . . . . Какой из ответов неверный? Как вы узнали об этом? Перейдите теперь в режим format long и повторите упражнение. Каково теперь новое значение п с неверным результатом? И снова, как вы можете удостовериться, что для этого ?! ответ неверен? Если вы наберете pow(17,1000,100). то в ответ получите 1. так что 1.71000 есть 1 плюс кратное числа 100, т.е. 17 1 0 0 0 — 1 1000 кратно 100. Каковы две последние цифры числа 17 ? Тем 1ио0 же способом покажите, что 17 — 1 кратно 99 и 101. Из чего вы можете заключить, что 17 1 0 0 0 — 1 кратно 99 х 100 х 101? (Здесь используется тот факт, что 99, 100 и 101 не имеют обшего делителя.) Используйте pow, чтобы найти три последние цифры 19" 0 0 0 . Найдите остатки от деления \7ЛЛ1Л и 3313 1 7 на 112643. Замечание.: Команда MATLAB'a rem здесь не годится, поскольку числа слишком большие, и поэтом;' придется использовать М-файл степенного алгоритма pow. Подумайте, почему 3313 из представления 17 = 1 4-16 следует, что 17 — 1 делится на 16? (Это математический вопрос.) Понимаете ли вы, почему
*•' Не следует использовать переменную (индекс) внешнего цикла к как таковую во внутренним цикле. В данном случае это не приводит к ошибке только потому, что внутренний цикл имеет тип while . . .end. а во внешнем цикле к по существу но используется. — Прим. иерее.
54
3.5 3.6
Глава 3. Целые числа подобным же образом 3313 1 7 — 1 делится на 16? Что вы можете Ш 17 сказать о Н О Д ( 1 7 - - 1,3313 - 1)? 13EM67f Воспользуйтесь pow, чтобы найти rem(2 \ 1394677). Почему можно сказать, что число 1394677 не является простым? Наберите М-файл, приведепшлй ниже, и назовите его mypow .m: m=10"7+l; while m>
roots(p)
58
Глава 4. Графики и кривые
Обратите внимание, что эта команда находит как вещественные, так и комплексные корни. Мы можем увеличить число отображаемых цифр с помошью »
format long
Можно получить график полинома р: » х=-4:.05:2; >> y = p o l y v a l ( p , x ) ; >> p l o t ( x . y ) Первая строка создает вектор х с элементами от -4 до 2 с шагом 0.05; т.е. х = [-4.0 - 3 . 9 5 - 3 . 9 . . . 1.95 2.0]. Как обычно, точка с запятой запрещает вывод на экран. Вторая строка вычисляет значения полинома р для всех х, создавая вектор у той же длины, что и х. и содержащий р(—4)... .,р(2). Третья строка строит график зависимости у от х, отображая соответствующие пары чисел и соединяя их (очень короткими) отрезками прямых. Добавив >> hold on » p l o t ( [ - 4 , 2 ] , [0,0]) нарисуем ось х. Команда plot берет первые значения из каждой квадратной скобки, образуя точку (—4,0), и соединяет ее с точкой (2,0) ; полученной с помощью вторых элементов из квадратных скобок. Таким образом, на экране рисуется ось х. Теперь видно, чго р имеет два вещественных корня на интервале от —4 до 2 и их положение соответствует вычисленным значениям корней —3.18... и - 0 . 7 2 8 . . . . См. рис. 4.1.
4.2. Простые примеры вычерчивания кривых Сначала вспомним основные шаги создания графиков (§ 1.2.2). Например, чтобы нарисовать кривую у = sinx для х между 0 и 2гг, выполним » х=0:.05:2*pi; >> y = s i n ( x ) ; >> p l o t ( x , y )
4.2. Простые примеры вычерчивания кривых
59
3
Р и с . 4 . 1 . График полинома у = х + 2х — Зх + Ах + 5 с нарисованной осью х.
Команда p l o t работает с двумя (одинаковой длины) векторами значений координатных пар. Если в этом случае вы наберете length(х) или l e n g t h ( y ) . то получите в ответ 126. Хотя оси масштабируются автоматически по максимальным значениям х и у, при необходимости их масштаб можно изменить вручную. Например, строка »
axis С [0 10 ~2 2])
отображает на экран область 0 < х < 10, — 2 < у < 2. Проделайте это, чтобы увидеть результат. (В версиях MATLAB'a до 4.0 вам может потребоваться после axis повторить команду p l o t ( x , у ) . } Аналогично, чтобы нарисовать график, скажем, у — xsinx, сделаем следующее » >> >>
х=0:.05:2*pi; у=х.*sin(x); plot(х,у)
Обратите внимание на операцию . * (§ 1.2.1), которая перемножает соответствующие элементы векторов х и s i n ( x ) . и не пытайтесь проделать невыполнимое умножение х на s i n ( x ) как матриц (для матричного умножения размеры этих векторов не согласованы).
60
Глава 4. Графики и кривые Теперь выполните >> х = 0 . 0 1 : . 0 1 : 1 ; >> у=1/х; » у=1./х; >> p l o t ( х , у )
Первая попытка, определить у — 1/х не сработает; вторая должна вычислить у — 1/х для 0.01 < .т < 1. Вспомним (§1.2.1). что символ ./ используется для поэлементного деления: 1 делится по очереди на каждый элемент вектора х и результату присваивается имя у. Команда 1/х не имеет смысла, поскольку нельзя разделить 1 на вектор. (В версиях MATLAB'a до 4.2с выражение у=1, /х также недопустимо.) Набрав >> >> >> >>
t=0:.05:2*pi; x=cos(t); y=sin(t); plot(x.y)
получим параметрическую кривую {(cost, sin г)}, которая, конечно, является окружностью радиуса 1 с центром в (0,0), хотя она и не выглядит очень «круглой» из-за автоматического масштабирования. Попробуйте >> axis С'square') и заметьте как «округлился» график. Мол-сете также воспользоваться командой >>
axis('equal')
которая делает масштабы осей одинаковыми независимо от формы кривой. Так, после >> » >> >> >>
t=0:.05:2*pi; x=2*cos(t); y=sin(t); plot(x,y) axis('equal')
получится изображение эллипса, у которого отношение большой и малой осей визуально равно 2:1. Замена a x i s ( ' equal') на a x i s ( ' square') приведет к другому результату. Попробуйте! Более тонкие примеры параметрических кривых приведены в упражнениях и исследованиях.
4.3. Полиномы Тейлора
G1
4.3. Полиномы Тейлора Хорошей иллюстрацией графических возможностей является сравнение графика такой функции, как sin а-, и графика ее приближения полиномом Тейлора X
зГ
5!
•"'
v
'
(2Ar — 1)!'
М-файл t s i n e . m запрашивает значение к (это число членов полипома), затем рисует зеленым цветом «истинную» кривую и, после нажатия <Entcr>, к этой кривой дорисовывает красным цветом ее приближение. Сначала масштабирование соответствует только кривой синуса, а затем обеим кривым. Помните: чтобы выполнить «тот М-файл. достаточно набрать t s i n e с последующим <Enter>. Набирать .га не надо. На рис. 4.2 синусоида, изображается сплошной линией, а приближение Тейлора, для к — 5 (что соответствует степени 2к — 1 — 9) — точечной линией. А вот М-файл tsine2.m рисует реальную синусоиду (она зеленая), затем фиксирует масштабирование, и рисует приближение (уже красным цветом). Это достигается выполнением команды a x i s ( a x i s ) после первой команды plot в М-файле tsine2.m. Обратите внимание на разницу, скажем, для случая к = 4.
Рис. 4.2. Синусоида (сплошная линия) и приближение Тейлора степени 9 (точечная).
62
Глава 4. Графики и кривые
Приближение с возрастанием к все меньше отличается от кривой при удалении от х — 0. По мерс приближения к к 10 кривые становятся более или менее неразличимыми в области от 0 до 2тг. Ниже мы приводим текст М-файла t s i n e . Даже если вы не очень внимательно следили за деталями, то все же должны отметить, как легко осуществляются в MATLAB'e все эти относительно сложные действия. У, Рисует приближение Тейлора У, степени 2к-1 к синусоиде k=input(3Введите число членов ряда Тейлора для синуса: ' ) ; х=0:.05:2*pi; z=sin(x); plot(x,z, 'g') У, Точная кривая синуса рисуется зеленым */, цветом hold on pause '/, Это приостанавливает выполнение до нажатия клавиши 1 Enter w=x; у=х; s=-l; for j=l:k-l w=w.*x.*x/(2*j*(2*j+l)); y=y+s*w; s=-s; end plot(x,y,'r') У, Приближение рисуется красным цветом hold off Заметьте, что мы используем ' g ' , чтобы кривая рисовалась зеленым цветом (см. §1.2.2). Пунктирная линия рисуется командой p l o t (х, у , ' — ' ) ; когда это требуется, символ - применяется для задания сплошной линии. Мы уже встречали команду hold on, которая позволяет сохранить график и поверх него нарисовать другой. Поэтому в конце необходимо отменить режим сохранения графика, выполнив команду hold off. И опять обратите внимание на использование в этом файле поэлементного умножения . *.
4.4. Приближения с помощью функции polyfit
63
4.4. Приближения с помощью функции polyfit Совсем другой подход к приближению функций полиномами дает использование функции p o l y f i t , которая подбирает для кривой полином заданной степени по методу, минимизирующему расстояние между трафиками полинома и истинной кривой, усредненное по всей их длине. (См. также гл. 5.) Так, например, выполните М-файл с названием polyex-m: а=0:.05:2*pi; b=sin(a); c=polyfit(a,b,5); d=polyval(c,a); plot ( a , d , ' r ' ) hold on pause plotCa.b,'g') hold off Файл находит приближение синусоиды полиномом 5-й степени в области от 0 до G.3, используя а в качестве независимой переменной. Полиномиальное приближение с есть просто список коэффициентов: чтобы вычислить его в точках а, используется функция polyval. Первая команда plot рисует красным цветом приближе1 0.8 06
\
0.4 0.2
\
•••
7
"
:
\
0 -0.?. V
-0.4
/
\
-0.6
•
-О.В
Рис. 4.3. Синусоида (сплошная) и приближение polyfit степени 3 (точечная линия).
64
Глава 4. Графики и кривые
ние. а вторая команда plot рисует зеленым цветом собственно синусоиду. Обратите внимание, как сильно отличается это приближение от приближения Тейлора той же степени, получающегося с помощью t s i n e . m при А1 ~ 3. На рис. 4.3 показан результат применения программы polyex.m для степени 3.
4.5. Задача о козе Здесь рассматривается хорошо известная 'задача, приводящая к довольно громоздком}- уравнению, которое мы можем решить как графически, так и численно. З а д а ч а . Коза привязана п точке на границе круглого поля с радиусом 10 метров. Какой длины должна быть веревка, чтобы коза могла щипать траву ровно на половине площади поля? Пусть .т — длина персики в метрах. Некоторые манипуляции с площадями секторов и треугольников дают для х уравнение 2(х2 - 200) arccos (~) - х \ / 4 0 0 - х 2 + ЮОтг = 0.
(4.1)
Посмотрите на рис. 4.4 и обратитесь к § 4.7.1. Вспомните, что обратный косинус arccos в MATLAB'e вычисляется командой acos. Представляется невозможным решить это уравнение явно! Для графического решения легко нарисонать левую часть уравнения (4.1)— это делает М-файл goatgr.m . Из графика ясно (достаточно взглянуть на рис. 4.4). что решении лежит где-то возле х ~ 10. Один из способов вычислить точное значение решения — это воспользоваться встроенной '' функцией fzero. Для ее работы нам нужен М-файл, содержащий определение рассматриваемой функции. В данном случае это goatf n. m , которая выглядит так (эта функция доступна вам через Интернет, и поэтому пет необходимости создавать ее): function y=goatfn(x) у=2*(х.*х-200).*acos(x/20)-x.*sqrt(400-x.*x) + 100*pi; end; l> В более* поздних версиях эта команда оформлена уже как М-файл. Текст встроенной функции недоступен пользователю и представляет собой исполняемый (*.ехе) код, обычно на языке С. Это делается с целью сокращения времени счета в тех случаях, когла производимые функцией вычисления могут быть очень большими. Таковы sin, cos. exp и целый ряд других, но подавляющее большинство команд системы -•• это М-файлы. которые можно вызвать для просмотра в командном окне (и ваши г.обстпенные М-файлы тоже) с помощью команды type. - -Прим. персе.
4.6. Огибающие семейства линий
65
Рис. 4.4. Коза привязана в точке G. Мы хотим определить длину х веревки, которая позволяет козе щипать траву па половине поля. Уравнением для х' является (4.1), что доказывается в § 4.7.1. Штриховка нужна ;\пк этого доказательства.
Заметим, что выполнение команды MATLAB'a goatfn приведет к ошибке, но, скажем, команда goatfn(lO) даст значение функции для х = 10. Что произойдет, если вы наберете goatfn(25)? Какова па самом деле «область определения» функции в задаче о козе, т.е. область х. для которых у принимает вещественные значения? Теперь наберем »
a=fzero('goatfn',10)
что означает «найди решение а уравнения goatfn(x)=0 вблизи ж=10». В режиме format long можно увидеть очень точную оценку.
4.6. Огибающие семейства линий Интересным способом использования графики MATLAB'a является вычерчивание семейства линий на плоскости и его огибающей. Например, М-файл parnorm.m рисует нормали к параболе у = х2, параметризованной как х — t,y — t2. Нормаль к параболе в точке £. £*) описывается уравнением 2
у -t = -—(х - t), 5-4196
3
т. е. х + 2ty - t - 2t = 0.
66
Глава 4. Графики и кривые
Другими словами, p(t)x + q{t)y + r(t) = 0, где p(t) = 1, q(i) — 2t и r(t) = — t — 2t3. Эти функции р. q. г в MATLAB'e имеют вид p=ones(sizeCt)); q=2*t; r=-t-2*t.*t.*t; Обратите внимание на использование ones(size(t)), когда функция тождественно равна 1. Для создания p(t) = 5 нужно было бы написать p=5*ones(size(t)). Заметьте, как используется .* при вычислении значения куба t. Можно также написать r=-t-2*t. "3 . Другие возможности для задания р, q.r рассмотрены ниже. М-файл parnorm.m требует ввода: (i) ограничений на х (используем xl — —2, хи — 2, т.е. потребуем. чтобы значения х лежали между —2 и 2); (ii) нижнего предела изменения у (используем yl = —1). Верхний предел у определяется тогда из нашего требования, чтобы размеры области изменения х, а именно 4, совпадали бы с размерами области изменения у; (iii) границ изменения параметра t (используем Ы = — 2, tu = 2, так что t изменяется от —2 до 2, как и х). Выполнение parnorm.m (наберите parnorm и <Enter>) приведет к вычерчиванию в графическом окне всех линий, и глаз непроизвольно выделит другую кривую с заострением вниз, которая касательно ко всем линиям. Эха остроконечная кривая называется огибающей нашего семейства нормалей. Нажатие клавиши <Enter> позволит выделить остроконечную кривую, вычертив ее белым ^ цветом. См. рис. 4.5. М-файл parnorm. m является частным случаем М-файла linenv.m, который вычерчивает семейство линий где p,q,r — любые функции параметра t над некоторой ранее заданной областью значений t. Мы получим М-файл parnorm.m из linenv.m, задав функции p,q,r в нужном месте (см. ниже). В исходный М-файл добавлено несколько строк так, что красным цветом рисуется парабола и (после нажатия <Enter>) белым рисуется 1> В версиях MATLAB'a, начиная с 5.0, фон для графиков по умолчанию белый. Чтобы сделать фон черным, следует перед началом сеанса выполнять команду vhitebg без параметров. — Прим. перев.
4.6. Огибающие семейства линий
•1
2.5
2
1.5
•I ЩИ
67
1
0.5
0
-0-5
i
W/i
_2
\\\\ х х ч х ч
-1.5
-1
-0.5
0
0.5
1
1.5
4
2
Рис. 4.5. Нормали к параболе у = х2 и их «огибающая» (кривая с острием вниз). сама огибающая кривая. В упражнении 4.7 описан метод расчета огибающей кривой. Еще прочесть об огибающих вы сможете в гл. 10. Основной М-файл linenv.m не з а в е р ш е н : прежде чем вы сможете выполнить его, необходимо уточнить функции р.д,г в следующих строках:
Р= q=
У, Это три строки, где задано У, уравнение линии px+qy+r=0, У, p,q,r являются функциями t.
У, Осторожно!! Выражение q=4 создаст % не вектор, а константу. У, Поэтому если какая-то из функций p,q,r У, является константой, скажем к, необходимо У, записать это так: k*ones(size(t)) . У, Здесь onesCsize(t)) - вектор из единиц У, того же типа, что и вектор t.
68
Глава 4. Графики и кривые
В частном случае нормалей к параболе (как в parnorra.m) нам нужно уравнение нормали к кривой у ~ х2 в точке (t,t2). которое приведено в начале этого раздела.
Упражнения 4.1
Выполните » а=1; » х=-5:.05:5; >> у = х . * х . * х - а*х + 1; >> p l o t ( x , y ) Несмотря на то. что 1 — число, MATLAB достаточно разумен, чтобы прибавить ее к вектору х.*х.*х-а*х, компоненты которого содержат значения хл — ах для х = —5. х = —4.95, х — —4.9,.... х ~ 5. Таким образом, 1 прибавляется к каждому элемент}' итого вектора. Сможете ли вы па основе графика сказать, сколько вещественных корней имеет уравнение л;3 — х -+- 1 = 0? Выполните >>
4.2
axis([-Б 5 -3 3])
Это должно помочь: команда вынудит MATLAB ограничить оси координат пределами — 5 < х < 5 и —3 < ]/ < 3. М-файл cubics.m. выполняющий указанные выше действия, позволяет вам выбрать своп области изменения х и у. а также значение п. Итак, команды cubics <Enter>, за которыми следуют пять чисел —о, 5, —3, 3,1 со своим <Enter> каждое, рисуют функцию у = х3 — ах + 1 для —5 < х < 5, — 3 < у < 3. полагая а = 1. При этом ось х рисуется белым цветом. Загляните в этот М-файл. если хотите увидеть, как это все делается. Попробуйте выполнить cubics с другими значениями а и найдите приближенно значение а, при котором график касается оси х. так что имеется двойной корень. Как только вы догадаетесь о значении а. выполните cubics при 0.5 < х < 1 и —0.05 < у < 0.05. Вы обнаружите, что сможете сказать очень точно, касается ли график оси. Найдите как можно лучшее приближение для и. В Ы-файле tsine.m замените plot (x,z, ' g ' ) на p l o t (x,z. *z, 'g''). и p l o t ( x , y , ' r ' ) на p l o t ( x , y . * y , ' r ' ) . Назовите полученный М-файл, скажем, tsine3.m. Какие
Упражнения
69
фупкиии будут теперь нарисованы красным и зеленым цветами? Напишите формулы для них. Выполните этот М-файл. чтобы найти минимальное число членов (к), необходимых для получения хорошего полиномиального приближения при 0 < .г < 4. Какова степень --этого полинома? (Указание: это не к.) 4-3 В задаче о козе (§4.5), найдите значение х. близкое к 10, используя f zero. Имеется только одно решение исходной задачи? (Взгляните на. график функции из задачи о козе.) Выполните нижеследующие строки, аппроксимирующие функцию у из задачи о козе полиномом z степени 3 (можно сделать это. инедя операторы непосредственно в окне MATLAB'a пли через М-файл): х=-19:.05:19; y-goatfn(x); z=polyfit(x,y,3); v=polyval(z3x); plot(х,у,'g',x,v,'г') При этом зеленым цветом рисуется истинная функция из задачи о козе, а красным - - приближение. Вы должны согласиться, что обе кривые очень близки в области от —19 до 19. Наберите z, чтобы узнать, каков полипом z. Воспользуйтесь командой r o o t s ( z ) , чтобы найти его корни. Почему появился «дополнительный» корень г, не имеющий отношения к нулю функции задачи о козе? 4.4
Введите х=. 05: .01:2; а затем введите необходимые строки, чтобы нарисовать график у — x'sin ^ в интервале 0.05 < х < 2. (Будьте осторожны с невинно выглядящим ~. Сравните с §4.2 выше.) Воспользуйтесь последовательностью команд, аналогичных приведенным в упр. 4.3, чтобы начертить полиномиальное приближение степени 7 на том же графике, что и исходная кривая. Как вы думаете, почему сходство такое плохое?
4.5
М-файл hypocy .m рисует так называемые гипоциклоидпые кривые (известные также как спирографы), которые получаются качением окружности радиуса Ъ внутри окружности радиуса а > Ь. Кривая образуется точкой Р, жестко закрепленной на катящейся окружности на расстоянии d от ее центра.
70
Глава 4.
Графики и кривые
Р и с . 4.6. Генерация гипоциклоиды окружностью радиуса Ь, катящейся внутри окружности радиуса a > Ъ. Гипоциклоида вычерчивается точкой Р, прикрепленной к радиусу CQ движущейся окружности, где длина СР равна d- На рисунке a — 3,6 = \,d = 0.7 . Параметрическое уравнение гипоциклоиды имеет вид: х — (а — b) cos у — (а — b) sin
Ы
ticos t. — d sin t
(4.2)
(см. §4.7.2 и рис. 4.6). М-файл запрашивает значения a,b,d и верхний предел для t, т.е. вы должны ввести такое п, что 0 ^ i < 7i7r. Нарисуйте кривую, используя hypocy .m с 6 = rf = 1 и а = 2. Объясните то. что увидите, используя параметризацию (4.2). Возьмите a — 3,4,5,6,7 при Ь = d — 1 и определите в каждом случае: (i) наименьшее целое значение п, при котором кривая замыкается и начинает повторяться; (и) число «выступов» (точек заострения) на кривой. Сможете ли вы написать общую формулу для результата при любом целом а > 2?
Упражнения 4.6
71
Покажите, что прямая, перпендикулярная отрезку, соединяющему точки (а,Ь) и (c,d) и проходящая через его середину, имеет уравнение 2х{а - с) + 2у{Ь - d) ~ а2 - Ь2 + с2 + d2 = 0. (Указание: Используйте свойство равенства расстояний: точка (ж, у) находится на искомой прямой тогда и только тогда, когда ее расстояния от (а, 6) and (с, d) равны. Это приводит к уравнению
(x-a)2 + (y-b)^(x-c)2 + (y-d)2,) Проверьте, что для точек (0,1) и (£,0) такая прямая описывается уравнением 2xt-2y + l- t2 = 0.
4.7
(4.3)
Завершите М-файл linenv.m, чтобы построить огибающую семейства таких прямых для —2 < t < 2. Предположим, что уравнения рх + qy + г = 0 и р'х + q'y + г' — 0
(4.4)
(где p,q,T являются функциями £, как в упр. 4.6, а штрих означает дифференцирование по t) разрешены относительно х и у:
r'q - rq' rp' ~ r'p , , у= —; —• pq'~p'q pq'~p'q
х- —,
(4.5)
(Это просто решение системы двух линейных уравнений.) Таким образом, хну являются функциями параметра t, и когда £ изменяется, точка (х, у) вычерчивает некоторую кривую. Прямые, но громоздкие выкладки показывают, что Касательная к кривой (х,у) в точке с параметром t является в точности исходной прямой p(t)x + q(t)y + r(t) =0. Таким образом, (4.5) дает огибающую кривую, которая является касательной ко всем линиям семейства. На практике обычно проще прямо найти решение, чем воспользоваться (4.5). Например, в случае нормалей к параболе из § 4.6 мы получим огибающую из уравнений х + 2ty - t - 2t3 = 0 и 2у - 1 - 6£2 = О, где второе уравнение получено дифференцированием первого по t. Второе уравнение прямо дает у, после чего х находится
72
Глава 4. Графики и кривые из первого уравнения: у= -(l + 6t2). Это кривая с острием вниз на рис. 4.5. Мы можем найти уравнение кривой в координатах х,у. исключив t. Так как б£2 = 2у - 1, то 2 Ш 6 = (2у - I ) 3 . И так как 4/3 = -х, то 1616 = х2. Следовательно, 21Gx2 = 16(2у — I ) 3 . т.е. 27ж2 = 2{2у- I ) 3 является уравнением огибающей кривой в данном случае. Найдите уравнение огибающей в случае семейства прямых (4.3). Как это связано с формой кривой, появляющейся тогда, когда вес они вычерчены на экране?
4.7. Приложение 4-7.1. Вывод уравнения (4-1) из задачи о козе Из рис. 4.4 следует, что область, где привязанная в точке G коза может щипать траву, ограничена дугой окружности от G вдоль границы поля к Л, затем вдоль дуги окружности с центром в G к В и, наконец, вдоль границы поля обратно к G. Площадь этой области есть сумма (i) площади сектора окружности с центром в G радиуса х, ограниченного прямыми линиями BG.GA и дугой окружности с центром в G от А до В, и (ii) удвоенной площади части поля ниже хорды BG. Площадь последней части есть площадь кругового сектора поля с обходом от С вдоль радиуса к В, вдоль окружности к G и вдоль радиуса к С, минус площадь заштрихованного треугольника GCB. Пусть в — угол CGA (равный углу CGB). Площадь (i) есть \х2{2в), а в ~ a r c c o s ^ , так что площадь равна x 2 a r c c o s ^ . Площадь (ii) есть
Прибавляя (з) к удвоенной (ii) и полагая результат равным половине площади кругового поля, 507г, получим уравнение (4.1).
4.7. Приложение 73 4-7.2. Вывод параметрического уравнения (4-Ю В обозначениях рис. 4.6 отрезок, соединяющий точку О с центром С катящейся окружности, образует угол и от горизонтали против часовой стрелки, так что С = ((а — Ь) cos u, (а - Ь) sin it). В то же время отрезок, соединяющий С г движущейся точкой Р, поворачивается на угол t по часовой стрелке от ее исходного горизонтального положения Ро в предположении, что центр С милой окружности начинает движение в положительном направлении оси л. Условие качения состоит в том, что дуга большого круга от Q o к Л равна дуге малого круга от Л к Q. где CPQ есть прямая линия, как показано на рисунке. Следовательно, г., ,-. ova + г) = аи.
так что и =
Ы
-. а—о
Уравнение (4.2) следует из того, что точка Р имеет координаты {(а - Ь) СОЙ и,(а - b) sin и) + d(cos t, - sin t);
последний знак минус получается из-за того, что t измеряется против часовой стрелки.
Представление данных
Как следствие технологического прогресса, быстро возрастает объем данных во всех областях практических приложений. Целью представления данных в другой форме является желание помочь в использовании этой массы данных и в извлечении из них дополнительной информации удобным образом. В этой главе мы обсудим основы анализа данных, используя некоторые средства элементарного статистического инструментария MATLAB'a. Мы рассмотрим характеристики последовательности данных, соотношения между такими последовательностями и извлечение специфической информации из них. Таким образом, круг тем, рассматриваемых нами, совпадает с элементарными функциями многих современных пакетов по статистике, электронным таблицам и базам данных.
5.1. Анализ данных Для заданной последовательности данных D = [d\, d2, •. • , dn\ можно вычислить такие простые статистические характеристики (статистики), как максимум, минимум, среднее и медиану (величину, превосходящую половину данных и меньшую другой их половины). Им соответствуют команды MATLAB'a max, min, mean, median. В качестве D здесь может быть и вектор-столбец, и матрица. Чтобы понять работу некоторых наиболее используемых команд, возьмем, например, »
D - [2 1 3 4 7]
5.1. Анализ данных
75
Таблица 5.1. Вычисление; статистик набора данных (вектора D) Описание Минимум Максимум Среднее Медиана Произведение элементов D Сумма, элементов D Кумулятивная сумма Стандартное отклонение Упорядочивание D
Строка MATLAB'a m = min(D) М = max(D) р = mean(D) Р = raedian(D) pr = prod(D) dsum = sum(D) csum = curasum(D) s - std(D) so = sort(D)
Результат 1 7 3.4 3 168 17 [2 3 6 10 17] 2.3022 [12 3 4 7]
В таблице 5.1 показаны статистики1' этого набора данных, вычисленные с помощью MATLAB'a. Отметим, что упорядочивание делается только в порядке возрастания; каков поэтому будет результат следующего выражения? >> D1 = - sort(-D) Полезной формой представления данных является гистограмма. Команда MATLAB'a для этого есть просто hist: например. hist(D) выведет на график гистограмму набора данных D. По умолчанию отрезок min(D) < х < rnax(D) разбивается на 10 равных частей, и высота прямоугольников соответствует числу элементов набора в каждой из них. Можно взять другое разбиение: чтобы оно состояло из трех частей, наберите >> histCD, 3) Таким образом, здесь интервалы суть 1 < х < 3, 3 < х < о, 5 < х < 7 и центры оснований прямоугольников расположены соответственно в точках 2, 4, 6. Чтобы найти размеры (у) групп, наберите >> у = hist(D, 3) а чтобы найти размеры (у) групп и положения (х) середин интервалов, наберите »
[у х] = hist(D, 3)
1
* Если мы обозначим среднее последовательности D через d, то мера разброса (дисперсии) или изменчивости (вариативности) дается стандартным отклонением s, таким, что nd~
76
Глава 5. Представление данных
В нашем случае результат равен у = [3 1 1] ! ' и х — [2 4 6]. Имеется с:вязь с прямоугольными диаграммами: наберите help bar, чтобы узнать особенное™ применения bar. и вы увидите, что barfx, у) создаст график, подобный h i s t ( D , 3). 5.1.1. Сортировка Часто бывает необходимо упорядочить несколько последовательностей данных либо по возрастанию, либо по убыванию. Например, для двух связанных между собой последовательностей данных может потребоваться упорядочить вторую в соответствии с первой. Пример такого упорядочивания приведен а М-файле tomato.m, который сопоставляет количество х удобрений с весом у вырашенных плодов томата. Набрав tomato, получим два вектора х и у. но элементы х не упорядочены по возрастанию. (Вы. конечно, можете увидеть элементы х. набрав х.) С помощью команды p l o t (х,у, ' g * ' ) нарисуем график распределения (разброса, рассеяния) данных (зависимость между х и у) с помощью символов «*» зеленого цвета. Набрав p l o t ( х , у ) , получим график некоторой линии, но так как данные не упорядочены, он напоминает скорее каракули, чем кривую. Один из способов исправить это дают следующие команды: >> [sx k] = s o r t ( x ) ; » sy = yCk); >> p l o t ( s x , sy) В первой строке х упорядочивается по возрастанию, при этом первоначальное положение его элементов записывается в вектор к. Упорядоченный х запоминается как sx. Во второй строке у переупорядочивается так, чтобы его компоненты соответствовали х. Набрав [х у sx sy]. вы увидите четыре столбца цифр одновременно. Теперь график линии больше напоминает кривую. Наконец, как мы уже говорили выше в этой главе, данные легко упорядочить с помощью s o r t в убывающем порядке, изменив у них знак на противоположный.
11
Элемент 3 из D попал в первую группу и поэтому не повторился во иторой. R командах MATLAB'a много таких специфических ситуации. Они часто не отражены в описаниях команд, но обычно реализованы в соотвеггтпии со "здравым смыслом.— Прим. персе.
5.1. Анализ данных 5.1.2.
77
Создание запросов
Средства создания запросов на выборку или выборки данных, ле>1сащих в недрах базы данных, исе больше используются сейчас в различных управленческих информационных системах. Здесь мы проиллюстрируем сказанное двумя простыми примерами. Важную роль и создании запросов па выборку играют условия отбора записей, часто называемые критериями. В MATLAB'e эти условия могут быть представлены в виде вектора (или матрицы) из элементов 0 и 1. означающих соответственно «не удовлетворяет» и «удовлетворяет». В качестве первого примера, рассмотрим те томатные растения, которые дают больше плодов. Задача состоит в том, чтобы построить график зависимости между удобрениями и весом растений с урожаем больше 5 кг. Чтобы выделить эти случаи из всего множества данных, построим нужный вектор d из единиц и нулей, подсчитаем общее число t единиц и из случаев, соответствующих требованиям, построим векторы x l и y l (оба длины t): » tomato; >> d = Су>=5) ; У, Условия отбора записей ! ! ! ! >> t = sum(d) 7, Число условиям >> [v k]=sort(-d); У, Перенос объекУ, тов в начало >> k = k(l:t) */, Ограничение изменения индекса У, величиной 't ! (запрос) >> xl=x(k); yl=y(k); '/, Извлечение результатов запроса '/, из х и у Если мы теперь пожелаем построить график xl как функции от y l . то сначала необходимо упорядочить yl соответственно x l . как это сделано выше. Здесь t = 7. Второй пример является простой геометрической задачей. Дано множество из 42 точек (х, у) на единичной окружности, и мы хотим выделить точки, лежащие во втором квадранте, и отобразить их на графике: >> format compact; t = 0 : 0.15: 2*pi; n_count=length(t) >> x = c o s ( t ) ; y = s i n ( t ) ; %— заданное множество данных— >> d = (y>=0) & (x> t = sum(d) 7« Число '/, условиям >> [v i ] = s o r t ( - d ) ; 7. Перенос индексов > Y = polyval(C,x); » г = у - Y; >> R2 = г ' * г Вспомните § 4.1, что команда polyval вычисляет значения полинома С для значений х из вектора х. Таким образом, она находит точки кривой наилучшего приближения. Поскольку х и у являются векторами-столбцами, таковы же Y и г. 5.2.1.3. Пример данных: снова толшты Эти данные были описаны в § 5.1.1. Некоторую информацию о них можно получить, набрав help tomato. Используя метод наименьших квадратов, вы должны получить а — 4.3985 и [3 = 0.0966, а 2 невязка будет равна Я — 0.388. Вы можете выполнить приближение и нарисовать потом график полученной прямой без предварительного упорядочивания данных. Но если вы захотите аппроксимировать их другой кривой (см. § 5.2.2) и нарисовать затем ее график, данные придется, переупорядочить. 5.2.2. Приближение полиномами Если соотношение между множествами данных х и у на самом деле не является линейным, мы можем попробовать нелинейные функции. Проще всего воспользоваться квадратичной функцией 2
Y = в2х + (Зух + а.
5.2. Приближение по методу наименьших квадратов
81
Как и прежде, мы хотим найти коэффициенты 02, А и а так, чтобы минимизировать невязку
где для всех i Yi = /32х? + /Згж^ + Q. В MATLAB'e надо просто набрать »
С = polyfitCx, у, 2)
чтобы получить коэффициенты С(1) = /Зг, С(2) = 0i и С(3) = (>. Для нахождения с помощью вектора-строки С невязки метода наименьших квадратов наберите >> Y = polyval(C,x); » г = у - Y ; » R2 = г'*г Набрав help polyf i t , вы найдете, что polyf it может приблизить множества данных х и у полиномом любой степени к. В общем случае функция имеет вид Y = $кхк + •••+ (32х2
+
0lX + a
и команда MATLAB'a С = polyf i t (х, у, к) дает требуемые коэффициенты в виде вектора-строки С = [&, . . . , /?2, Pi, a]. Теперь оцениваемые величины для всех Х{ могут быть найдены как >> Y = polyval(C,x); Итак, с помощью polyf it легко могут быть найдены полиномы высоких порядков. Но это неприменимо в случае многих переменных, что обсуждается в § 5.2.3. Тем, кто получил удовольствие от использования метода \, будет приятно узнать, что он применим и здесь. Воспользовавшись подсказкой при формировании множества А, вы получите то же решение, что и при использовании polyf it >> A=[ones(size(x)) х х . " 2 ] ; °/, операция ." выполня'/, ется покомпонентно 6-4196
82
Глава 5. Представление данных
Замечание. Нелинейная взаимосвязь между множествами данных х и у не обязательно задается полиномом: она может выражаться и другими функциями, например как x
Y = foe-* + fae + a или Y = 02 sin х 4- 0\ cos x -г а.
5.2.2-1. Пример данных: опять томаты Приблизим данные из tomato.m квадратичной функцией, воспользовавшись командой polyf it (x, у, 2). Должны получиться коэффициенты [02 01 а] = [-0.0045 0.1776 4.1826] 2
и невязка R =0.217. В заключение используем polyfit(x, у, 3) для приближения кубической функцией. Коэффициенты будут равны [/33 /?2 01 а] = [0.0004 -0.0144 0.2451 4.1088], а невязка R2 —0.1905. Набрав toms, построим график линейного приближения, затем квадратичного без упорядочивания и, наконец, квадратичного с упорядочиванием. {Нажимайте <Enter> между графиками, чтобы прервать pause.) Ясно, что упорядочивание принципиально для вычерчивания графика квадратичного приближения! Загляните в М-файл toms .m, чтобы посмотреть, как это сделано с помощью сортировки из §5-1.1. Приведем его существенную1' часть: » [sx о] = sort(x); » sy = у(о); >> С = polyfit(sx,sy,2); >> Y = p o l y v a l ( C , s x ) ; >> p l o t ( s x , s y , ' * W ' , s x , Y , J w ' )
5.2.3. Приближение данных функциями многих переменных В обсуждавшихся выше методах предполагалось, что мы имеем некоторую «выходную» зависимую переменную у, которая является J ) Отсылаем читателя к гл.17, где рассматривается построение кривых с достаточным числом точек.
5.2. Приближение по методу наименьших квадратов
83
функцией одной «входной* независимой переменной х. В примере о томатах вес плодов у по предположению зависит лишь от количества удобрений х — мы не учитываем влияния солнечного освещения и влажности среди других возможных факторов! Но часто реалистичнее предположить, что «выходные» данные у зависят от нескольких независимых «входных» переменных; и здесь мы покажем, как поступать в этом случае в предположении, что соотношения являются линейнъши для всех входных переменных. Это предположение сделано лишь для того, чтобы упростить объяснения; многочленные соотношения высоких порядков могут быть рассмотрены подобным же образом. Итак, обозначая «входные» переменные через х{1*,... ,х^, попытаемся найти соотношение вида у = а + в1х{1) + • • • + , в р х { р \ в которое х' 1 ' входят лишь в степени 1. В примере, приведенном ниже, отклик (ответная реакция) у на лечение диабетиков по предположению зависит от трех факторов: а:'1' — возраст, х1-2' ~ вес и ж'3* = диета (преобразованных в числовые значения в соответствии с некоторой схемой). Мы часто имеем дело с дискретными множествами данных и поэтому предположим наличие р переменных («входных» факторов) и п значений («выходных» измерений) для этих переменных, которые представлены в виде векторов
x
У
=
[У\
(i)
.
rT(D
(2) Xv х
.
Г т (2) LC,
.
rjp) L 1
(P) л.
'
T
№
•••
(i)
...
(2) Xo
._.
(P) 2
...
Т
Уп]
W]T
X
(2)-|Т Xn
n
fp)lT 1
Как и выше для р ~ 1, предположим, что соотношение между у и независимыми переменными х^1' ,х^2',... ,х' р ' имеет вид
Рассмотрим случай р = 3 (или трех «входных» факторов). Надо найти
Глава 5. Представление данных
84
(т.е. частный случай вектора коэффициентов с), минимизирующий
где с = (a Pi ,3o
?У2
У =
Y =
Уп
х
,(3) \
"(2J
.(3)
{2)
Yi \ А
•1
—
Уп
V
Эта задача приближения по методу наименьших квадратов может быть записана в эквивалентной форме (удобной для MATLAB'a) Ас = у. Вы, конечно, узнали метод \! Эту же идею можно применить и в случае многих переменных к приближению полиномами более высоких порядков (или другими нелинейными функциями). Как уже отмечалось выше, команда p o l y f i t здесь уже не может помочь. В том виде, как она есть, p o l y f i t может быть применена лишь в случае одной переменной. В гл. 17 будет представлена команда polyf it2.m, применимая Б случае р = 2. т Чтобы найти вектор-столбец коэффициентов с — [а 8\ 62 рз] 3 и невязку В2 — Я , должны быть выполнены команды MATLAB'a (используя обозначения x l для х ^ , х2 для х ' 2 ' и т.д.) >> A = [ o n e s ( s i z e ( x l ) ) xl x2 х З ] ; » с=А\у; Y=A*c; r=y-Y; >> R2 = r ; * r 5.2.3.1. Пример данных: d i a b e t i c . m М-файл d i a b e t i c . m содержит данные и их краткое описание, так что наберите >> help diabetic >> diabetic Эти множества данных сохраняются как у, x l , х2, хЗ. Вы увидите, что коэффициенты равны с т = [36,9601 -0.1137 -0.2280 1.9577], a R2 = R2 = 567.6629.
Упражнения
85
Теперь можно заключить, что реакцию на лечение описывает следующая функция (т.е. решение по методу наименьших квадратов): У
=
У(х{1\х{2\/х(г})
=
36.9601-0.1137ж ( 1 ) -0.2280х< 2 Ч1.9577х ( 3 ) ,
где х^1) = возраст, х^ — вес и х^ = диета.
Упражнения 5.1
М-файл marks.m содержит отметки, полученные студентами инженерного профиля по курсу дифференциальных уравнений за контрольную работу и предшествовавшее ей домашнее задание. Если вы выполните М-файл, набрав marks, то получите дубликат отметок в виде матрицы m k d a t a . Выполнив >> >>
x=mkdata(:,1); y=mkdata(:,2);
мы выделим первый и второй столбцы матрицы данных и присвоим им имена х (отметки за контрольную) и у (отметки за домашнее задание) соответственно. Теперь сделайте следующее: (a) Вычислите по методу наименьших квадратов прямую (см. §5.2) У — rv 4- >3т и прямую А' — 7 + &УВ этой задаче нельзя утверждать, что одна переменная независимая, а другая зависимая, но разумно предположить наличие какой-то связи между ними. Если бы искомое сейчас соотношение между ними выполнялось точно (т.е. невязки по методу наименьших квадратов равнялись нулю), то обе прямые совпали бы. Найдите их уравнения и кратко опишите метод, использованный вами при этом. (b) Выведите данные в виде графика и наложите на него график двух прямых. Вычислите значение угла между ними 1 ). И опять, опишите метод, использованный вами при получении ответа. 1; Соотношение между множествами данных известно как корреляция. Здесь этот угол является показателем того, как коррелированы эти множества дан-
86
Глава 5- Представление данных Подсказка: вы можете воспользоваться формулой tan0i - t a n 0 2 tan(0! - 0 2 ) = -——-~ji —. v 1 + tan 0i tan 0 2
5.2
М-файл mannheim.m дает зависимость между некоторыми производственными показателями изготовления механизмов рулевого управления автомобилем с усилителем и стоимостью продукции. В результате выполнения mannheim мы получим данные в виде матрицы mdata размера 22 х 3. Обозначим первый столбец mdata через х, а второй — через у. Теперь попытайтесь выполнить следующее: (a) Сначала упорядочите данные по возрастанию х, обозначив результат через sx и sy. (b) Пусть у—стоимость продукции и х — число произведенных изделий. Найдите линейное приближение у = а + ,3х для этого множества данных. (c) Определите две новые независимые переменные хМ> и х- ) следующим образом (мы не приводим объяснения их практического смысла): м) _ Г х. х < 7, [ 7> ж > 7
(2) _ / 0. х < 7, [ х — 7, х > 7
для 7 = 3000. Во-первых, получите новые множества данных x l = x | : l ' 2 и х2 = х ' ' . Во-вторых, воспользуйтесь методом из § 5.2.3 для случая упорядоченных данных и р = 2, чтобы по методу наименьших квадратов вычислить приближение вида
и найдите для него невязку. Наконец, нарисуйте график нелинейного приближения, воспользовавшись командой p l o t ( s x , s y , ' * ' ,sx,Y), где Y, как обычно, содержит точки нелинейного приближения, как в § 5.2.3. Не кажется ли вам, что кривая приближает данные существенно лучше прямой? Назовите возможную (из реальной жизни) причину, почему приближение, использующее две прямые линии, намного лучше использующего одну. Подсказка: Что произойдет, как только количество выпущенных устройств превысит некоторое число? Кроме того, выполните h e l p mannheim. Заметьте, что х^ — min(7,а;) и х = з;' 1 ' + х^ для всех значений х.
5.3. Приложение
87
Дополнительно рассмотрите приближение вида
и вместе с ним
5.3. Приложение Здесь мы рассмотрим минимизацию невязки R2 подборкой а и в: (см. §5.2.1). Прежде чем продолжить, докажем известное неравенство Коши—Шварца. Теорема 5.1 {неравенство Коши—Шварца.) Для х, у 6 R." справедливо неравенство:
любых
п
.
(5.1)
Доказательство, (i) Достаточно рассмотреть лишь случай х ф О и у ф 0, так как иначе результат тривиален: 0 = 0. (ii) Более того, достаточно доказать, что п
Y^XjVj < ||x|j 2 ||v|| 2
(5.2)
i=i
для ненулевых векторов х, v € R n . Ибо, если это верно, мы можем построить v как Vj = sign(xj)sign(yj)yj для любого у 6 R71 и j = 1,... ,7i, так что (5.1) выполняется, (ш) Чтобы доказать (5.2), заметим, что для любого А € R
так что
j=i
Теперь, выбрав А = ||х|| 2 /|М}2, упростим это неравенство:
что и доказывает (5.2). Тем самым доказано и неравенство (5.1).
88
Глава 5. Представление данных
5.3.1.
Обоснование метода наименьших квадратов
Так как R2 квадратично зависит от а и 0, значение минимума можно найти, решая систему
д_ да
R2 = 0
- ^ R2 = 0.
и
Поэтому уравнения метода наименьших квадратов можно записать как
т.е.
Используя обычные матричные обозначения, с т — (а /3), \
(
Хх
/ 3/1 У2
\
А ~
\
у — \
\
\ Уп
мы можем написать (и определить) 2
т
Ф(с) = Я ( с ) = (у " -4с) (у - Ас). Тогда уравнения метода наименьших квадратов сведутся к ТТ
тт
А Ас = А у.
[5.3)
Чтобы решить эту линейную систему размера 2x2, мы должны сначала проверить, что
но это верно, если хотя бы два Xi не равны! Тогда мы можем легко
о.З. Приложение найти единственное решение с = (а ,3)т: п.
^2(xi Й
'
-
=
-x){yt
-у)
1
а — у — /Зж, где х ту средние множеств данных х и у соответственно. Чтобы убедиться, что найденное решение является минимумом, а не седловой точкой, надо вычислить все вторые производные (которые в квадратичном случае являются константами). Можно проверить, что
2
дЧ
""
п
2
д'2Ф
_
д'Ч
дФ
—. дад(3 ~ д,3да
' х.
Тогда из неравенства Коши-Шварца следует, что дискриминант отрицателен, так как
2 А
\дЗда)
\да2 ) \д32
0 и ^ ^ > 0. так как по крайней мере два х,- не равны (т.е. эти производные ну могут одновременно равняться нулю). Это доказывает, что экстремальная точка, действительно является минимумом. Альтернативное и более простое доказательство состоит в следующем. Рассмотрим следующий функционал для всех w — с 4- h 6 R 2 (здесь R 2 — пространство): $(w) = (у - Aw) T (y - Aw) = w T . 4 T . 4 w - 2y T .4w + y T y . Сначала проверим, что Ф(с + h) = Ф(с) + (Ah)rAh + 2 h T ( . 4 T A c - Ату). т
г
Тогда, предполагая, что А Ас — А у , будем иметь 2
Я (с + Ь) = Ф ( с + Ь) - Ф ( с ) + ||.4Ь||2
>
2
Ф(с)=Я (с).
Следовательно, решение уравнения (5.3) есть единственный минимум метода наименьших квадратов.
6
Вероятность и случайные числа
Изучение вероятностей и случайных или стохастических процессов всегда остается важной темой просто потому, что задачи реального мира содержат случайные отклонения. Такие отклонения приводят к возникновению неопределенных факторов, которые обычная математика не может описать даже приближенно. Вероятность события в классической теории вероятностей определяется как отношение частоты события к числу всех возможных исходов. Часто более удобно моделировать вероятность плотностью ее распределения как для дискретных, так и для непрерывных случайных систем. К счастью, во многих практических задачах вид функций плотностей вероятности, представляющих вероятностные распределения, бывает известен. В этой главе мы вводим элементарные вероятностные распределения и имитируем их, генерируя соответствующие случайные числа с помощью MATLAB'a.
6.1. Генерирование случайных чисел Функция MATLAB'a rand генерирует псевдослучайные числа из интервала (0, 1). Эти числа называются псевдослучайными потому, что они выглядят случайными последовательностями, но существует метод их воспроизводства! Последовательности генерируются детерминированным алгоритмом, но ему можно дать «затравку», которая позволит породить конкретную последовательность1'. Чтобы понять, как работает команда, выполним следующее: » rand У, Генерирует случайное число из (0,1) » randC 'seed' , 13) У. Устанавливает в качестве У, «затравки>> 13-е число 1 ' В основе алгоритма лежит мультипликативный конгруэнтный метод. Детали см. в приложении к этой главе.
6.1. Генерирование случайных чисел
91
» Ъ1 = r a n d ( 2 5 , l ) У, Случайный вектор-столбец из (0,1) >> rand( ' s e e d ' ,0) У, Устанавливает У, по умолчанию. >> А = rand(3,4) У, Случайная матрица размера 3x4 У. из (ОД) >> rand( ' s e e d ' , 13) У, Опять устанавливает в качестве У, 13-е число » Ъ2 - r a n d ( 2 5 , l ) У, Воспроизводит Ы ! Можно «усилить» случайность, выбирая начало последовательности «случайным образом*, например, связав seed с встроенными часами компьютера. Текущее время равно >>
time=round(clock) У, вместо round могут быть 7, c e i l или f l o o r
fix,
и этот вектор представляет time=[Fofl Месяц День Час Минута Секунда], так что мы можем использовать >> r a n d C s e e d ' , t i m e ( 6 ) ) '/.или rand( ' s e e d ' , t i m e ( 5 ) * t i m e ( 6 ) ) чтобы подсоединиться к ближайшей секунде, хотя, кажется, это не всегда работает: иногда лучше самому задать значение seed, предпочтительно нечетным числом. Хороший результат дают числа в диапазоне 10 000-20000 (или значение 0, присваиваемое по умолчанию). Простая MATLAB-функция rand порождает столбец из п равномерно распределенных на интервале (0, 1) чисел командой x=rand(n,l) или строку — командой x = r a n d ( l , n ) . Аналогично, rand(n) порождает случайную матрицу размера п х п, тогда как rand(m,n) дает т х n-матрицу с элементами из (0,1). Чтобы породить случайные числа из произвольного интервала (a,b), воспользуйтесь линейным преобразованием (х -> у), например, >> х = r a n d ( l , 3 0 ) ; >> а = 12; Ъ = 99; >> у = а + (Ъ-а) * х;
'/, 30 случайных чисел из интерУ. вала (0,1) '/, задаем границы интервала '/, 30 случайных чисел, из интер'/, вала (а,Ь)
Обратите внимание, что элементы вектора у теперь принадлежат интервалу (а, Ь).
92
Глава 6. Вероятность и случайные числа,
6.2. Случайные целые числа Функции MATLAB'a ceil, fix, floor и round, вместе с rand порождают случайные целые числа. Здесь ceil(x) есть наименьшее целое > х, floor(x)—это наибольшее целое < х и round(x) бли11 жайшее к х целое . Команда fix совпадает либо с ceil, либо с floor в зависимости от знака числа, поскольку она округляет числа до целого, ближайшего к нулю. В качестве примера проверьте следующее: ceil(1.2)=2, ceil(3)=3, ceil С 1.9)=2, ceil С 1.5)=2, fix(1.9)=l, fix(2)=2, fix(-1.6)=-l, fix(-2)=-2, floor(1.2)=l, floor(3)=3, floor(1.9)=l, floor(1.5)=l, round(1.2)=l, round(3)=3, round(l.9)=2,round(-l.5)=-2. Можно получить столбец из п чисел, принимающих с равной вероятностью целые значения 0 , 1 . . . . ,к (т.е. целые значения из замкнутого интервала [О, А;]), выполнив >>
х = rand(n,l);
floorС(k+1)*х)
Но мы можем получить и столбец из п чисел, принимающих с равной вероятностью целые значения 1,... ,к (т.е. целые значения из замкнутого интервала [1.&]), выполнив »
ceil(k*x)
Команда round используется немного по-другому. Например. »
round(10*х)
порождает п чисел, которые принимают значения 0 , 1 , . . . . 10 с неравными вероятностями. (Вы понимаете, почему? Сравните значения х, округленные до 0, со значениями, округленными до 1, и рассмотрите также результат round С 9.99 х + 0.5 ).) Если нужно произвести случайную перестановку из к целых чисел 1,2,... , к, следует воспользоваться командой randperm. Например, переставим строки матрицы случайным образом: >> г = randperm(9) >> А = ceilC rand(9)*5 ) У, генерирует матрицу с 7, элементами из (1,5) >> В = А(г,:) '/ переставляет строки по "г" 1
Для полуцелых .г берется наибольшее по модулю. — Прим. перев.
6.2. Случайные целые числа
93
Вот простой способ получить вектор-столбец из 0 и 1, где U появляется с «вероятностью | » . Это значит, что для очень длинного вектора треть его элементов скорее всего будет равна 0, а остальные — 1. Наберите » r a n d ( ' s e e d ) ,0) ; x=rand(100,1); У. Внимание: х из(ОД) >> с=х>1/3 Здесь вторая строка предписывает выдать 0 для тех Г, где х(г) «не проходит» проверку условия х > | и 1, если х(г) «проходит» ее. Предполагая, что элементы х равномерно распределены на [0,1], вы получите 0s приблизительно в \ случаев. Можете проверить это. выполнив sum(c)/100 и сравнив ответ с |. Однако можно ожидать большего, чем с=х>1/3, выполнив >> r a n d C ' s e e d ' , 0 ) ; x=rand(100,1) ; % Внимание: х из (0,1) » c=round(x + 1/6) Это связано с тем. что после сдвига на ~t только числа из х, меньшие тг — | = ~, округляются до нуля! Можете нарисовать картинку, иллюстрирующую эту идею? Подобным образом вы можете поступить с любой вероятностью р. Можете предложить формулу для величины сдвига?1* П р и м е р . Взяв seed=121, получим две случайные целочисленные матрицы размера 2x6 с элементами из [1,4] и [0,3] соответственно, после выполнения » randOseed' ,121) ; >> у = ceilC 4*x ) >> z =floor( 4*x )
x = randC2,6) У, Случай CD с [1 ,4] У, Случай (2) с [0 ,3]
Результатом будут У= z=
1 3 0 2
2 3 1 2
2 4 1 3
1 2 0 1
3 1 2 0
2 1
г
0
^ Оба эти способа практически всегда дают один и тот же ответ (здесь это 0.6900). — Прим перев.
94
Глава 6. Вероятность и случайные числа,
6.3. Моделирование равномерных распределений Мы обсудили, как функция MATLAB'a rand моделирует числа, с l равномерным распределением U(0,l) \ Кроме того, отмечалось, что можно использовать случайные числа, чтобы промоделировать равномерное распределение в любом интервале, сочетая 11(0.1) с линейным преобразованием. Для вашего удобства мы создали М-файл с названием unirand.m. Пример. Чтобы смоделировать 5000 бросаний трех костей, выполним » rand ('seed', 19)
'/, Установим 'seed' 7, равным 19 >> z=unirand(0.5,6.499,5000,3) ;*/, Случайные числа из 7. (0.5, 6.499) >> г = round(z) ; 7. Случайные числа из [1,6] >> [х y]=hist(r,6) '/, Подсчитываем число 7, выпадений в матрице х
6.4. Моделирование нормальных распределений Чтобы получить столбец из 1000 случайных чисел с нормальным распределением, у которого среднее 0 и стандартное отклонение 1, наберем »
randnC'seed',12);
x=randn(1000);
где параметр seed схож; по смыслу с используемым в rand, но учитывает особенности randn! Снова используя линейное преобразование, чтобы получить числа со средним m и стандартным отклонением s, наберем >> у = m + s*x; Для вашего удобства мы создали М-файл с названием normrand.m. Пример. Чтобы смоделировать рост жителей в двух различных регионах, в обоих случаях со средним m — 3 и стандартным отклонением s = 5, возьмем выборки по 2000 человек в каждом из регионов и выполним >> randnf 'seed', 11) г
7. Установим 'seed' равным 11
) См. приложение к этой главе, где описываются равномерные распределения.
6.5. Моделирование экспоненциальных распределений
95
» у = normrand(3,5,2000,2);'/, N(3,5) с mean=3 & Std=5 >> h i s t Су) 7, График смоделированных 7. данных у или без normrand.m >> r a n d n ( ' s e e d ' , 11) » х = randn(2000,2) ; >> у = 3 + 5*х; >> h i s t (у)
.
'/, '/, 7. 7. 7.
Установим ' s e e d ' равным 11 N(0,1) с mean=0 к Std=l Преобразование График смоделированных данных у
и вы увидите, что mean(x) = [0.0318 - 0.0346], mean(y) = [3.1591 2.8270] и std(y) = [4.9989 5.0467]. И опять, как и с rand, получим случайные целые числа, сочетая randn с любой из функций c e i l , fix, f l o o r и round. Например, чтобы получить семь столбцов из девяти целых чисел с нормальным распределением, у которого среднее т = 3 и стандартное отклонение s — 4, наберите » nl = 9; п2 = 7; х = r a n d n ( n l , n 2 ) ; m=3; s=4; >> у = round(m + s*x); Замечание. Под именами rand и randn известны два различных распределения. По умолчанию rand вырабатывает равномерное распределение. Однако команды r a n d ( ' n o r m a l ' ) и r a n d ( ' u n i f o r m ' ) заставят rand переключиться от одного распределения к другому! Мы не советуем этим пользоваться, так как легко потерять след этих переключений, если, конечно, не делать таких установок перед каждым использованием rand!
6.5. Моделирование экспоненциальных р аспр е де л ений Так как экспоненциальное распределение связано с равномерным 1 ', его легко промоделировать, используя генератор случайных чисел MATLAB'a rand. Чтобы промоделировать экспоненциальное распределение, у которого и среднее, и стандартное отклонение равны L мы можем использовать следующее соотношение:
См. приложение к этой главе.
96
Глава б. Вероятность и случайные числя
предполагая, что х имеет равномерное распределение U(0.1). Для вашего удобства мы создали М-файл exprand.m, порождающий это распределение. Для иллюстрации мы можем промоделировать и сравнить выборки п — 20 000 чисел, имеющих • равномерное распределение на (0,2.4) со средним m — 1.2; • нормальное распределение со средним m — 1.2 и стандартным отклонением s = m — 1.2; • экспоненциальное распределение со средним i = 1.2:1' >> randC' seed 1 ,0) ; n=20000;
7, Восстановить значение 7. ' s e e d ' >> m=1.2; s=1.2; '/, Среднее и стандартное 7, отклонение >> х = i m i r a n d ( 0 , 2 . 4 , n , l ) ; '/, Равномерное на (0,2.4) >> randnC' seed 5 ,0) ; '/, Восстановить значение '/, ' s e e d ' >> у = normrand(m,s,п,1); '/, Нормальное (m,s)=(l • 2,1.2) >> rand С'seed',0) ; У, Восстановить значение У, ' seed' >> z = exprand(m, n , l ) ; У, Экспоненц. (среднее т) » subplot(131) ; h i s t ( x , 9 0 ) У, График х » subplot(132) ; h i s t ( y , 2 0 ) У. График у >> subplot(133) ; h i s t ( z , 4 0 ) '/, График г ЭТОТ пример можно реализовать через М-файл сбехр.т. Результаты приведены на рис. 6.1, где последний график показывает экспоненциальное распределение. У него и среднее, и стандартное отклонения оба равны t — m, и вы можете легко проверить с помощью команд MATLAB'a mean и std, что для z эти две величины действительно близки. Как обсуждается в §6.6, на практике времена между наступлениями событий имеют экспоненциальное распределение. Например, пусть времена наступления пяти событий заданы в виде агг — [1.3 2.4 5.1 6 8.3]. Тогда интервалы между событиями будут i n t _ a r r — [1.3 1.1 2.7 0.9 2.3]. считая от t = 0. Таким образом, молено моделировать интервалы между наступлениями событий с помощью exprand.m, но тогда как же вычислять времена наступления событий? Каждый момент наступления 1 > Для версий старше 4.0 следует писать s u b p l o t ( 3 , 1 , 1 ) , т.е. разделять аргументы запятыми. — Прим перев.
6.5. Моделирование экспоненциальных распределений 200
97
1
100
0.5 —i
4000
1
1 1—
1.5 -i
2 1
1
2000
-4
-3
-2
0
1
2
-1
3
4
5
6
7
10
Рис. 6.1. Пример трех вероятностных распределений.
события есть кумулятивная (накопленная) сумма времен между событиями: для заданного выше int_arr найдем агг как arr(l) arr(2) arr(3) arr(4) arr(5)
= = = = =
int_arr(l) int_arr(l) int_arr(l) int_arr(l) int_arr(l)
= 1.3; + int_arr(2) = 2.4; + int_arr(2) + int_arr(3) = 5.1; + . . . + int_arr(4) = 6; + . . . + int_arr(5) = 8.3.
В MATLAB'e команда вычисления кумулятивной суммы есть просто >> t = cumsum(z) ; Для приведенного выше примера на рис. 6.1 кумулятивная сумма для z может быть записана как к tk = V 2 i , 7-4196
к = 1,2,--- ,20000.
98
Глала 6. Вероятность и случайные числа
Здесь t ( l ) = 0.2966 и t{20000) = 24036.2043. П р и м е р , Вызывают беспокойство очереди в банках к кассовым автоматам (банкоматам), и нас попросили промоделировать очереди в часы пик. Из компьютерных записей известно, что (в среднем) бывает приблизительно 131 клиентов между 9 часами утра и полуднем. Чтобы смоделировать приход первых 50 клиентов, сначала определим среднее I — у|^ поскольку среднее время между приходом клиентов равно ™ минут. Следовательно, выполним » m = 180 / 131; rand('seed',0); >> z = exprand(m,50,1) ; h.ist(z) Так как z есть время между приходами, то время приходов есть просто t >> t=cumsum(z) причем t(l) = 0.3396 и £(50) = 69.3055 минут.
Упражнения 6.1
По оценкам розничного торговца электротоварами в течение недели перед Рождеством электронные игры приобретают в среднем 140 покупателей в день с интервалами между покупками, распределенными по экспоненциальному закону. (Торговля происходит с 9 часов утра до 5 вечера.) В среднем | покупателей платят наличными, а остальные пользуются кредитными карточками; в 50% случаев покупают Nintendo (Super Mario) и в 50% покупают Sega (Sonic the Hedgehog). Требуется промоделировать первые 30 покупок после открытия в предположении, что каждый посетитель делает покупку. (a) Определите времена между приходами и времена прихода первых 30 клиентов, в течение дня. Найдите среднее и стандартное отклонения времен между приходами. (b) Выведите таблицу первых 30 посещений в виде Время посещения, в минутах (один десятичный разряд после плавающей точки), Способ оплаты (наличные обозначим как + 1, кредитной карточкой как —1) и Купленный товар (Nintendo как +1 и Sega как - 1 ) .
Упражнения
99
Подсказка. • Ваш ответ на вопрос (Ь) будет иметь три столбца (каждый длины 30): времена прихода. выбор оплаты наличными или кредитной карточкой и покупка Nintendo или Sega. • Загляните в § 6.2. чюбы вспомнить, как получить числа, принимающие значения 0 или 1 с вероятностями | , | или каждое из них с вероятностью | . Как вы преобразуете этот вектор из 0 и I в вектор из —1 и +1? • MATLAB не может напечатать разные столбцы одной матрицы в разных форматах; они все должны быть целыми, либо все десятичными дробями. Чтобы избавиться от этого, вам нужно воспользоваться командами f p r i n t f или s p r i n t f . Например, сделайте так >> а = p i , Ъ = 35 Л с = 15 » с_1 = [ а Ъ с ] » f p r i n t f ( ' с _ 2 = '/.5.3f '/.5d f/,d\n' , a , b , c ) » с„3 = s p r i n t f (''/,5.3f '/.5d '/,d\nJ , a , b , c ) где "т?.5.3Г означает печать вещественного числа пятью символами с тремя десятичными цифрами после плавающей точки, L%5d: означает печать целого из пяти цифр, тогда как 1%сГ выводит принятое по умолчанию число цифр. Чтобы напечатать Время посещения, вам нужен формат '%6.1Г. 0.2
Установлено, что в среднем 15 поездов в час прибывают на ливерпульскую станцию Лайм Стрит с временами между прибытиями, имеющими экспоненциальное распределение. К тому же известно, что 75% составов являются небольшими местными дизельными поездами, число пассажиров в которых равномерно распределено на [0,80]. Остальные 25% являются междугородными поездами, число пассажиров в которых предполагается нормально распределенным со средним 90 и стандартным отклонением 20. (a) Постройте 15 х 5-матрицу, содержащую типы (0 — междугородный, 1 = дизельный) первых 15 поездов за 5 дней. (Посмотрите опять §6.2, где описано, как получить столбеи чисел, принимающих значение 0 с вероятностью | и 1 с вероятностью jj.) (b) Используйте данные распределения при оценке числа пас-
100
Глава 6. Вероятность и случайные числа сажиров на 15 дизельных поездах и 15 междугородных в течении 5 дней. (Таким образом, вашим ответом будут две матрицы, каждая размера 15 х 5. одна матрица для каждого типа поездов.) (c) Соедините (а) и (Ь), чтобы оцепить общее число пассажиров на первых 15 поездах, прибывающих на Лайм Стрит в течение 5 дней. (d) Определите времена прибытия первых 15 поездов в течение 5 дней и воспользуйтесь этой информацией и заданием (с), чтобы оценить общее число пассажиров, прибывающих в первые полчаса каждый день. (e) Постройте зависимости общего числа прибывших пассажиров как функции от времени прибытия для 5 дней на одном и том же графике. Подсказка. Если времена прибытии записаны в 15 х 5-матрипе агг. а текущее число всех прибывших пассажиров находится в 15 х 5-матрице cumpass, то p l o t ( a r r , c u m p a s s ) нарисует все 5 графиков вместе. Сможете ли вы различить кривые, используя help p l o t или a r r (15, :) и cumpass(15,:)?
6.6. Приложение 6.6.1. Генерирование случайных чисел Известным подходом к генерированию случайных чисел является так называемый мультипликативный конгруэнтный метод. Ои использует формулу Uj+i — Kui(Mod M),
г — 1, 2, 3 , . . . ,
где «.Mod M» означает, что мы вычитаем столько кратных М . сколько возможно, и берем остаток в качестве ответа. Для любого i значение щ есть такое случайное число, что 0 < iti < М. Следовательно, т соответствует случайному числу Т{ = щ(М £ [0,1). Чтобы воспользоваться этим методом, когда подходящие константы К, М (обычно целые) уже выбраны, нам нужно только подставить начальное значение и\. которое обычно называется «затравкой» ('seed'). Обычно К приблизительно равно величине квадратного корня из М, но М, хотя и довольно большое, не должно быть кратным К.
G.6. Приложение
101
С помощью MATLAB'a очередной шаг метода может быть реалпзонан как >> unew - rem (К * uold, M ) >> rand^num = unew / М Задав и \ = seed . можно выполнить п шагов конгруэнтного .метода. следующим образом: >> for j = 1:п >> seed = rem (К * seed + shift, >> rand_num = seed / M >> end
M )
где s h i f t в стандартном методе равен нулю, но .может быть и не i улсмы.м. Ради "заинтересованного читателя мы создали М-файл randme .m, реализующий этот метод. Выполните randme. чтобы увидеть, что (.и делает. Для примера мы использовали a-randme(4) с seed=2 п shift=O, взяв Л' == 32 и Л/ = 5, чтобы получить следующие четыре случайных числа «домашнего изготовления»: K*seed K*seed K*seed K*seed
= 64, =128, = 96, = 32,
seed seed seed seed
= 4, = 3, = 1, = 2,
rand rand rand rand
= 0.8 = 0.6 =0.2 = 0.4
Генератор случайных чисел rand, принятый в МАТЪАВ'е. также использует прицеленный выше метод. Чтобы узнать текущее значение seed, выполните s = rand С' s e e d ' ) , а команда rand С ' s e e d ' ,45) изменит значение seed на 45. Следовательно, чтобы проследить последовательность изменений seed в MATLAB'е. наберите >> >> >> >> » >> >>
rand( 'seed' ,0) ; У, seed = значение по умолчанию s = rand('seed') У, В s засылается это значение rand(' seed' , 1) ; 7, seed = 1 s = rand(' seed' ) ; '/, Проверяется, что это так fprintf ('MATLAB Seed = 7.12.Of (initially set)\n',s) for j = 1:5, r=rand; s=rand('seed'); f p r i n t f ('MATLAB Seed = '/„12.Of r a n d = */,d',s , r ) ;end
Одно из руководств по MATLABV, кажется, советует взять К = 7° п М — 2'i] - 1, но, экспериментируя с randme.m и этими двумя параметрами, можно прийти к заключению, что в r a n d используется
102 Глава 6. Вероятность и случайные числя неопубликованное целое знамение shift! Для наших целей нам достаточно знать лишь линь основной алгоритм алгоритм1^1' seed = (A'seed-i- shift) (Mod M). 6.6.2. Функции распределений Распределение псевдослучайных чисел является непрерывным (с машинной точностью) и равномерным (равно вероятным в интервале (0,1)). Для любого распределения случайных чисел вероятность выбора, частного значения определяется функцией плотности вероятностей (фпв) /. так что если мы обозначим через Л' случайную переменную, то для любых значений xj и х->, таких, что Т\ < л'2, имеем V(X! < X < Х2) = I ' f(t)dt. J .ci
Другим способом распределение можно определить в терминах функции распределения (фр) F, i;лс F{x)=V(X0
где V обозначает вероятность и А постоянно. Это распределение определяется через фпв Z)
^
=
\0,
г ho
+
h
h)}
П(М
+
/,)}
h0
Конечно, I = 1/А, как и ожидалось.
= 1 3 1 / 1 8 0
= Л.
7
Дифференциальные и разностные уравнения
В этой главе мы покажем, как можно использовать MATLAB при исследовании и численном решении дифференциальных уравнений различных простых типов.
7.1. Обыкновенные дифференциальные уравнения (ОДУ) Вы, вероятно, встречались с дифференциальным уравнением dx - = -А*, которое легко решить, записав в виде
(7.1)
dx . , — = -Xdt х и проинтегрировав обе части. Это дает lnx = — Xt + с, т. е. x{t) = xoe-xt,
где
х0 = х(0).
(7.2)
Так описывается, например, радиоактивный распад (с положительным Л) или экспоненциальный рост (с отрицательным Л). Часто используется обозначение дифференцирования точкой, когда независимой переменной является время (, как в данном случае. Тогда уравнение (7.1) записывается в компактной форме х — -Хх.
Другим интересным примером, решить который немного труднее, служит логистическое уравнение
)
(7.3)
106
Глава 7. Дифференциальные и разностные уравнении
22
04
0.6
08
1
12
14
1.6
1.8
2
Рис- 7.1. График ноля направлений для ОДУ dx/dt — —x. Кривая является частный численным решением. описывающее, например, скорость распространения инфекции в популяции. Его решением будет xit) =
- ( 1 -
(7.4)
MATLAB можно испо;п>:зовя гь при решении этого и других, более сложных ОДУ с помощью процедуры численного интегрирования. Ее графические возможности позволяют исследовать поведение решений визуально. М-файл f odesol .m предназначен для демонстрации сказанного. Как обычно, команда >> help fodesol выдает некоторую информацию по использованию этого файла. Можно считать, что дифференциальное уравнение первого порядка dx/dt — /(ж, t) определяет некую «структуру» — поле направлений--на плоскости t.x, подобную структуре деревянной доски или структуре силовых линий поля намагниченного стержня. В качестве примера см. рис. 7.1. Направление поля в точке (t.x) определяется функцией f(t,x), которая, будучи равной dx/dt, даст тангенс угла между направ-
7.1. Обыкновенные дифференциальные уравнении (ОДУ)
107
лением поля и осью t, т.е. угловой коэффициент. Из дифференциального уравнения следует, что решение, пройдя через точку (t,x), движется далее в направлении, определенном f(t,x). Кривые решении следуют в направлении структуры. Решение дифференциального уравнения есть процесс вычерчивания линий, следующих этим направлениям в каждой точке их траектории. Каждому выбору начального условия (х = XQ при t ~ to) соответствует своя траектория (j.e. решение). Вы можете1 рассмотреть приведенные выше примеры (7.1) и (7.3) с: помощью f odesol. Вначале набери1] с » f o d e s o K ' f n x t ' ,0,2.5,-3,3) где fnxt.m есть простой пример М-файла, содержащего правую часть ОДУ. рассматриваемого нами (заранее подготовленного для вас). В нашем случае f(t,x) ~- —х. т.е. это правая часть уравнения (7.1) при А — 1. Четыре числа, передаваемые программе, £ТщП, imax- xmin и хтпх- соответственно задаю! границы изменения переменных на графике. Сначала fodesol рисует соответствующую структурную диаграмму, или «поле направлений», на которой вы сможете увидеть поведение решения. Потом вычерчивается кривая решения, начинающаяся в точке (fn,.xo). которую вы должны задать. Программа напомнит вам об этом в нужный момент. Если вы захотите построить еще одну кривую, исходящую из другой точки, ответьте программе символом у и задайте новую начальную точку. Когда вы освоитесь со всем этим, создайте другую версию fnxt .m, скажем myfnxt.m. которая содержит правую часть логистического уравнения (7.3), где К = г = 1. Конечно вы можете использовать fodesol при исследовании любого уравнения первого порядка безотносительно к первоначальному выбору имен независимой и зависимой переменных (у нас t и х соответственно). Рассмотрите решение x(t) для XQ — x(t0) < 1 и для z-0 > 1. Другое ОДУ, которое интересно рассмотреть, это
например, в области - 3 < t < 4,
- 3 < х < 4.
108
Глава 7. Дифференциальные и разностные уравнения
Чтобы получить решения этой задачи, вам придется сделать другую версию fnxt.m.
7.2. Системы дифференциальных уравнений MATLAB может численно решать и системы из связанных между собой дифференииальных уравнений первого порядка. Например, уравнения
dx/dt = f(x.y).
dyfdt — д{х,у)
(7-6)
первого порядка и связаны между собой, поскольку, скажем, производная функции x(t) зависит как от у, так и от х. Кроме того, небольшая особенность заключается в том. что правая часть не зависит явно от t. Такие дифференциальные уравнения поэтому называются автпопомнъши. Эти уравнения широко используются при описании взаимодействия конкурирующих видов, как показано ниже на примере уравнения (7-7). Но сначала немного теории.
7.2.1. Фазовая плоскость Система (7.6) описывает движение точки с координатами (з\;/) в ху~плоскости, которая в этом случае называется фазовой плоскостью. В качестве примера взгляните на рис. 7.2. По мере изменения времени точка (х,у) будет перемещаться, пока, конечно, не будут выполняться оба равенства f(x.y) = 0 и д(х,у) = 0. Если же это произойдет, то точка (х,у) не будет менять положения. Такие точки называются неподвижными точками системы дифференциальных уравнений. Таким образом, неподвижные точки можно найти, решая уравнения /(х,у) — 0 и д(х,у) = 0. Если это нелегко сделать, то эксперименты с различными начальными значениями х и у могут указать, где расположены возможные неподвижные точки. Вблизи неподвижной точки имеется несколько возможностей(i) Траектория решения может постоянно все больше приближаться к неподвижной точке. Такая точка называется устойчивой. (и) Траектория может сначала приближаться к точке, а затем удаляться от нее. В этом случае точка называется седловой и является неустойчивой. (iii) Траектория может постоянно все больше удаляться от неподвижной точки. Такая точка называется неустойчивой.
7.2. Системы дифференциальных уравнений
о
1
9
109
10
Рис. 7.2. Фазовая плоскость системы уравнений (7.7) для некоторых значений параметров. Кривые являются частными численными решениями. (iv) Траектория может просто двигаться вокруг точки по некоторой орбите. Попробуйте распознать эти виды поведения в следующем примере.
7.2.2. Конкурирующие виды М-файл species.m моделирует поведение двух разных животных видов, которые борются за один и morn же источник пищи. Оно списывается уравнениями х = х(а ~Ьх - су),
у = y(d- ex ~ fy),
(7.7)
где х и у--численность представителей двух различных видов. Параметры а, Ь,с и d определяют поведение системы. Для некоторых значений вы увидите, что один вид всегда уничтожает другой. Для других значений виды могут сосуществовать, хотя дальнейшее развитие побеждающего вида зависит от исходных размеров ПОПУЛЯЦИЙ и т.д.
110
Глава 7. Дифференциальные и разностные уравнения
Четыре типа поведения неподвижной точки, описанные выше, иллюстрируются следующими наборами параметров: (i) о = 24. b = 6. г = 8, (1 = 2-1, с = 8. / = 6, (ii) a = 24. & = 4, г = 6.
(7.12)
Это уравнение второго порядка, поскольку оно содержит две разности хп+2 ~ %n+i и x, 1+ i - хп. (Попробуйте выразить (7.12) через них). Будем искать решение, подобное (7.11) xn = zn.
(7.13)
Упражнения
113
Подстановкой в (7.12) получаем Z
-г О.?
—7)4.
— U
ИЛИ
г " ( ; 2 - 5 г + 6) = 0. Пренебрегая тривиальным решением z = 0, решаем квадратное уравнение и находим z=2
пли
г — 3.
Так мы получаем два решения вида (7.13). которые надо объединит}) обычным образом, что дает П
хп = А2
+ В3'г
как общее решение. Обратите внимание, что здесь имеются две. произвольные константы, так как это разностное уравнение второго порядка. Как и для дифференциальных уравнений, аналитическое решение, подобное только что полученному, не всегда легко найти. Однако, часто достаточно просто взять компьютер (например, снабженный M A T L A B ' O M ) , чтобы выполнит], последовательные вычисления, прямо предписанные этими уравнениями. М-файл diffeqn.m дает возможность решить приведенный выше пример следующим образом. Вначале наберите >> diffeqn и следуйте его указаниям. Вам нужно заглянуть внутрь этого М-файл а и dfeqfn.m, чтобы понять, как использовать или изменить их, чтобы решать другие подобные однородные уравнения или даже общие неоднородные уравнения. Попробуйте различные начальные условия, включая [.i'o,xi] = [1.0,2.0], [1.0,1.8] и т.д.
Упражнения 7.1
Воспользуйтесь f odesol .m и модифицированной версией myfunxt.m, чтобы исследовать решение следующего уравнения: 7.14) В частности: (а) Найдите х(2), задав начальное условие з;(0) = 1.5.
-4196
114
7.2
7.3
Глава 7. Дифференциальные и разностные уравнения (b) Найдите х(3), задан начальное условие х(0) = 0.055. (c) Кратко опишите общее поведение всех различных типов решений, изучив «поле направлений» пли «структурную диаграмму». В примере о конкурирующих видах в § 7.2.2 найдите такие случаи: (a) неподвижную точку, окруженную орбитой; (b) устойчивую неподвижную точку: (c) седловую точку. В каждом случае сделайте грубый набросок поведения траекторий (решений) в окрестности неподвижной точки, т.е. показывающий направление движения траекторий. Измените М-файлы vderpol .m и vdplfn.m. чтобы изучить (неавтономное) дифференциальное уравнение второго порядка
где а — некоторый параметр. (Оно «неавтономно», потому что содержит член, который является янной функцией t, по уравнение можно решить тем же способом.) Для случая а -•• 3 найдите значение к:(4) и сделайте грубый набросок w(t) для каждого решения, удовлетворяющего условиям: (a) и;(0) = 0 , й'(0) = 1: (b) w(0) = - 1 : ?/:(()) = 1: (c) ш(0) - 0 . w(0) = - 1 .
7.4
Предложите начальные условия, для которых решение w(t) монотонно возрастает. Воспользуйтесь diffeqn.m, чтобы решить разностное уравнение 6х?1+2 — :г,-, _|-1 + 2хп = п2 + Зл + 2 при условии, что .то = 1 и ху — 2. и, в частности, найдите xiQ. Прооерьтк ваше решение, сравнив левую и правую части уравнения при п ~ 8.
Часть II
Исследования 8.
Магические квадраты 117 8.1. Введение 118 8.2. Магические квадраты размера 3 х 3 118 8.3. Магические квадраты размера 4 x 4 121 8.4. Магические квадраты размера 5 x 5 (факультативно) 123 9. НОД, псевдопростые числа и тест Миллера 124 A. НОЛ случайных пар п троек чисел 124 B. Псевдопростые числа и тест Миллера 128 10. Графики: кривые и огибающие 133 A. Лепестки розы и эпициклоиды 133 B. Огибающие 136 C. Кривые постоянной ширины 139 11. Ломаные и кривые наискорейшего спуска 147 A. Спирографы и ломаные 147 B. Кривые наискорейшего спуска 156 12. Последовательности вещественных чисел 166 12.1. Последовательности Мёбиуса 166 12.2. Паутинообразные диаграммы 168 12.3. Функции Мёбиуса, и степени матриц 171 A. Исследование последовательностей Мёбиуса 174 B. Притягивающие циклы 177 C. Квадратичные и экспоненциальные последовательности: неподвижные точки 181 13. Итерации Ньютона-Рафсона и фракталы 186 13.1. Введение 186 13.2. Уравнение z 2 + 1 ^ 0 187 13.3. Общие квадратные уравнения 188 13.4. Кубическое уравнение z 3 — z = 0 191
116 14. Перестановки 194 A. Разложение на циклы 194 B. Тасование карт 200 14.1. Введение 201 14.2. Тасования miyipi. и поверхпе!'-J-footnoteiiiark 20.3 14.3. Циклы 209 14.4. Грубые гасоиания внахлест (быстрые тасования) 209 14.5. Приложение 213 15. Итерационные методы решения нелинейных уравнений 214 15.1. ID: Метод 1 — метод Ньютона— Рафсопа 215 15.2. ID: Метод 2 •• метод Гаусса—-Якоби 216 15.3. ID: Аналгп сходимости 217 15.4. 2D: Итерации для нелинейных систем 221 15.5. 2D: Графики линии уровни и отображение сходимости 225 Упражнения 229 16. Матрицы и решение линейных систем 233 16.1. Подсчет числа операций 234 16.2. Плотные линейные системы 235 1G.3. Алгоритм итерационного уточнения 239 16.4. Анализ возмущений системы _4х = b 240 16.5. Разреженные матрицы, упорядочении графа и перестановки 241 Упражнения 245 17. Интерполяция и приближение функций 249 17.1. Ш: Введение 250 17.2. ID-пример: М-файл intdemol.m 252 17.3. ID-подгонка данных 252 17.4. Насколько точно мое приближение? 256 17.5. Введение в многомерные приближения 257 17.6. 2D М-файл intdemo2.m 258 17.7. Графики линий уровня, ЗВ-графики и графики сечений 258 17.8. Глобальный '\'-метод 263 17.9. Кусочный метод 264 17.10. Сравнение приближений 264 Упражнения 266 18. Обыкновенные дифференциальные уравнения 270 18.1. Стратегия 270 Упражнения 271
8 Магические квадраты
Цель работы Магические квадраты известны сотни лет. Эта работа, посвящена исследованию их свойств с точки зрения матричной алгебры, г. е. с помощью сложения и умножения магрип. Она не касается теоретико-числовой залами нахождения магических квадратов, содержащих последовательные целые числа. Работа самодостаточна. по может оказав ься интересным узнать, что некоторые математические результаты вышли ш статьи [16]. В статье содержатся и другие результаты па эту же тему.
Используемые математические понятия Используются матричное умножение, приведение матриц к верхней треугольной форме и методы решения линейных уравнений. Например, мы считаем 3 х 3-'Матрицу точкой девяти мерного пространства R 9 и рассматриваем подпространства из R 9 . (Нет необходимости знать определение абстрактного векторного пространства: все пространства содержатся в некотором R".) Используются понятия линейной независимости и базиса. Необходимо также знать, что в подпространстве А" размерности г в R" множество г вектоuoii из X, которые линейно независимы, автоматически порождают X и тем самым образуют в нем базис. Необходимо знать определения собственных значений и собственных векторов и уметь пользоваться ими в простейших действиях, включая возведение матриц в степень.
Используемые возможности MATLAB'a В работе обсуждаются матрицы, так что вам потребуются приемы, ^писанные в гл. 2. По ходу работы встретится М-файл с несколькими циклами :for' и операторами 'if', так что вы должны быть знакомы п с этими понятиями (см. гл. 3). Обратите внимание, что окончание работы в некотором смысле «не зафиксировано»: студенты, работающие быстро, захотят проработать и заключительный раз-
118
Глава 8. Мпгическио квадраты
дел о магических квадратах 5 x 5 - который можно рассматривать как нсобяча гельный.
8.1. Введение Магический квадрат п х п есть п х //-матрица вещественных чисел со следующим свойством: Просуммировав все элементы любой строки, любого столбца или любой из двух «главных» Ova го нал ей матрицы, мы получим одно и то 'лее. число, скалсем, г. которое называется магической константой. Например, магический квадрат
обладает этим свойством с г = 6. Две главные диагонали в этом случае дают 3 + 2 + 1 (от верхнего левого элемента к правому нижнему) и 2 + 2 + 2 (от верхнего правого к левому нижнему). Существует много алгоритмов получения магических квадратов с дополнительным свойством, что элементы матрицы являются целыми числами 1.2 ,/г в некотором порядке. Например, для 71 — 3 .
(8.1) Функция MATLAB'a. magic делает это (попробуйте набрать magic (3)). Здесь мы не будем детально анализировать такие алгоритмы, з вместо этого рассмотрим алгебру, лежащую Б основе магических квадратов, используя ваши знания о матрицах и решении систем линейных уравнений.
8.2. М а г и ч е с к и е к в а д р а т ы р а з м е р а 3 x 3 (i) Рассмотрим общую 3 х 3-матрицу / .-4 = {a,j) — \
аи
tt,2
ai3
«2i
022
^23
«31
"32
«33
\
/
8.2.
Магические
размера
3x3
119
Таким образом, в ней девять элементов йц я^з- Объясните, почему, выписав условия для всех строк, всех столбцов и двух главных диагоналей с одной и той же суммой г. мы получим систем)" линейных уравнений AIv — 0. где М есть 8 х 10-матрлна - 1 1 1 1 0
0
0
0
0
-10 0 0 1 1 1 0 О -10 0 0 0 0 0 1 1 -110 0 10 0 10 -] 0 1 0 0 1 0 0 1 -10 0 1 0 0 1 0 0 -110 0 0 1 0 0 0 V -1 0 0 1 0 1 0 1 0
0
О 1 0 0 1 1 0/
\. v есть вектор-столоец (г
Ci,i2
> pow(2,n-l,n) чтобы сделать это. Внесите изменения в psp2.m, необходимые, чтобы найти все числа < 5000, которые (1) являются псевдопростыми по основанию 2, (2) являются псевдопростыми по основаниям 2 и 3, (3) являются псевдопростыми по основаниям 2, 3 и 5. Вы обнаружите, что ваш список становится все короче: все меньше и меньше чисел могут маскироваться под простые, когда используется несколько оснований. Для каждого псевдопростого числа найдите его разложение на простые множители. (ш) Как много простых чисел < 5000? (Используйте задачу (i), приведенную выше.) Предположим, вам дано нечетное п, такое, что 1 < п < 5000 и rem{a"~" , п) = 1 для а = 2, 3 и 5. Чему равна вероятность того, что п не является простым? Поучительно здесь то, что п «очень похоже» на простое. >iv) Если вы хотите найти числа п, являющиеся псевдопростыми только по основанию 3, а не по основаниям 2 и 3, то вам потребуется рассматривать и четные числа. То же будет и для основания 5. А 9-4196
130 Глава 9. НО,.7. i ices долростыс числа и тост Миллера п самом деле, существуют ли четные числа п, псевдопростыс по основаниям 3 пли Ъ п меньшие 10000? (у) Тест М и л л е р а . Если для числа п справедливо remfa"" 1 , n) ф 1, (т.е. п"~1 ф 1 mod и) при некоюром п. не делящемся на и, то in icopcMbf Фирма мы тилем, что п иг ян.'шг-шел простым. Имеется более тонкий метод выделения составных (т.е. не являющихся простыми 1 ') чисел, называемый тестом Млллс-ра. который был опубликован в 197G г. Подробности теории тепа Миллера можно наши, например, в [7]. гл. 5. Здесь мы приводим '-этот тес:т. Возьмем нечетное п > 1 и чисчо Ь (основание.), взаимно простое с и. 'i.e. такое, ч го ПОД(Ь. ?>) = 1. Затем выполним следующие шаги: Шаг 1. П у с л ь к — п — 1. г ~ гепц'//'. п). FA:ли г ^ L то п -не про-
ходит тест Миллера по основанию 6, в противном случае пойдем дальше. (Обратите внимание, что. если л проходит шаг 1. то /( либо простое, /moo пеевдопростое по основанию Ь.) Пока А' четно и г = 1. будем последовательно повторять следующий шаг. Шаг 2. Заменил: к на к/2. а затем заменим г новым значением гет(Ь А \п). Когда к станет нечетным или г ф 1: если г — 1 или г = /) — 1. то п проходит тест Миллера по основанию Ь\ если г ф 1 и г ф п - 1. то п не проходит тест Миллера, по основанию Ь. Важный результат состоит в том, что если п простое, то оно всегда проходит этот тест. Таким образом, если /?. не проходит тест, то это составное число. Заметьте, что не пройти шаг 1 означает не удовлетворить теореме Ферма. М-файл m i l l e r . m выполняет чгот гест. Проверьте, сможете ли вы понять, как он это делаег. Воспользуйтесь этим М-файлом. чтобы выполнить следующую задачу. (vi) Проверьте m i l l e r .га на нескольких простых числах, которые должны пройти этот тест. Выпишите полученные остатки. Возьмите необходимые вам простые числа из задачи (i), приведенной выше. • По техническим причинам число 1 не рассматривается ни ка.к простое, ли как составное. Это iw. должно беспокоить наг. ни и малейшпй степени!
Глава 9. HO_i(, nc.e.n;ioupoci!,n: чист и ТОСТ Миллера
131
(vii) Проверьте, что п = 1373653 проходит тост для Ь = 2 и b = 3. но не проходит при Ь = о: зашшппе резу^и.-гач ы ш.пюднення теета для этих Ь. Это л является простым или составным? ПУСТЬ с ™ reniffj"" 1 . N). (Заметьте?, что это не мо'же.т быть определено с помощью функции MATLABa rem поскольку число 5"~' слишком большое. Но М-фан. i m i l l e r .m скажет вам. каково г!) Найдите НОД(с — 1.п) и проверьте, что это истинный делитель л. т.е. делитель, отличный от 1 и v. (viii) Проверьте, что и = 2532G001 проходит тест Миллера для оснований 2. 3 и 5. по не проходит при основании 7 (выпишите остатки, получавшиеся в результате выполнения тестов). Пусть с ~ rem(7"~ 1 1 г»,). Найдите НОД(с— 1, п) и проверьте, что это истинный лелитель л. (:х) Найдите первое число > 5 х 10 7 . которое могло бы быть простым. Запишите точно, что вы делаете, чтобы найти это число. (Ясно, что чем меньше раз вы обращаетесь к тесту Миллера, тем лучше. Например, нет необходимости проверять, является ли 50000002 простым с помощью теста Миллера.) (иные ч огибаюшие
135
Эпициклоиды й) Покажите, ми) уравнение хорды окружиогш .г" + у~ = 1. соединяющей ючкп icosf. shi t) и (ГОЙ(Ш£). shiimt)). есгъ .x(sinf •- sin nit) -• .(/(cos / — cos nit) + sini'm — 1)/ = 0.
(Ю.1)
(Вам здесь придется вспомнить тригонометрическую формулу для sin((7 — /)).] Воспользуйтесь М-флйлом linenv.m. чюбы пантеона п. огибающую -)"П1>: хорд для некоторых значений т. скажем, 2, 3 и 4. Напечатайте одну in них. (ii)
Проверьте, что точка .
mvost -\- cus(-mt) т 4 1
'
т sinf л- ш\[т!) т + "1
одновременно улог.. ici i5O]jner (1U..L) н у])авпеник). полученному дифферепшфоваппем (10.1) но /. Это частный случаи ситуации и'з упражнения -1.7. который покачивает, что чга гочку (.r(t). i/(t)) дает парамсгричашмо oi полющей хорд. Иначе говоря, кривая, которую наш глаз формирует из сгущений, образуемых всеми хордами, параметризуется так. как было скачано выпи1. iui) Эпициклоида подобна, гипоциклоиде (см. упражнение 4.5). но получается качением подвижной окружности по внешней стороне неподвижной. Ее параметризация (через переменную и по причине, которая станет попятной позже) е п ь ( .г .-- [а - I)-) cos
'"'
\ , „ • ( Ьи \ , , ,- -г dcos а. ц = \а -\- \>\ sin + asm и.
\п -!- о/
V" + о/
На рис. 10.2 показан случай а = 5. Ь = 1. d -- 1. а также изображены неподвижная и катящаяся окружности в положении, соответствующем -и — 0. Покажите (математически!), что. положив и = mt и взяв по.чхолящие значения a.b.d. выраженные чере'з т. можно построить -пшпиклоид\\ совпадающую с приведенной выин; параметризацией огибающей хорд. Вам нужно, например, взять т/{т + 1) = а + Ь.
\/{т + 1) = (I.
(iv) Пчменениге hypocy ли гак, чтобы ])исовалнсь эпициклоиды. Замечание: Вам нужно нпссти илио топкое изменение, а именно нерхний преде.т изменения параметра «upper» должен быть переопределен как abs(a+b)+abs(d). Так как вы обозначили параметр через и. то вам нужно заменить t = t l : t s t e p : tu на u = t l : t s t e p : t u . Нет
136
Глава 10. Графики: кривые и огибающие
Рис. 10.2. Эпициклоида, полученная качением окружности радиуса 1 по внешней стороне окружности радиуса 5. необходимости переименовывать t l и tu. Остальные изменения касаются просто строк определения х ну. Нарисуйте несколько эпициклоид для малых (целых) значений т и сравните с огибающей хорд. (v) Докажите формулу параметризации эпициклоиды (из задачи (ш), приведенной выше).
В. Огибающие Цель работы Мы намереваемся здесь рассмотреть две ситуации, в которых семейство линий имеет огибающую. Одно из них есть семейство прямых, подобных тем, с которыми мы имели дело в гл. 4 (упражнение 4.6), а в основе другого лежит «падающая лестница». Рассмотрение ведется как в математическом, так и в экспериментальном аспектах.
Используемые математические понятия Они включают параметрические уравнения кривых, методы исключения переменной из двух уравнений, касательные к кривым и простую тригонометрию. Здесь мы продолжаем начатое в гл. 4.
Используемые возможности MATLAB'a В первой части исследования, чтобы нарисовать огибающую прямых из гл. 4, используется М-файл linenv.m. Вам потребуется изо-
Глава 10. Графики: кривые и огибающие
137
бразить дополнительные кривые на том же графике. Во второй части при изображении параметрических кривых и огибающих семейства линий придется решать полиномиальные уравнения.
Перпендикулярные биссекторы1' Рассмотрите огибающую прямых, перпендикулярно проходящих через середины отрезков, соединяющих точку (а,0) (можете считать, что a > 0) с точками единичной окружности х? + у2 — 1, параметрическое представление которой (cosi.sint). Для начала покажите, что уравнение такой прямой имеет вид 2x{a -cost) - 2 j y s i n t + l - а2 = 0
(10.2)
(см. упражнение 4.6). Затем воспользуйтесь linenv.m, чтобы нарисовать огибающую для различных значений а. В этот М-файл надо добавить пару строк, чтобы он рисовал красным цветом и саму окружность. Распечатайте один вариант для a > 1 и один для a < 1. " Заключительная часть этой задачи посвящена математическому исследованию, объясняющему только что полученные рисунки. Для прямых, заданных уравнением (10.2), воспользуйтесь методом из упражнения 4.7, чтобы показать, что уравнение огибающей этих прямых при чф\ есть 4.т2 - 4а.т +
У „ = 1 - а2. 1 - а2
Так вы исключили t из двух уравнений, а именно уравнения (10.2) и производной этого уравнения по t. Один способ исключения * состоит в том, чтобы упорядочить эти уравнения, как уравнения относительно sin t и cost, решить их. а затем использовать соотношение sin" t + cos2 t — 1. Что представляет собой огибающая при а — 1? Существует ли простое геометрическое объяснение этого? Пусть а / 1. Сделайте подстановку А' = х — |. чтобы привести уравнение огибающей к виду 4 л ' 2 + т-^—2 = 1Что это за кривая? Объясните на примере, как это согласуется с рисунками. Bisection —деление пополам. — Прим. перее.
138
Глава 10. Графики: кривые и огибающие
Можете ли вы как-то охарактеризовать те частные случаи, когда отрезок, соединяющий точку (п.0) с окружностью, касается ее? При этом, конечно, требуется, чтобы а > 1. (Подсказка: Покажите, что тогда cos t ~ \/u и бпескторы имеют уравнения Л'у^* - 1 = ±У.) Падающие лестницы Лестница длины / опирается па "землю и вертикальную стену, одновременно касаясь прямоугольною ящика со сторонами а и Ь. как показано па рис. 10.3 слепа. Обозначив через .г длину отрезка, как указано па рисунке, покажите, что /(.г) ~ 0. где /(;;;} = х1 - 2а т* + (a2 +- /г - 1'2).т2 + 2аГ2:г - а2!'2.
Возьмите / — 10 ti а — 2. Проверьте, что Ь = 5 дает физически возможное решение (т. е. уравнение имеет корень л\ который физически возможен), но Ь --- G уже не дает i а кого ргчнения. Проиллюстрируйте зто гра([)нком (])уикипн /. но также воспользуйтесь и командой r o o t s , чтобы численно найти корни. М-фапл paramc:.m рисует параметризованные кривые (.г, .у) — (x(t).y(t)). В частном случае графика функции у =• f{:r) вы можете взить х = t,y = / i t ) . и вам останется лишь вставить это в нужное место paramc .m. (He пу-
Рис. 10.3. Слева: .честница длины /. прислоненная к вертикальной степс и касающаяся ящика размеров а и ';• Снрнва: рисунок ;(.1Я вывола уравнении лестницы. Заметьте, чю .с и // на лих рисунках различаются по смысл V.
Глава К). Графики: кривые и отбпющие l'.V.i тайте этот у с у. используемым на рисунке! Этот Ы-файл является универсальной нрог])аммой построения параметрических кривых, п поэтому его переменные естественно обозначить через х п у.) Возьмите а -• 2 и Ь = 5 и найдите нее решения для / = 20. Проделайте это и для а = 2.Ь = о,1 = 9.582209. Что здесь особенного? Ч ю произойдет, если / слегка увеличить или уменьшить? Теперь мы убираем ящик и... Вообразите, что лестница соскальзывает вдоль степы вертикально вниз (опасная возможность!) и найдите огибающую всех положений лестницы. Покажите, что уравнение прямой линии, проходящей вдоль лестницы и заданной углом /. как показано в правой части рис. 10.3. есть
+4
I.
cost suit Покажите с помощью метода из упражнения 4.7. что огибающая линий положения лепницы дается уравнениями .г = Icns^t.y = /sin3/,. Теперь исключите /, чтобы показать, что уравнение огибающей есть Воспользуйтесь также linenv.ra, чтобы нарисовать огибающую линий положения лестницы. Покажите, что средняя точка лестницы при ее соскальзывании описывает часть окружности. Сможете ли вставить что в рисунок огибающей? Видите ли вы связь с задачей о поднимающейся двери гаража 9 Как можно получить из уравнения огибающей, что условие существования физически реализуемого решения исходной задачи о лестнице и ящике есть
Проверьте это на примере, приведенном выше.
С. Кривые постоянной ширины Цель работы Окружность ни в коем случае не является единственной кривой, имеющей «постоянную ширину» в том смысле, что для всех пар параллельных касательных расстояние между ними одно и то же. В этой работе исследуются свойства кривых постоянной ширины.
140
Глава 10. Графики: кривые и огибающие
включая способы их построения и их связи с другими геометрическими понятиями, такими, как огибающие семейства линий. (В работе [5] имеются интересные наблюдения о кривых и поверхностях постоянной ширины.)
Используемые математические понятия Уравнения линий и касательных, линейные уравнения и 3 х 3-определители; используются также огибающие линий (гл. 4).
Используемые возможности MATLAB'а Вычерчивание параметрических кривых и огибающих семейства линий с помощью данных М-файлов. Эта работа посвящена кривым постоянной ширины. Ширина кривой измеряется расстоянием между парами параллельных касательных, а постоянная ширина означает, что все эти расстояния равны. Как ни удивительно, окружность не является единственной кривой с этим свойством. Взгляните на рис. 10.4. Кривые постоянной ширины используются во вполне практических ситуациях: например, они встречаются в автомобильных роторно-поршневых двигателях Ванкеля; другой пример -- сверла для получения (почти) квадратных отверстий. Монетам придается форма кривой с постоянной шириной, чтобы использовать их в торговых автоматах: британские монеты достоинством в 20 и 50 пенсов — пример некруглых кривых постоянной ширины.
\ / \
^
//
Рис. 10.4, Все расстояния между параллельными касательными равны 2.
10. Графики: кривые и огибающие
141
Вообще мы будем рассматривать только «выпуклые» кривые; in чтого следует, что для каждого направления имеются только две параллельные касательные. Позднее мы встретимся с некоторыми •«необычными» примерами. Нужные сведения об огибающих вы найдете в §4.6 и в упр. 4.7. К о н с т р у к ц и я «педали» Пусть h — функция угла t. На рис. 10.5 через l(t) обозначена прямая, проходящая черед точку {h(t) cost, h(t) shit), перпендикулярно направлению из этой точки в начало координат. ii) Покажите, что уравнение прямой l(t) есть л; cos t + у sin t — h(t).
(10.3)
'ii) Пусть h(t) = 1 + |cos(3£). Измените М-файл linenv.m так, чтобы он изображал огибающую Е прямых l(t) при 0 < t < 2тт. Распечатайте эту огибающую, так задав границы для хну, чтобы ча рисунке была ясно видна вся кривая Е. [т) Конечно, прямые l(t) касатпелъ'пы к огибающей Е. построенной з (ii). Проверьте, что для заданной функции h будем иметь h(t) + h(l, + тг) — 2 при всех t. Почему отсюда следует, что у всех пар параллельных касательных к Е расстояние между ними равно 2 и, следовательно, Е является кривой постоянной ширины 2?
У А
{h(t)c,Q%t, h(t)smt)
Рис. 10.5. «Педальные координаты» линии.
142
Глава 10. Графики: кривые и огибающие
(iv) Вспомните из упр. 4.7. что для нахождения уравнений огибающей мы берем уравнение (10.3) вместе с уравнением -xsmt + ycost
-
h'(t)t
(10.4)
полученным дифференцированием (10.3) по t. (Здесь и далее ' означает дифференцирование, d/dt.) Решите уравнения (10.3) и (10.4). чтобы получить выражения x(t) - h(t)cost -ti{t)sint,
y(t) = h(i)*mt + h'{t)cost.
(10.5)
которые, таким образом, являются параметрическими уравнениями для Е. Измените М-файл paramc.m таким образом, чтобы он рисовал параметрическую кривую, заданную уравнением (10.о) с функцией h из (ii). и назовите измененный М-файл constwl.m. Подберите границы изменения ,г и у так, чтобы Е точно вписывалась в квадрат на экране (конечно, будучи кривой постоянной ширины, она будет точно вписываться в квадрат!), и распечатайте этот рисунок. Кривая Е будет соответствовать кривой, распечатанной вами в (ii). отличаясь, возможно, лишь масштабированием. Соедините (вручную) точки, где наша кривая касается верхней и нижней сторон квадрата, и точки, где она касается боковых сторон квадрата. Заметили ли вы что-то особенное в этих прямых? (v) Объясните, почему после добавления к h(t) (из (ii)) константы a, получается другая кривая постоянной ширины. Чему равна ширина этой кривой? Измените ваш М-файл constwl .m так. чтобы можно было нарисовать кривую для каждого из одиннадцати значении а — 0. 0.1. 0.2.... ,1.0 на одном и том же графике, и назовите полеченный М-файл constw2.m. Вспомните, что использование hold on. между вычерчиванием отдельных кривых сохраняет их на одном и том же графике. Поставьте hold off в конце М-файла. Подгоните границы изменения х и у так, чтобы наибольшая из одиннадцати кривых точно вписывалась в квадрат экрана, и распечатайте этот рисунок. (vi) Что произойдет, если вы возьмете п = —0.5 в (у)? Выведите ПА экран полученную «кривую» и сделайте ее набросок от руки. Как вы думаете, она имеет постоянную ширину 9 (vii) Как уже отмечалось, функция h из (ii) удовлетворяет уравнению
h{t) + h{t + тг) = k7
(10.6)
Глава ID. Графики: кривые и огибающие
143
Р и с . 10.6. Прямая, соединяющая две точки касания параллельных каrvre.'ibHbix, и ДРЙГТВП гельностн является нормалью к кривой в обоих точках касания.
где /.• — константа (в этом примере А; — 2). Другой способ удоп.тетверить уравнению (10.G) -сделать константой h. Какая кривая Е получится из (10-5) в этом случае? (Вы можете ответить на этот вопрос, не прибегая к компьютеру!) Выберите функцию h, отличную от константы, которая удовлетворяет уравнению (10.6) и порождает кривую Е. отличную от рассмотренной выше. Распечатайте кривую Е. как заданную вашей функцией Ь и уравнением (10.5). поиобраR масштабироваште так, чтобы она точно вписывалась в квалрат рисунка. (viii) Пусть функция h удовлетворяет уравнению (10.6), и пусть Е является огибающей, как и прежде параметризованной уравнениями (10.5). Покажите, что x(t + тг) = x(t) - k cost.
y(t + 7г) = y(t) - A-sin f.
Вынедите in этого, что прямая, соединяющая точки огибающей Е, соответствующие t и t + тг, весчда перпендикулярна прямым l(t) и l[t + 7r) (см. рис. 10.0).
Завершение заданной «полукривой» Теперь начнем с кривой, которая имеет параллельные касательные т. конечных точках и нигде больше. В качестве примера возьмем голуэллипс (см. рис. 10.7). Здесь расстояние между двумя парал.г.ельными касательными равно 2. и мы построим кривую постоян-
144
Глава 10. Графики: кривые и огибающие
у' (a cos r, sin t)
Рис, 10.7. Кривая постоянной ширины, построенная на основе половины эллипса.
ной ширины 2. Полуэллипс параметризуется как х — «cost, у — sin г, — < t < -—. А теперь для каждой касательной к полуэллипсу, скажем, в точке (acosf, sini), возьмем прямую m(t), параллельную этой касательной, на расстоянии 2 от нее (см. рис. 10.7). (ix) Покажите, что прямая m(t) описывается уравнением 2
2
2
х cos t + уа sini = a — 2у/п' sin t + cos 1.
(10.7)
(x) Уравнение (10.7) имеет вид, несколько отличный от уравнения (10.3) из-за присутствия а в коэффициенте при у. Однако метод нахождения точек огибающей Е линий m(t) остается тем же, что и прежде. Обозначив через r(t) правую часть уравнения (10.7)г покажите, что точки огибающей суть y(t) = -(r(t)smt + r'(t)co3t). (10.8) a Почему огибающая Е вместе с полуэллипсом образуют кривую постоянной ширины 2? (хх) Измените ваш М-файл constwl.m Измените ваш М-файл Е. заданную уравнением (10.8) для тг/2 0. ^xiv) В завершающей части работы используется теория огибающих, чтобы найти область значений а > 0, для которых ошбающая не имеет выступов. Записав уравнение (10.7) в виде px + qy = г, можно показать, что условие существования особых точек состоит в том. что (мы используем, как и прежде, символ ' для обозначения дифференцирования) уравнение р р' р"
q q' д"
r T'
г"
имеет решение t между тг/2 и Зтг/2. Полагая р = cost.q = asint, покажите, что добавление верхней строки к нижней и вычисление определителя по нижней строке приводит это условие просто к т + г" = 0 (помните, что а ненулевое). Следовательно, покажите, что нужное условие имеет вид v — 0, где 2(а 2 - I)2 sin 2 t cos 2 /
v — —2u + a-\
;
2(a 2 - l)(cos 2 t - sin 2 t)
—
и и — д/(a2 sin2 t + cos2 t). Напишите (короткий) М-файл, чтобы нарисовать график функции V. t=-pi/2:0.01:3*pi/2; 10-4196
146
Глава 10. Графики: кривые и огибающие
v= приведенное выше выражение; plot(t,v) hold on plot([pi/2,3*pi/2],[0,0]) hold off 1 1 Что делает вторая команда plot . Нарисуйте набросок от руку, полученного графика, функцт: v для трех значений а — 0.7Г>, 1.25.3 и проверьте, что в этих случаях кривая из (xii) не имеет выступив именно тоща, когда график для v не .может пересечь ось I. Какова область значений а. для которой is соотиетсиши с этим .методом огибающая Е не имеет выступов?
11 Ломаные и кривые наискорейшего спуска
Э га [мава содержит два исследования, которой1 используют гра(]шку: исследование А посвящено спирографам и ломаным, и В- задаче определения формы проволоки, которая обеспечивает иаи.леньшее. время спуска бусинки, соскальзывающей по ней.
А. Спирографы и ломаные Цель работы Здесь мы хотим нарисовать зигзагообразную линию, определенную простым правилом. Нас; интересует, сколько «зигзагов» должна, сделать двухзвенная ломаная, прежде чем она замкнется, н рассчитать, каких размеров должен быть результирующий график, чтобы он аккуратно вписывался в экран. Мы также рассмотрим соотношение между ломаными и некоторыми еппрографическими кривыми 'эпициклоидами). Основная идея данной работы взята из книги [1].
Используемые математические понятия Векторы на плоскости, линейные уравнения и 2 х 2-магрицы. празильные многоугольники. НОД, тригонометрические формулы и эллипсы • - все это есть в данной работе.
Используемые возможности MATLAB'a Работа связана с выводом па график последовательности отрезков. Вам потребуется вносить изменения и заданную программ)', чтобы заставить ее делать большую часть работы автоматически. При этом нужно будет вычислять НОД и подгонять размеры экрана под ломаную.
Построение ломаной Работа включает вычерчивание зигзагообразных линий по простому правилу и рассмотрение математических вопросов, лежащих в основе этих построений. Имеется глубокая связь между ломаными и ю*
148
Глава 11. Ломаные и кривые, наискорейшего спуска
(0,0)
Рис. 11.1. Основная ломаная, определяемая длипа.мп 100 и / и укгга.ми Bi.$2- В правом рисунке р\ и pi суть врашпши на (?] ir di соответственно. некоторыми эпициклоидами, полученными качением одной окружиости по другой и вычерчиванием следа жестко зафиксированной па, катящейся окружности точки. (Сравните с исследованием А из гл. 10.) Основная идея иллюстрируется па рис. 11.1. Прямолинейный горизонтальный отрезок направлен вправо от начала координат и имеет длину 100. Из его конца исходит другой горизонтальный отрезок длины I. Если / < 0, то отрезок направлен влево, в противном случае —вправо, так что он оканчивается в точке (100 + /. 0). В этом месте мы говорим, что один ишг завершен. Итак, построение ломаной началось. Нам даны два угла. Oi^Oo (обычно они будут измеряться целым числом градусов). Проведем отрезок прямой длины 100 из точки (100 + I, 0) под углом 9\ к оси х (так что этот угол измеряется против часовой стрелки от этой оси). Отрезок заканчивается в точке (100 + / + 100cos#i, 100sin(?i). Из этой точки проведем отрезок длины I под углом 02 с горизонталью, который оканчивается в точке (lOO + J + lOOcosfl! + J cos 0 2 : 100 sin01 + / s i n 0 2 ) . В этом месте завершены два иш?а. Длины добавляемых отрезков равны попеременно то 100. то I, a углы между добавляемыми отрезками и горизонталью возрастав:)'! соответственно на в± и в-2 на каждом шаге. Так. па третьем шаге добавляются два отрезка под углом 2#i и 2#2 к горизонтали, на четвертом —два отрезка под углом 30j и 3#2 к горизонтали и т.д.
Глава 11, JIoMRiibie п кривые наискорейшего спуска
149
В связи с этими построениями возникают следующие математические задачи: • Можно ли найти разумную «законченную» формулу для точки, достигаемой за к шагов? («Законченность» означает здесь, что формула должна быть явной, без каких-либо многоточий.) • Является ли ломаная замкнутой кривой и, если это так. сколько шагов для этого нужно? • Как велика получающаяся фигура (нам нужно знать это, чтобы не было частей, выходящих за границы экрана 1 '). Имеются и другие математические задачи, которых мы коснемся позже: например, можно определить «спирографическую» кривую по точкам, проходимым па 1, 2. 3 . . . . .к шагах, которая оказывается ншциклоилой. Эта эпициклоида и некотором смысле аппроксимирует нашу ломаную, а в некоторых примерах эпициклоида является лростоП кривой, подобной эллипсу. М-файл zzl.m рисует ломаную, по ему нужно .много помогать, оказывая число выполняемых шагов и размер графического окна ,х/ < х < xu,yl < у < уи). В надлежащее время вы измените его гак. что число шагов, необходимых для замыкания кривой, будет вычисляться заранее, а размер окна будет устанавливаться автоматически. К тому же zzl .m делает для вас окно квадратным, так что .си — xl ~ уи — yl. На самом деле уи полагается равным yl + хи — xl. Ц;\я начала выполните zzi.m с входными данными I — 40, 0\ = 15. 0-2 = 9, число шагов равно 40, xl — —320. хи = 460; yl = —15. Попробуйте также I — 50. д\ — 175. 02 = 185. число шагов равно 72. г/ гг. 0. хи = 150. yl = -74. Векторная формула для точки, достигаемой за к шагов Для единообразия обозначений заменим в дальнейшем 100 на h и I на /2. Пусть vi,V2 будут векторами-строками длины 1\Л-2 соответственно, и пусть р\.р2 означают вращения против часовой стрелки соответственно на #i,#2- 1'ак, например, если v есть вектор (а, 6), то воздействие р\ на v превратит его в вектор os#i iin вл
-sin6 1 ] \ ( а cos в-i \ b
Можно обозначить через р\ вращение па угол кв\\ матрица этого преобразования получается заменой 0} на кв\. Для р2 заменяем 6\ 11
График всегда вписывается ii р^чмерът экрана автоматически, а размеры ломаной окажутся нужными лишь для установления ее. связи с эпициклоидой. — Прим. перев.
150
Глава 11. Ломаные и крииые наискорейшего спуска
-с
Р и с . 11.2. Часть «правильного многоугольника» c2- (Но понятно, что она может замкнуться и раньше, чем оба эгп условия выполнятся. Вы можете объяснить такую возможность? Но здесь мы не будем больше говорить об этом.) Итак, если ненулевой вектор ci возвращается < первоначальному положению после к вращений />, на 0j градусов. го э ю означает, что кв± красно 360°. Объясните, почему это то же, IT о и 360 * = кратное Гаким образом, ломаная будет -замкнута, если к кратно одновременно 3G0 360 НОД(ЗСО,01) Объясните, почему это эквивалентно высказыванию, что ломаная определенно будет замкнута, когда к — s, где _ 5
360 НОД(360^^)'
•
(Таким образом, вам надо показать, что s есть общее кратное двух чисел, данных выше. В действительности достаточно, чтобы это было наименьшее общее кратное. ) Воспользуйтесь (11.6). чтобы вычислить «число шагов» (т.е. число шагов для замыкания) в zzl.m, применяя имеющийся в вашем распоряжении М-файл gcdiv.m для вычисления НОД. Назовите полученный М-файл zz2.m. Проверьте на нескольких примерах, что
152
Глава 11. Ломаные и кривые наискорейшего спуска
ломаная замыкается. Выпишите входные данные М-файла. использованные вами, и вычислите число шагов, необходимых для замыкания .
Размер ломаной Можно заранее рассчитать размер ломаной, чтобы соответствующим образом задать масштабирование в графическом окне. В обозначениях выражения (11.5) возьмем с — ci + с> в центре экрана, т.е. в точке (^(xl + xu), ~(yl + уи)). так что нам надо найти с и другие компоненты выражения (11.5).
Нахождение «центра» с Покажите, что из (11.3), формулы для матрицы вращения pi из (11.1), и вида вектора V] = (h,0)T (это вектор-столбец) следует, что -1 Cl =
I
;
fl
"- i
1 -cos0i sin - 0 ] , cos -i 2 ' 2
Подсказка: Вам нужно воспользоваться «формулами с половинными углами» Л 1 1 1 - cos 0i = 2 sin - 0 i , sin 91 — 2 sin -0i cos -B\. Конечно, аналогичная формула верна и для С2 с заменой в индексах 1 на 2. А теперь воспользуйтесь матрицей вращения р\. выраженной через &0J., а именно cos kOi
— sin k9\
аналогичной матрицей для р\ и выражением (11.5), чтобы показать, что конец ломаной после к шагов приходит в точку с координатами
(На этот раз вам нужны хорошо известные формулы для sin (а + Ь) и cos(o-f-b).) Конечно, можно записать с = ci +С2 в явном виде, но
Глава 11. Ломаные и кривые наискорейшего спуска
153
для большинства целей лучше воспользоваться выражением (11.7), которое дает положение точки относительно «центра» с.
Оценка размера ломаной Нам нужно узнать, насколько точка (11.7) может удалиться от центра с. Располагая с в центре экрана, мы можем тогда принять меры, чтобы вся ломаная уместилась на экране. Покажите, что вектор, полученный удалением из выражения (11.7) первого члена с, имеет длину самое большее
d= — ^ - г + - Л т Г •
(П.8)
2sin 7>9\ 2sin £02 Запишите этот вектор с в виде (а, Ь). Теперь, расположив с в центре экрана, можно придать области отображения графика форму квадрата со стороной 2d. Это равносильно тому, что xl = a ~ d,
xu = a + d}
yl — b — d,
yu — b + d.
Вставьте это в zz2.ra и запишите как zz3.m—вариант 3 zigzagпрограммы, которая будет автоматически масштабировать график, чтобы он точно вписывался в экран. Проверьте на нескольких примерах, задавая параметры кривых, которые вы проверяете, насколько хорошо они вписываются. Вспомните, что первоначальное значение h = 100.
Спирограф Предметом нашего рассмотрения здесь будет «спирографическая» кривая, проходящая через все положения, которые ломаная достигает за к шагов для к — 1,2,3,... . На самом деле точное представление этой кривой дается выражением (11.7), за исключением лишь того, что теперь к принимает не только целочисленные значения 1,2,... ,s, где s —число шагов (определяемое из (11.6)), а Есе вещественные значения от 0 до s. Так, разделив интервал [0,s], скажем, на 1000 частей, мы получим массив значений к: п-1:1000; k=s*n/1000; Таким образом, к проходит 1000 шагов от s/ЮОО до s. Нарисуйте белым цветом график кривой, заданной выражением (11.7), после того как нарисуете ломаную, вызвав подготовленный вами М-файл zz4.m. Приведите пример. На рис. 11.3 показан случай /i — 100, 12 — 40, 0i = 45, 02 = 9. Может ли спирограф замкнуться раньше ломаной?
154
Глава 11. Ломаные и кривые няискорейшего спуска
-300 -200 —ЮС
100
200
300
400
Рис. 11.3. Ломаная (с h = 100, l2 = 40, 0, = 45, В2 = 9; см. рис. 11.1) и связанный с ней спирограф, который проходит через концы всех сегментов длины 1-2Частный случай 9\ = —#2 Покажите, что для 9\ = —9ч — в члены выражения (11.7), оставшиеся после отбрасывания начального с, примут вид 2 sin
(h +/ 2 )sin ( k- -
-h
+I2)cos{k-
1 -
Записав это в виде (А'(АО, У (к)), где к, как выше, есть теперь вещественное число между 1 и я, покажите, что (A", Y) описывает эллипс с горизонтальной и вертикальной осями длины sin ±1 соответственно. (Заметьте, что центр этого эллипса находится в с, а не в начале координат, поскольку в (11.7) мы с опустили.) Проверьте это для некоторого значения в, нарисовав вместе с ломаной и спирограф. Как вы построите эллипс, у которого горизонтальная ось короче вертикальной? Когда э.члипс становится окружностью?
Спирографы с выступами Вид выражения (11.7) показывает, что спирографическая кривая в действительности является эпициклоидой (сравните с гл. 10, исследование А), образованной следом точки Р, жестко закрепленной внутри окружности, катящейся по другой окружности. На самом деле можно показать, что неподвижная окружность имеет радиус
Глава 11. Ломаные и кривые наискорейшего спуска
155
Рис, 11.4. Образование эпициклоиды (спирографа) качением одной окружности по внешней стороне другой окружности. а, катящаяся имеет радиус Ь, а точка Р находится на расстоянии d от центра катящейся окружности (см. рис. 11.4 и обратите внимание на то, что смысл а, Ь и d отличается от того, что был прежде в этой работе), где а =
202 sin U
b=
d=
2 sin i 0 2
(Вам не нужно проверять это.) Особый интерес представляет случай b = d, означающий, что точка Р находится на периферии катящейся окружности. Это всегда порождает острые выступы на спирографе. Покажите, что это равносильно тому, что /i0i sin |02 02 sin 10i Переделайте zz4.m в zz5 .m, где это значение автоматически присваивалось бы I2, как только заданы 0j.,02 (вспомните, что h = 100). Рассмотрите случаи спирографа с острыми выступами. Например, чем определяется число выступов?
156
Глава 11. Ломаные и кривые наискорейшего спуска
В. Кривые наискорейшего спуска Цель работы Мы рассмотрим несколько кандидатов на роль «кривой наискорейшего спуска»: придав гладкой проволоке форму такой кривой, мы хотим минимизировать время, необходимое бусинке для соскальзывания вниз по проволоке. Как известно, «кривая наискорейшего спуска» имеет форму циклоиды {см., например, [17]), но здесь мы применим методы численного интегрирования, чтобы сравнить «скорости» для различных простых кривых, таких, как параболы и ломаные линии. Дополнительную информацию на эту тему вы найдете в [9].
Используемые математические понятия Эта работа о минимизации: находится наименьшее время спуска. Оно выражается через интегралы. Иногда используется и дифференцирование, хотя большей частью минимизация выполняется численно. При вычислении пределов используется правило Лопиталя. В качестве примеров используются различные кривые, такие, как параболы и циклоиды.
Используемые возможности MATLAB'a Численное интегрирование выполняется программой quad8, для минимизации функции двух переменных используется f mins, а для решения системы уравнений привлекается f s o l v e . В данных М-файлах используется несколько глобальных переменных.
Введение и формулы для ссылок (случай без трения) Это работа о бусинке, соскальзывающей вниз по гладкой проволоке, расположенной в вертикальной плоскости между двумя точками, которые не лежат на одной вертикали. Мы хотим найти затраченное на путь время и сравнить времена для кривых различных форм. Имеется известный результат, датируемый семнадцатым столетием, который гласит, что кратчайшее время спуска достигается на кривой, называемой «циклоидой». Мы встретимся с циклоидами позднее. Доказательство, что эта линия является «кривой кратчайшего времени спуска» или «брахистохроной», здесь не приводится: оно не сложное, но использует начальные сведения из так называемого вариационного исчисления. См., например, [17]. Доказательство предполагает, что проволока гладкая: силы трения не действуют. Наличие сил трения приводит к несколько отличному результату, и в конце работы мы слегка коснемся этого случая.
Глава 11. Ломаные и кривые наискорейшего спуска.
157
Рис. 11.5. Кривая, соединяющая точки (0,2) и (4,0).
Рассмотрим кривую, соединяющую точки (0,с) и (d,0) в плоскости, как показано на рис. 11.5, где с = 2, d ~ 4. Бусинка под действием силы тяжести, но без трения и сопротивления воздуха соскальзывает вниз по этой кривой, начиная из состояния покоя в точке (0, с). Согласно закону сохранения энергии отсюда следует, что кинетическая энергия в любой момент времени равна потенциальной энергии, истраченной на этот момент, так что если v — скорость в момент времени t, а у — координата у на этот момент времени, то 2
-mv =mg(c-y), i.e. v = \/2д(с-у),
(11.9)
где ^ — ускорение силы тяжести, а т — масса бусинки. Теперь v = ds/dt, где s — длина дуги кривой, так что время t может быть найдено интегрированием. Конечно, значение д будет зависеть от выбора единиц измерения. Чтобы сделать время спуска подходящей величиной (около 10), значение д, используемое в М-файлах, задано равным 0.1. Имеются различные виды окончательных формул для общего времени спуска из (0, с) в (d, 0) в зависимости от того, интегрируем ли мы по х или же х и у являются функциями другой переменной в, как в случае циклоиды. Здесь мы выведем эти формулы, а в ходе работы вы можете предполагать их существование. Обра-
158
Глава 11. Ломаные и кривые наискорейшего спуска
тите внимание, что большая часть интегрирования выполнена численно с помощью программы MATLAB'a quad.8. В конце данной работы приведено замечание относительно численного вычисления интегралов. Время перемещения из точки (0, с) е (d, 0), где предполагается, что с > 0,d > 0 их строго возрастает вдоль кривой, равно (11.10) где в (i) у есть функция х и ' означает djdx, в то время как в (ii) их, и у являются, функциями в, шт,рих означает djd9, a OQ и 0\ —значения в е точках (0,с) и (d,0) соответственно. Заметьте, что имеется небольшая трудность при вычислении приведенных выше интегралов, ибо при х — 0 в (i) или в = в$ ъ (ii) мы имеем у = с, так что подынтегральное выражение становится бесконечным. Тем не менее до тех пор, пока кривая не поднимается выше линии у = с, интегралы сходятся {ведь время спуска конечно]).
В MATLAB'e есть программа численного интегрирования quad8, но при этом требуется, чтобы подынтегральное выражение принимало конечные значения в области интегрирования. Мы обойдем эту проблему простейшим образом 1 ): воспользуемся quad8, чтобы проинтегрировать по интервалу, который начинается сразу после х = 0 (или в — #Q), и отдельно оценим вклад оставшейся малой части исходной области интегрирования. На практике это, кажется, работает довольно хорошо. В конце этой работы мы рассмотрим подробнее некоторые вопросы численного интегрирования. До тех пор вы можете просто применять М-файлы в соответствии с их указаниями, принимая на веру, что результаты имеют разумную точность.
Парабола наискорейшего спуска Здесь мы рассмотрим различные параболы, соединяющие точки (0, с) и (d,0)), и найдем время перемещения по каждой из них, с тем чтобы определить параболу наискорейшего спуска. 2
(i) Рассмотрим параболу у = ах + f3x + с, которая проходит через точку (0,с). Возьмем а > 0 , чтобы парабола была «выпуклой вниз». Покажите, что, если т есть координата х точки минимума *> Имеются специальные методы исключения особенностей при численном интегрировании, которые не столь просты.
Глава 11. Ломаные и кривые наискорейшего спуска
159
параболы и парабола проходит черед точку (d, 0), то
d(2m - d)'
— —2am.
Заметьте, что для выполнении нашего условия а > 0 нужно, чтобы было т > ~d. Нас интересует лишь часть параболы между г = 0 и х — с/. Если ^с/ < т < d. то бусинка движется ниже оси х, пока не поднимется в точку (d.O), а если т > d, то она все время скатывается вниз. (ii) Возьмите с = 2,d = 4. Сделайте наброски парабол для m — 2.5.3,4 и 5. (Если хотите, можете воспользоваться М-файлом paramc.m, построения графиков параметрических кривых, но быстрее сделать набросок от руки, зная общий вид параболы.) Угадайте, по какой из парабол бусинка будет соскальзывать из (0,2) в (4,0) быстрее всего. (ш) М-файл s l i d e l . m использует программу MATLAB'a quads, и специальную аппроксимацию подынтегральной функции на отрезке 0 < х < 0.01 (см. выше введение и замечание в конце этой работы), чтобы вычислить интеграл (i) из (11.10) для случая параболы. Он выводит эти два значения времени, а затем выдает общее время спуска. Для работы этого М-файла требуется другой файл (файл-функция), вычисляющий подынтегральную функцию, который называется slidelfn.m. Внимательно просмотрите эти М-фаЙлы, так как вам придется изменять их потом для других кривых. В частности, разберитесь (хоть это и утомительно), зачем в этих двух М-файл ах нужны глобальные переменные. Используются и функция у, и ее производная, которая в обоих М-файлах обозначается посредством yl. Сохраняя с — 2 и d = 4, найдите время спуска в случае т — 2.5,3,4 и 5. Теперь измените М-файл (и назовите его s l i d e 2 .m) так, чтобы т принимало значения, скажем, от ^d+0.1 до d с шагом 0.1, и найдите время спуска для каждого из них. занося его в вектор r e s u l t , и, наконец, нарисуйте график времени как функции от т. Вам нужно сделать примерно следующее: m=d/2+.l:.l:d; result=2eros(length(m),1); for i=l:length(m)
160
Глава 11. Ломаные и кривые наискорейшего спуска
result(i)=time; end '/, цикл для i=l: length (m) plot Cm,result) Обратите внимание, что оператор global в s l i d e l . m должен быть вне цикла for! Оператор s l i d e l f n . m изменять не надо. Для с = 2, d — 4 распечатайте график времени спуска как функции от т и по нему оцените значение т, которое дает минимальное время спуска. Нарисуйте от руки набросок соответствующей параболы. (Ваша догадка оказалась правильной?!) Для с ~ 2,d = 3 воспользуйтесь тем же методом, чтобы найти «параболу наискорейшего спуска» и сделайте набросок ее графика времени как функции от т без вывода на печать.
Ломаные линии Предположим, что мы соединяем точки (0,с) и (d, 0) двумя отрезками прямой, смыкающимися в «точке перелома» (а,Ь) (см. рис. 11.6). Будем искать ломаную линию наискорейшего спуска. Таким образом, здесь cud заданы, а а и & могут изменяться. (iv) Покажите, что уравнения этих двух отрезков суть (Ь
у=
b{x - d) a—d
[x > a).
(v) В случае спуска по прямой можно найти время точно, вычислив первый интеграл из (11.10). Рассмотрите линию с наклоном т между точками {хо,уо) и (х\,у\)\ заметьте, что здесь т должно быть (0,с)
(d,0) Рис. 11.6. Ломаная линия, соединяющая точки (0,с) и (d,0), точка перелома которой есть (а, Ь).
Глава 11. Ломаные и кривые наискорейшего спуска
161
отрицательным. Сделав в интеграле замену dx на dy/m, покажите, что время спуска, с высоты уо на высоту у\ есть yi
l
2vTT^,
v
„, .II)
Взяв с = 2, d = 4, как и прежде (и 0 < а < d, 0 < b < с), покажите, что время спуска по ломаной линии есть 2
Вы можете воспользоваться встроенной функцией MATLAB'a fmins, чтобы найти минимум функции от а и Ь, определенной выражением (11.12). Создайте М-файл, скажем, slide3fn.m, вычисляющий функцию, которую надо минимизировать. Он примет вид function realtime=slide3fn(p) g=.l; c=2; d=4; а=р(1); b=p(2); realtime = ;'/, Формула реального времени спуска, как выше Теперь вы можете вызвать fmins посредством fmins ( ' s l i d e 3 f n ' , [*,*] ' ) , где звездочки надо заменить разумным предположением относительно значений а и Ь, которые дают минимум. (Обратите внимание, что ' после вектора означает транспонирование.) Сделайте ваше разумное предположение и найдите значения, дающие минимум времени спуска.. (Заметьте, что если в качестве такого приближения вы возьмете, например, a = 1, Ь — 2.1 > с, то, как и следует ожидать, fmins не даст разумного ответа.) Сделайте набросок ломаной линии, для которой достигается минимальное время. Найдите также соответствующее минимальное время. Сравните его с временем для параболы наискорейшего спуска. (vi) Мы имеем интересный случай в (11.12), когда 6 = 0, что дает второй член вида 0/0. Применяя правило Лопиталя к выражению лД-у/2-Ь
ъ покажите, что при Ь = 0 время спуска есть (все еще для с = 2, d = 4, a < d)
11 -4196
162
Глава 11. Ломаные и кривые наискорейшего спуска
Покажите с помощью расчетов, что значение а между 0 и 4, которое минимизирует это выражение, равно 2/\/3-
Циклоида Кривую циклоиды вычерчивает след точки, жестко закрепленной на окружности, катящейся вдоль прямой линии. В нашем случае окружность радиуса г катится «по нижней стороне» прямой линии у — с (см. рис. 11.7). На рисунке параметром циклоиды является угол 9; координаты движущейся точки Р таковы: х = г(в - sin^),
у = с- r + rcosO.
(11.13)
На рис. 11.7 показана полная «дуга» циклоиды для 0 < в < 2тг. Обратите внимание, что на рисунке в = 0 дает (х, у) ~ (О, с) = (0,2). Как и прежде, мы считаем с и d заданными. Мы хотим провести циклоиду через точку (d, 0); для этого надо, чтобы для некоторых г > 0 и 0 < # < 2 7 г выполнялись равенства
0,
(11.14)
Поскольку это —два уравнения с двумя неизвестными г и 9, разумно предположить, что они имеют решение, может быть, даже единственное. Так как эти уравнения выглядят не очень приятно, мы будем решать их с помощью одной из программ MATLAB'a
Рис. 11.7. Одна полная «дуга» циклоиды, исходящая из точки (0,2) и порожденная качением окружности радиуса г — 1.5 по нижней стороне прямой у = 2. Параметром циклоиды является в.
Глава 11. Ломаные и кривые наискорейшего спуска
163
для решения уравнений, например f solve. (Если почему-либо в вашей версии MATLAB'a нет f solve, то вы можете воспользоваться уже готовыми М-файлами с именами full_new.m и gauss.ja.m из гл. 15.) (vii) Приняв с = 2, d = 4, найдите решение системы (11.14) следующим образом. Создайте файл-функцию, скажем, cycfun.m, такого вида: function q=cycfun(p) с=2; d=4; r=p(l); theta=p(2); q=zeros(2,1); q( l)=r*sin(theta)-r*theta+d; q(2)=r*cos(theta)-r+c; Вы можете решить систему (11.14) для с = 2, d — 4 командой fsolvef'cycfun', [rO, thetaO] J ) где гО и thetaO есть первое приближение к г и 0. Не забудьте, что символ ' после вектора означает его транспонирование. Задайте разумное приближение и найдите решение. {Подсказка: Попробуйте радиус г — 1.) Обозначьте решение для 0 через в\ (в М-файле ему отвечает thetal). Сделайте набросок циклоиды на интервале от в = 0 до 0 = 01, т.е. между точками (0,2) и (4,0). М-файл slide4.m использует формулу из (11.10) при вычислении времени спуска, когда кривая зависит от параметра 0. Область изменения в расположена от 0 до 9^. М-файл использует функцию slid.e4fn.mTeM же образом, как siidel.mиспользует функцию slidelfn.m. Чему равно время спуска по циклоиде? Имеется известная теорема, впервые доказанная в семнадцатом столетии Ньютоном, Лейбницем, Бернулли и другими, что циклоида является кривой, которая обеспечивает наискорейший спуск. Насколько он быстрее (в процентах), чем у наискорейшей ломаной линии? (viii) Обратите внимание, что (в случае отсутствия трения) циклоида является лучшим выбором и при с ~ 0, т.е. когда стартовая и конечная точки находятся на одной и той же горизонтали. В этом случае бусинка приходит в (d, 0) с нулевой скоростью. Сколько времени занимает движение по циклоиде, когда с = 0,d — 4? Учтите, что вам нужно взять 0i немного меньше истинного значения, чтобы избежать бесконечного времени в slide4.m. С другой стороны, 'Г
164
Глава 11. Ломаные и кривые наискорейшего спуска
с помощью некоторых ухищрений вы можете найти время, необходимое для прохождения половины пути вдоль дуги этой циклоиды, и удвоить ваш ответ. Кривая квадратного корня Найдите такое значение а, что кривая у = ал/х + с, проходящая через (0, с), пройдет и через (d, 0). Найдите время передвижения между этими точками вдоль этой кривой в случае с — 2, d = 4 и сделайте набросок кривой в этом случае. Вы можете переделать slidel.m в slide5.m, не забывая при этом написать М-файл slide5fn.m, вычисляющий функцию у и ее производную yl подобно slidelfn.m. Что дает сравнение времени для данного случая со временем для циклоиды? Интегралы (читать необязательно) Используя формулу (11.9) в виде
и стандартные формулы ds _ ds dx __ г fidz dt dx dt dt (где у' ~ dyjdx), докажите формулу (11.10)(i). Как было указано во введении к этой главе, в программе численного интегрирования MATLAB'a предполагается, что подынтегральная функция принимает конечные значения в области интегрирования, поэтому в данной работе программа использовалась для формулы (11.10) (i) в интервале 0.01 < х < d, а для небольшого начального интервала 0 < х < 0.01 была получена его приближенная оценка. Чтобы получить эту оценку, предположим, что у' = dy/dx является константой для 0 < х < 0.01. Тогда можно показать, что интеграл по этой области дается формулой (11.11). а именно
(заметьте, что у' будет отрицательной). В приближении, использованном в данной работе, значения у и у' взяты в конечной точке х = 0.01.
Глава 11. Ломаные и кривые наискорейшего спуска
165
Трение (необязательное добавление) Интересно было бы сделать приведенные выше соображения более «реалистичными», введя трение. Это удивительно легко сделать, так как нужно только заменить формулу (11.9) немного более сложной формулой v = л/2д{с - у - ц х ) , где ц, — коэффициент (кинетического) трения. Это означает, что на бусинку действуют сила тяжести, направленная вниз, направленное по нормали противодействие проволоки и трение, которое есть произведение этого противодействия на /л. Уравнение для v следует тогда из второго закона Ньютона (можете не проверять его, если не хотите!). В результате формула (11.10) (i) для времени передвижения примет вид
с — у — /лх Измените s l i d e 1 ,ши slidelfn.mTaK, чтобы можно было найти параболу наискорейшего спуска для /j = 0.3. Назовите эти М-файлы slide6.m и slide6fn.m . Учтите, что взяв значения fi, несколько большие 0.5, вы можете получить «бесконечное» время передвижения вдоль некоторых парабол. Почему это так?
12 Последовательности вещественных чисел
В этой главе рассматриваются последовательности вещественных чисел, и начнем мы с введения специальных классов последовательностей. Далее приводятся три исследования по изучению их свойств. В первом (А) рассказывается о свойствах последовательностей Мёбиуса, описанных ни лес, тогда как второе (В) целиком посвящено квадратичным последовательностям. В третьем из них (С) большей частью рассматриваются квадратичные и экспоненциальные последовательности, но там снова упоминаются и последовательности Мёбиуса. В каждом исследовании отметьте, какая часть предварительного материала (§§ 12.1-12.3) в нем требуется.
12.1. Последовательности Мёбиуса Рассмотрим последовательности вида Хп-\-\ —
ахп + Ъ •
: , T2 = U , 1 , . S , O . . . . ,
схп + а где a, b,c.d— вещественные числа. Как только вещественное XQ задано, вся последовательность становится определенной и состоит из вещественных чисел. Она называется последовательностью Мёбиуса. В вашем распоряжении имеются два М-файла. Первый из них mobius.m требует ввода чисел a, b,c,d, XQ И числа итераций, подлежащих выполнению, т.е. указания числа членов, которые необходимо вычислить. Полученные значения выводятся в виде столбцовой диаграммы. Второй М-файл mobiusl .m выводит значения последовательных Xi в виде вектора-столбца, используя «format long» для большей информативности. (i) (a,b,c,d) = (1, 2,1,1),Жо = 3. Из mobius .m и mobiusl .m (после 20 итераций) хорошо видно, что последовательность сходится. Предел выглядит подозрительно знакомым. Выполнение вычислений с
12.1. Последовательности Мёбиуса
167
другими значениями х0 дает тот же результат. Обратите внимание, что некоторые значения хо приводят к бесконечным значениям, как, например, хо = —1.5. (В этом случае х% = оо.) Однако здесь это не является серьезной проблемой, поскольку формула говорит, что если хп — со, то хп+\ должно равняться просто а/с. В действительности М-файлы учитывают это и правильно продолжают вычисления после появления бесконечных значений. (На практике это чаще всего очень большие значения, положительные или отрицательные.) М-файл mobius.m воспроизведен в конце этого раздела, чтобы показать вам, как преодолевается проблема «бесконечности». (ii) (a,b,c,d) — (1,1, —2,1),а;о = 3. Выполнение 500 итераций с помощью mobius.m не выявляет наличие предела. Выполнение 20 итераций с помощью raobiusl.mопределенно показывает, что числа скачут очень сильно. Такая последовательность называется «сильно расходящейся», «осциллирующей» или «хаотичной». (ш) (о,6,с,d) — (1,1, —1,1),жо = 3. Это дает повторяющийся цикл из четырех значений 3, —2, — ~, | , наблюдаемый с помощью любого из двух М-файлов. Такая последовательность называется периодической с периодом четыре. Ясно, что здесь возможны различные типы поведения. Если хп -4 I, то и а;„4-1 ~> ^ т а к ч т 0 Д л я двух последних примеров будем иметь соответственно
_ l+ l
2
_
В обоих случаях получается противоречие (вспомните, что у нас только вещественные числа). Поэтому ни одна из этих двух последовательностей не может иметь единственный предел /, но типы расходимости у них различны. Заметьте, что кажущаяся сильно расходящейся последовательность на самом деле может быть периодической с очень большим периодом, и это может быть связано с неточностью вычислений. Нет простого ответа на это — и мы не будем искать его здесь! Будучи примененным к первому примеру, приведенный здесь метод показывает, что если та последовательность имеет предел. то этот предел должен равняться ±у2- He так просто, но все-таки
168
Глава 12. Последовательности вещественных чисел
возможно доказать, что предел существует. Использование «паутинообразной диаграммы», с которой мы скоро встретимся, делает это очень правдоподобным, и фактически на этом можно построить доказательство. Несколько необычно то, что I = — у/2 никогда не станет пределом, пока вы не начнете с XQ = —у/2. Далее здесь приведен М-файл mobius.m. Заметим только, что хп может равняться '±оо'; это происходит, когда хп~\ = —die. Но при этом все еще возможно вычислить хп+\, а именно xn+i = а/с. В действительности «бесконечность» здесь просто означает очень большое число, которое в MATLAB'e обозначается как Inf. '/, М"~файл строит график последовательности Мёбиуса в виде 7, столбцовой диаграммы. 7с Если х - текущий ее член, то следующий член 7(равен (ax+b)/(cx+d) . 7, Константы a,b,c,d вводятся пользователем. 7. Надо будет также ввести число итераций У, и начальное значение хО. a=inputС'Введите а ' ) ; b=inputС'Введите b ' ) ; c=inputС'Введите с ' ) ; d=input С'Введите d О; xO=input('Введите хО ' ) ; n=inputС'Введите число итераций ' ) ; х= [хО] ; for j=l:n if x(j)==Inf j x(j)==-Inf x(j+l)=a/c; else x(j+l)=(a*x(j)+b)/(c*x(j)+d); end end; bar(x)
12.2. Паутинообразные диаграммы
169
12.2. Паутинообразные диаграммы Это схематический способ отслеживания последовательностей по мере выполнения итераций. Для заданной функции у — /{ж), начиная с хо, последовательно вычислим xi = /(XQ), £2 = /(a-'i) и т.д. Начнем с графика у = f(x), добавим к нему прямую у = х и далее сделаем следующее. Из точки (а'о,0) на оси х проведем вертикальную прямую до пересечения с графиком функции в точке (xo,xi), затем отсюда— горизонтальную прямую до пересечения с у = х в точке (xi,xi). Далее процесс повторяется: от точки (x\,xi) проводится вертикальная прямая до пересечения с графиком в точке (х2,жг), затем отсюда — горизонтальная линия до пересечения с у = х в точке (х2,а;г) и т.д. Таким образом можно проследить за поведением последовательности. На рис. 12.1 показаны два примера паутинообразных диаграмм: один представляет собой последовательность Мёбиуса, а другой — квадратичную последовательность (такие последовательности обсуждаются в работе В ниже). Возможно, из второго примера легче понять, почему используется название «паутина»! П а у т и н ы последовательностей Мёбиуса М-файл соЪт.ш строит паутинообразные диаграммы для последовательностей Мёбиуса, используя функцию f(x) — (ax + b)/(cx + d). Требуется ввести a,b,c,d,xo и верхние и нижние границы изменения х и у на диаграмме. Итерации производятся 30 раз или пока не убедитесь, что есть сходимость. В заключение последовательность значений выводится на экран. Заметьте, что если существует вертикальная асимптота к графику функции /, то ее можно заменить почти вертикальной прямой, соединяющей две точки графика. Даем здесь несколько подходящих наборов значений для приведенных выше примеров: 1. В примере (i) нижние границы изменения х и у равны —3, а верхние равны 3, #о = 2 или —2. Если вы захотите увидеть работу файла крупным планом, то положите, например, 1.3 < х < 1.5 и то же самое для у. 2. В примере (ii) нижние границы изменения х я у равны —10, а верхние равны 10, XQ ~ 2. 3. В примере (iii) нижние границы изменения хиу равны —5, а верхние равны 5, хо — 3. В каждом случае достаточно ясно, что происходит. Точки, где график функции / пересекается с прямой у = х,
170 Глава 12. Последовательности вещественных чисел
0.9 0.85 0.8
-
0.7Ё 0.7 0.65 0.6
/
0.55
хх\ 2
2'
0.5 0.45
0.4
0.4
\
0.45
0.S
0.55
0.6
0.65
0.7
'•
0.75
Рис. 12.1. Паутинообразные диаграммы: верхняя соответствует последовательности Мёбиуса, а нижняя — квадратичной последовательности. называются неподвиэюпыми точками функции у, т.е. если положить у = f{x), то они удовлетворяют условию f(x) =• х. Именно эти точки являются предельными для построенной выше последовательности.
12.3. Функции Мёбиуса и степени матриц 171
12.3. Функции Мёбиуса и степени матриц Пусть а
Ь \
ах7
с d у
~"~
cxn+d
Очевидно, имеется тесная связь между матрицей А и последовательностью Мёбиуса. Приведем один из многих способов выражения этой связи. Теорема 1. (i) Имеется вещественное число а (зависящее от п) такое, что 1 Другими
Xn+1
= a I \
}
1
словами, . ( Хп \
если А
Л
( Ш1 A
Wi
.
=
то хп+-\ — —.
lii) Для любого целого к > 1 существует вещественное число 0 (зависящее от к) такое, что
Другими
словами, если Ак
=
Л
.
то хк - — -
Пример 1 Пусть 1 А= ( т
1
2 1
) ,
хо = 3.
Тогда для v — ( 3 , 1 ) получим ,4v = (5, 4 ) т , и а в утверждении (i) теоремы 1 равно 4, a xi = |. Положив к = 4 в {ii); имеем AAv — (75,53) т и хА — Ц = 1.4151; значение (5 есть 53. Пример 2 Если вы наберете format long A=[l 2; 1 1 ] ;
172
Глава 12. Последовательности вещественных чисел
v=[2 1 ] ' ; w=A"20*v;
formatshorte то получите ответ 1.41421356237310, что совпадает с тем, когда вы наберете s q r t ( 2 ) . Согласно (и) теоремы 1, это число есть х2о, если хо = 2. Теорема 1 доказывается непосредственно: для доказательства (i) надо выполнить умножения с обеих сторон и положить а — схп +d. Теперь (ii) доказывается индукцией по к. Случай к — 1 есть просто (i) с п — 0. Полагая (ii) верным при к, будем иметь
В первом равенстве использовано индуктивное предположение, во втором использован тот факт, что /3 есть просто число, а в третьем использовано (i) с заменой п на к. Это завершает доказательство (ii) по индукции. • Если Ак — скалярная матрица, т. е. матрица вида XI, где I — единичная 2 х 2-матрица, то лк { х0 \ __ . ( х0 х
{ 1 )- {
так что Хк — хо согласно утверждению (ii) теоремы 1, т.е. значения последовательности Мёбиуса снова возвращаются к XQ. Таким образом, периодические последовательности могут быть выявлены вычислением степеней соответствующих матриц. Мы можем также двигаться «назад»: например, найдем начальное значение XQ, которое для последовательности _ Zxn + 5 хп + 2 дает XQ = —2. Заметим, что если хо выбрано таким образом, то следующий член х7 будет «бесконечным», поскольку тогда знаменатель XQ + 2 обратится в нуль. Мы хотим, чтобы
для некоторого /3. Это дает (
вV 1 /
_ J- ((
\\ V 1 I
2 2 6 5 8
(( " \ 12649
12.3. Функции Мёбиуса и степени матриц 173 причем вы можете проверить последнее равенство, А" (-6)* [-2 1 ] ' после предварительного ввода матрицы
набрав
5
А=(3
[l
2
(Конечно, вы догадываетесь, что -22658 в действительности есть нечто вроде -22657.999!) Таким образом, х 0 = -22658/12649 = — 1.7913. Если вы воспользуетесь mobiusl.m, чтобы найти xi для этой последовательности (введя предварительно XQ В виде приведенной выше дроби), то обнаружите, что получилось очень большое число. Тем не менее для х$ будет выдано правильное значение 3. Имеется весьма примечательный результат о направлении вектора w — Akv при больших значениях к. Возвращаясь к матрице Л из приведенного выше примера 2, наберите [X D]=eig(A) Вы обнаружите, что один из собственных векторов А параллелен вектору w, полученному в примере 2. Например, вы можете ввести xl=X(:,l) y=xl./w чтобы выделить первый собственный вектор А, а затем сравнить его с w по направлению. Обе компоненты вектора у должны быть приблизительно одинаковыми. Заметьте, что использованный нами собственный вектор соответствует наибольшему собственному значению матрицы .4. Что касается матриц, мы можем легко перейти к случаю 3 x 3 , но заметьте, что на языке последовательностей очевидных аналогий этому нет. Рассмотрите А=[1
2
3;-1
2
-3;1
-2
-3]
и (почти) любой начальный вектор v. Эта матрица имеет один вещественный собственный вектор (—0.5433,0.2849,0.7897), что вы можете обнаружить, набрав [X,D] = eig(A). Он имеет то же направление, что и Anv для больших значений п.
Замечание о двух М-файлах Может так случиться, что степени матрицы А имеют элементы, которые действительно становятся очень большими, и вычисление n вектора A v для больших п может быть рискованным. В вашем распоряжении имеются два М-файла, которые преодолевают эту проблему в том случае, когда нам надо знать лишь направление вектора Anv. Они вычисляют Av, A2v, .4 3 v,..., но после каждого
174
Глава 12. Последовательности вещественных чисел
шага нужно заново провести масштабирование, чтобы ответ был единичным вектором. Они называются matit2.m для 2 х 2-матриц и matit3.m для 3 х 3-матриц. В обоих случаях требуется предварительный ввод матрицы v. Рассмотрите их, если вы любознательны. Следующая теорема, предназначена для тех, кто интересуется теорией. Теорема 2. Если векторы Anv имеют предельное направление, то этот предел должен быть собственным вектором матрицы А. Доказательство. Если по предположению A"v/||>l n v|| —> w для некоторого w ф 0 при п ~> оо, то А(Л 7 1 У/||,4 П У||) —>• Aw, так что j 4w
\\An+lv\\ \\Anv\\ Но здесь при п —> оо первая дробь стремится к w, а вторая к некоторому вещественному числу а. так что в пределе получается равенство Aw = aw, означающее, что w есть собственный вектор матрицы А. Конечно, это не доказывает, что Anv имеет предельное направление, совпадающее с направлением одного из собственных векторов матрицы, а только то, что собственные векторы являются единственно возможными предельными направлениями. •
А. Исследование последовательностей Мёбиуса Цель работы Мы исследуем последовательности Мёбиуса и теоретически, и экспериментально. Но сначала вам нужно вспомнить §§ 12.1-12.3. Используемые математические понятия К их числу относятся матрицы, последовательности, математическая индукция и пределы последовательностей, а также основы дифференциального исчисления в теоретической части работы. Но сначала вам нужно прочесть §§ 12.1-12.3 . Используемые возможности МАТХАВ'а Потребуются только предварительно написанные М-файлы, используемые здесь для итеративного вычисления, нахождения степеней матриц и построения паутинообразных диаграмм. Функции Мёбиуса и матрицы (i) Для значений a, b,c,d, приведенных в табл. 12.1, выясните, используя М-файлы mobius.m и/или mobiusl.m , сходятся или рас-
12.3. Функции Мёбиуса и степени матриц 175 Таблица 12.1. Значения для построения последовательности Мёбиуса
ь
a
2 3 3 1 1
Уз
1 2 2 3 -у/3 -1
с
d
1 4 1 -2
-2 3 2 1 1
Уз 1
ходятся соответствующие последовательности Мёбиуса, а в последнем случае выясните, возникает ли «хаотичная расходимость» или же периодичность (периодическое повторение значений). Выпишите ваши результаты, заданные вами исходные значения хо и число сделанных итераций. Воспользуйтесь также М-файлом cobm.m для вычерчивания паутинообразных диаграмм. Для перехода к следующей итерации пользуйтесь клавишей <Enter>. Сделайте грубый набросок диаграмм на бумаге для тех случаев, когда вы установили, что последовательность является сходящейся или периодической, указывая при этом ваши области значений х и у вместе с начальными значениями Хо. Замечание: При задании входных параметров воспользуйтесь выражением s q r t ( 3 ) —тогда MATLAB подставит численное значение в программу. (ii) Возьмите те же примеры, что в предыдущем упражнении, связывая параметры (а, Ь, с, d) с матрицей а Ь с d Воспользуйтесь матричным умножением MATLAB'а, чтобы проверить, что для периодической последовательности некоторая п-я степень матрицы (п равно длине периода) будет скалярной матрицей, т.е. матрицей вида XI-
(
где / — единичная 2 х 2-матрица. Выпишите значения А в каждом случае. Проверьте также, что для (a,b,c,d) ~ (1,1,-1,1), четвер-
176
Глава 12. Последовательности вещественных чисел
тая степень матрицы является скалярной матрицей, и выпишите значение А. (Hi) Какова связь между последней матрицей А. для которой АА — А/, и тем, что соответствующая последовательность Мёбиуса является периодической с периодом 4 (см. § 12.3)? (iv) Для какого примера из упражнения (i) М-файл matit2.m дает предельное направление последовательности степеней .4"v? Отметьте компоненты вектора v, которое вы использовали, и полученное предельное направление. Проверьте путем вычислений, что это собственный вектор матрицы А. Найдите оба собственных вектора в этих случаях. (v) Для (а,Ь,с,d) = (1,2,1,1), найдите обращение соответствующей матрицы (например, воспользуйтесь командой inv(A)). Отсюда найдите (точно) начальное значение XQ, ДЛЯ которого х*> = оо. Есть ли возможность найти такое XQ, ЧТО X$Q — оо? (vi) Эта часть не имеет никакого отношения к последовательностям Мёбиуса, но касается степеней 3 х Z-матриц. Сравните с § 12.3. Рассмотрим популяцию жуков из трех видов: черных, красных и зелёных. В момент t — 0 имеется 10 черных жуков, но нет ни красных, ни зеленых. В момент t = 1, одновременно происходят три следующих события: (a) каждый черный жук делится на черного, двух красных и зеленого; (b) каждый красный жук делится на черного и двух зеленых; (c) каждый зеленый жук делится на трех красных. То же происходит и в моменты t = 2,£ — 3 и т.д. В этой задаче жуки бессмертны (это, конечно, чистая математика). Как можно с помощью матричных итераций для больших значений t определить в популяции процент черных, красных и зеленых жуков? Влияет ли на результат исходная популяция (на момент t = 0)? Связано ли это с одним из собственных векторов матрицы? Подсказка: Рассмотрите матриц}'
12.3. Функции Мёбиуса и степени матриц 177 Теория последовательностей Мёбиуса Здесь мы познакомим вас с некоторыми элементами теории этих последовательностей. Проиллюстрируйте их подходящими примерами, используя имеющиеся М-файлы. (vii) Пусть f(x) = (ax + b)/(cx + d), где с ф О и ad — Ьс ф 0. Неподвижными точками функции / называются числа х такие, что f(x) — .т. Покажите, что если (а — d)2 + 46с > 0, то существуют две вещественные неподвижные точки, скажем, а и 0. (viii) что
Вспоминая, что £ п +] — f{xn), f(a) = a, f(0) = /?, покажите,
(^±£\ (Х
хп-в
Подсказка: Сначала покажите, используя равенство о ~ (аа 4- Ь)( (са + d), что _ (ad — Ьс)(хп — а) x i — о — • -r-j (cx n + aJ(cQ + a) n +
и выпишите такую же формулу для хп+\ — /3. Теперь выведите повторным применением формулы (12.1) для п — \,п — 2 , . . . , что
хп - a хп - р
fc0 + d\n fxQ - a \са + dj
\хо - /9
(ix) Покажите, что /'(а) - (с/Э + d)/{ca + d), a /'(/3) = {са + d)j (ф + d). 2 Подсказка: Легко проверить, что f'(x) = (ad — be)/(ex + d) . Вспо2 миная, что a и 0 являются корнями уравнения ex — (a — d)x — h = 0, выведите, что (са + d)(c0 + d) = ad — be. (x) Выведите, что если j f'{a) |< 1, то хп —> а при п - я х . (xi) Покажите, что если (a — d)2 + Abe < 0, то неподвижные точки — невещественные. Почему отсюда следует, что последовательность {хп} не имеет предела?
В. Притягивающие циклы Цель работы Эта работа посвящена последовательностям, образованным итерированием квадратичной (степени 2) функции. Эти последовательности обычно не имеют единственного предела, а имеют «несколько 12-4196
178
Глава 12. Последовательности вещественных чисел
пределов» в том смысле, что последовательные значения последовательности близко подходят к совокупности различных чисел. Мы рассмотрим эти «притягивающие циклы» и математически, и экспериментально. Больше подробностей относительно использованной здесь математики можно найти в [2] 1 '. Чтобы выполнить данную работу, не нужно читать материал о последовательностях Мёбиуса.
Используемые математические понятия Мы используем последовательности вещественных чисел, заданных квадратичной формулой. В вычислениях применяются некоторые преобразования полиномов и точечных изображений кривых, необходимых в расчетах.
Используемые возможности MATLAB'a В работе применяются предварительно написанные М-файлы для анализа квадратичных последовательностей, а также численное нахождение корней полиномов. Мы не будем особенно углубляться в теорию притягивающих циклов; цель нашего исследования — это построить несколько примеров. Введем f(x) — Ах(1 — х) и xn+i = f{xn), n — 0,1,2,... , чтобы определить квадратичную последовательность XQ,XI,X2-, • • • • К а к только А задано, эта последовательность определяется первым членом XQ. р Обозначим через / преобразование, осуществляющее р итера2
ций функции/, т. е. } {х) = f{f{x)),f'(x) = f(f{f(x))) и т.д. Тогда p
хр = f (xo). Для данного значения р. мы, в частности, хотим найти значение А, такое, что
Г (I) I Это нам нужно для получения следующего результата: если А имеет такое значение, что выполняется (12.2), то для некоторого q, являющегося делит,елем р, числа | , / г ( | ) , i = 1,... ,q — 1 образуют «притягивающий д-цикл». Это означает, что если вы начнете с XQ из интервала (0,1) и будете итерировать посредством /, то значеk ния f {xo), k — 1,2,3,... , будут последовательно располагаться вблизи этих q чисел. 1 > Здесь следует назвать и работу: M.J. Feigenbaum. Universal behavior in nonlinear systems. — Los Alamos Science, 1980, v.l, JY* 1, pp. 4-27, давшую толчок многим последующим исследованиям по данному вопросу. Ее русский перевод опубликован в УФН, 1983, т. 141, вып. 2, с. 343-374. — Прим. перев.
12.3. Функции Мёбиуса и степени матриц 179 (i) Для р — 2 покажите, что /2{ж) = А2.т(1 - х)(1 — \х + Хх2), а затем покажите, что уравнение (12.2) принимает вид А3 - 4А2 +8 = 0. Задайте его коэффициенты как вектор v (начиная со старшего члена) и воспользуйтесь r o o t s ( v ) , чтобы найти корни этого полинома. Отбросьте отрицательный корень. Один положительный корень равен 2; для этого корня проверьте, что действительно /(-у) = ^. Для другого корня примените cobq.m чтобы подтвердить, что. начиная с произвольного XQ, значения последовательности приближаются к двум числам. Выпишите эти числа, какими получили их из М-файл а. (ii) М-файл quadn.m строит график любой итерации / (для любого заданного А) и на нем же проводит зеленым цветом прямые х — ~ и У ~ \- Он позволит вам менять значения А без изменения других параметров. На экране появляется инструкция. Обратите внимание, что, после того как график нарисован, вам нужно нажать <Enter>, чтобы передать управление командному окну МАТХАВ'а. Затем вам будет предложено нажать 0, чтобы завершить работу, или 1, чтобы выбрать другое А. Используя точку ( | , | ) , можно получить очень точное значение А, для которого выполняется уравнение (12.2). (Уточняйте А, пока график / не пройдет через точку пересечения зеленых прямых.) Примените это к третьей итерации / 3 и найдите значение А, близкое к 3.83, которое удовлетворяет уравнению (12.2). Вы должны быть способны получить по крайней мере еще пару десятичных цифр, разумно используя М-файл. После того как вы найдете А, воспользуйтесь cobq.m, чтобы проверить, что для различных XQ последовательность приближается к «притягивающему 3-циклу», как было и в (i). Выпишите числа, входящие в этот 3-цикл. Для каждого XQ, которое вы использовали, установите, как много итераций потребуется, чтобы последовательность приблизилась к этим числам с точностью до четырех десятичных знаков. (iii) Для р = 6 уравнение (12.2) имеет решение вблизи 3.63. Найдите это решение как можно точнее, используя quadn.m, и примените cobq.m, чтобы найти набор из шести чисел («притягивающий 6-цикл»), к которому приближается последовательность. При р — 16 имеется решение, близкое к А — 3.55. Дает ли это притягивающий 16-цикл? Разберите подробно это (конечно, используя эти М-файлы). 5 2"
180
Глава 12. Последовательности вещественных чисел
(iv) Покажите, что (12.2) для р = 3 имеет вид Л7 - 8А6 + 16Л5 + 16Л4 - 64Л3 + 128 = 0. Задайте его коэффициенты как вектор v (начиная с коэффициента 1 при старшем члене) и найдите корпи этого полинома с помощью команды r o o t s (v). He принимайте во внимание отрицательные вещественные корни и комплексные корни. Один корень должен быть равен 2; проверьте, что для этого А справедливо / ( | ) — ^. Для другого корня примените cobq.m, чтобы проверить, что действительно имеется притягивающий 3-цикл, и выпишите числа, входящие в него (вы должны получать одни и те же числа, с какого бы .го из (0,1) вы не начали). (v) Для р = 4 имеется решение вблизи А = 3.5. Найдите это решение с несколько большим числом десятичных цифр, используя quadn .m, и используйте его в cobq.m, чтобы найти числа из получающегося притягивающего 4-цикла. (vi) Покажите, что график у = f(x) пересекает у = х, когда х = 0 или х = 1 — j . Докажите, что для 0 < А < 1 график у — f(x) находится целиком ниже прямой у = х при 0 < х < 1. Объясните с помощью нарисованной от руки паутинообразной диаграммы, почему кажется очень правдоподобным, что для любого XQ при 0 < хо < 1 полученная квадратичная последовательность сходится к 0. Для 1 < А < 2 покажите, что при 0 < х < 1 график у — f(x) пересекает прямую у = х только один раз, а именно когда х = 1 — j . Вычислите наклон графика у = f(x) в этой точке и покажите, что он положительный. Снова с помощью нарисованной от руки паутинообразной диаграммы объясните, почему это делает правдоподобным сходимость полученной последовательности для 0 < XQ < 1. Чему равен предел на этот раз? Подтвердите ваше утверждение с помощью примеров, используя нужные М-файлы. (vii) М-файл perdoub.m (от «period doubling» — «удвоение периодов»!) берет 100 значений А между заданными вами пределами 11 и 12. Для каждого из них вычисляются числа х\,... , жюо {с XQ = | ) и только члены, начиная с 75-го, изображаются на вертикальной прямой над значением А. Таким образом, изображение имеет оси А, ж, где 11 < А < 12 и 0 < х < 1. На рис. 12.2 показан график для 1 < А < 4. Попробуйте выполнить его для И — 0, 12 = 2. Как полученный график подтверждает сказанное выше в (vi)?
12.3. Функции Мёбиуса л степени матриц 181'
Рис. 12.2. Диаграмма, «удвоения периода». Для каждого значения Л на горизонтальной оси точки, расположенные выше нее, есть значения х из получающегося притягивающего цикла. Так, для А после 3.5 образуются все более и более длинные притягивающие циклы. Попробуйте выполнить его для Л = 2, 12 ~ 3.5. Что вы наблюдаете? (viii) (Необязательное дополнение.) Между Л ~ 3.9 и Л — 4 имеется еще несколько притягивающих циклов. Найдите некоторые из них, используя этот М-файл самым выгодным для вас образом. (При этом нужно работать достаточно систематически.)
С. Квадратичные и экспоненциальные последовательности; неподвижные точки Цель работы II эта работа посвящена последовательностям, их пределам и их притягивающим циклам — множествам чисел, к которым приближаются члены последовательности. Мы изучим два типа последовательностей: квадратичные (как выше в работе В) и экспоненцих 2 альные, например х, 2 , 2' ' и т. д. (Экспоненциальные последовательности детально обсуждаются в [2].) В частности, мы будем изучать «неподвижные точки» последовательностей и свяжем их со сходимостью. В данном исследовании есть кое-что и о последовательностях Мёбиуса (их определение см. в § 12.1). Может быть,
182
Глава 12. Последовательности вещественных чисел
вы захотите заглянуть в § 12.2. где описаны «паутинообразные диаграммы».
Используемые математические понятия Основное математическое понятие —это понятие последовательности вещественных чисел. Теоретическая часть исследования включает математический анализ и преобразования функций.
Используемые возможности MATLAB'a Используются предварительно написанные М-файлы. Вам потребуется изменить М-файл. который строит паутинообразные диаграммы квадратичных последовательностей так. чтобы он мог работать и с «экспоненциальными последовательностями».
Паутины квадратичных последовательностей Общее обсуждение паутинообразных диаграмм вы найдете в § 12.2. М-файл cobq.m строит паутинообразную диаграмму для последовательности где Л —заданное вещественное число, которое мы выбираем > О, т.е. используемая нами функция есть у = f(x) = А.т(1 — х). Попробуйте, например, взять Л = 3.9221934. xl = 0, хи — 1, yl = О, у и = 1, хО — 0.5. (Как обычно, xl обозначает нижний предел изменения ж, через хи обозначен верхний предел, a yl, уи — нижний и верхний пределы изменения у.) Сделайте 20 итераций. Вы получите 7-цикл значений — так называемый сверхпритягивающип 7-пикл.
Квадратичные и экспоненциальные последовательности. (i) Примените М-файл cobq.m к вариантам данных, представленным в табл. 12.2. После того как паутинообразная диаграмма построена, а значения Х{ выданы, один взгляд на них может подтвердить ваш вывод из вида диаграммы о типе последовательности (сходящаяся/ периодическая/ хаотичная). В таблице 12.2 приведены значения входных параметров; п — число итераций. В каждом случае установите тип поведения рассматриваемой вами последовательности; в случае сходимости укажите предел, а в случае периодической последовательности приведите длину периода и значения х, образующие период. Обратите внимание, что здесь «сходящейся» называется последовательность, члены которой приближаются к единственному предельному значению. С другой стороны, «периодической» с периодом к называется последовательность, для которой существуют к чисел h,... Jk и значения
12.3. Функции Мёбиуса и степени матриц 183 Таблица 12.2. Параметры для получения квадратичных последовательностей Л 2.5 3.2 3.4 3.5 3.8
3.83
0.5 0.5 0.5 0.5 0.5 0.5
xl
XU
yi
уи
п
0.5 0.4 0.4
0.7 0.9 0.9 0.9 1 1
0.5 0.4 0.4 0.3 0
0.7 0.9 0.9 0.9 1 1
20 20 40 20 50 20
0.3 0
0
0
последовательности приближаются последовательно к этим к числам. (Если вы начнете, скажем, c i o = l\, го последовательность и самом деле проделает цикл h,--- и обратно к 1-[. Как и в исследовании В, говорят, что числа l\,... ,h- образуют притягивающий к-цикл.) Итак, вы смотрите на числа, образующие последовательность, и видите, располагаются ли они возле одного числа или же проходят в неизменном порядке возле некоторого набора чисел. (ii) Внесите изменения в М-файл cobq.m, необходимые для построения графика у — кх, где к — заданное вещественное число, и проитерируйте эту функцию, вычерчивая, как и раньше, паутинообразную диаграмму. (Назовите полученный М-файл cobexp.m.) Это сводится к простой замене в М-файле cobq.m квадратичной функции на функцию у ~ кх. Обратите внимание, что для заданного значения к рассматриваемая здесь последовательность есть х. кх, к-(к*> и т.д. Она называется экспоненциальной последовательностью. Не забудьте, что поскольку в этом М-файле х — это вектор значений, то мы должны писать к. ~х Исследуйте последовательность, начинающуюся, например, с XQ — 0, на сходимость и выясните, если она сходится, то к какому пределу. Если это зависит от значения к, то попробуйте найти значения к, при которых поведение последовательности меняется. Приводим здесь некоторые значения для ввода в cobexp.m, с которых вы могли бы начать: fc = 0.05,
z/ = -0.1,
xu~l.l,
i//=-0.1,
yu = l.l;
к — 0.5,
xl —-Q.1,
хи = 1.1,
у! = — 0.1,
уи = 1.1;
к — 1.4,
xl = 0,
хи = 5,
yl — 0,
уи ~ 5;
к — 1.5,
xl = 0 ,
хи ~ 10,
yl = 0,
уи — 10.
184
Глава 12. Последовательности вещественных чисел
Как помощь при обдумывании того, что произошло между к — 1.4 и к = 1.5, рассмотрите место, где прямая у = х пересекает кривую у = кх. Покажите, что это как раз там, где к = х1^. Набросайте график кривой у = х1/*. Подсказка: Используйте хг'х = eln'3e''x и покажите, что производная ж1/* равна хх1х{\ — 1п(х))/х2. Чему равно наибольшее значение, принимаемое этим у? (Ответьте на этот вопрос, используя для нахождения максимума у методы математического анализа.) Как это связано с поведением экспоненциальной последовательности?
Неподвижные точки Неподвижной точкой функции / называется число х, такое, что f(x) = х. Рассмотрим функции f(x) = (ах + b)/(cx + d), где с ф 0. и /(х) = Хх(1 — ж), где А > 0. Каковы их вещественные неподвижные точки (если такие имеются)? Пусть а — вещественная неподвижная точка. Она называется притягивающей, если | /'(а) |< 1; отталкивающей, если | f'(a) \> 1; индифферентной, если ] / ' ( а ) |= 1. Общая идея состоит в том, что если хо находится вблизи притягивающей неподвижной точки а, то итерации хп будут притягиваться к а, т. е. хп —> а при п —> оо. Подобным образом, если хо находится вблизи отталкивающей неподвижной точки а, то уже Xi будет находиться дальше от а. В случае индифферентной неподвижной точки может случиться что угодно. Ниже во всех примерах, кроме (vii), вы можете выбирать такое начальное значение хо, чтобы 0 < XQ < 1. (iii) В случае /(х) = Ах(1 — х) покажите (используя математический анализ, а не компьютер!), что единственными значениями А > 0, дающими индифферентные неподвижные точки, являются А = 1 и 3. Воспользуйтесь имеющимися М-файлами, чтобы узнать, что происходит с последовательностями хп в этих случаях. (iv) Покажите, что для /(ж) = (—Зх — 2)/(4а: + 3) обе неподвижные точки индифферентны. Воспользуйтесь имеющимися М-файлами, чтобы исследовать поведение последовательностей в этом случае. В общем случае покажите, что для /(ж) = (ах + Ь)/(сх -4- d) обе неподвижные точки индифферентны, когда a + d~Q nad— bc= —1. (v)
Исследуйте неподвижные точки и поведение функции f(x) =
12.3. Функции Мёбиуса и степени матриц 185 (vi) Найдите по одному примеру последовательности Мёбиуса (f(x) = (ax+b)/(cx+d)) и квадратичной последовательности (/(ж) = Хх(1 — х)) с притягивающими неподвижными точками и определите с помощью имеющихся М-файлов, действительно ли эти точки являются пределами последовательностей. (В случае последовательности Мёбиуса, вероятно, вам легче будет догадаться, чем мучительно искать положение притягивающей неподвижной точки.) (vii) Исследуйте индифферентные неподвижные точки функций f(x) = —х и f(x) = х2 + х. (В этом случае, возможно, вы захотите взять XQ вне отрезка 0 < XQ < 1.)
13 Итерации Ньютона-Рафсона и фракталы
Цель работы Здесь мы изучаем последовательности точек комплексной плоскости, пределами которых являются корни некоторых простых уравнений. Последовательности порождаются с помощью комплексного варианта хорошо известной формулы Ньютона—Рафсона. В частности, мы сравним случай квадратного уравнения с случаем кубического уравнения (большего различия быть не может!). Детальное обсуждение метода Ньютона—Рафсона для вещественных уравнений вы найдете в гл. 15. По фракталам имеется много полупопулярных книг, см., например, [14].
Используемые математические понятия Используются комплексные числа, включая решение квадратных уравнений с комплексными коэффициентами. Кроме того, используются некоторые кубические уравнения. Привлекается кое-что из планиметрии, например биссекторы.
Используемые возможности MATLAB'a Эта работа использует возможности MATLAB'a для изображения точек и прямых на плоскости. Здесь точки будут представлять комплексные числа в обычных диаграммах Аргана 1 '. Для вас написаны основные М-файлы, в которые надо будет внести изменения, чтобы использовать их в других примерах.
13.1. Введение Вы, наверное, встречались с методом Ньютона—Рафсона приближения корней уравнения f(x) = 0. Коротко говоря, в нем задается *J Имеется в виду обычная геометрическая интерпретация комплексных чисел х + гу точками {я:, у) в декартовых координатах. — Прим. перев.
13.2. Уравнение z2 + 1 = 0
187
некоторое начальное приближение XQ К корню и по нему вычисляются последующие приближения х\, х%, х з , . . . . где хк+1 =
Х
к
А: = 0,1,2,... .
~ ^ \ ,
(13.1)
В данной работе мы применим этот метод к решению некоторых комплексных уравнений 1 ).
13.2. Уравнение z2 + 1 = О Как вы знаете, это уравнение имеет решения ±г. (Так как переменная комплексная, мы будем обозначать ее через z.) Для этого уравнения НР-формула (13.1) принимает вид Zk х + 1
_ k
fL+i = fLnl. 2zk
2zk
Пусть N(z) — ^2~^> тогда zk+\ = N(zi?)- Выбрав начальное приближение для z (лучше отличное от 0), получим последовательные приближения для корня N(z),N2(z) = N(N(z)), N3 (z) = N(N2(z)) и т. д. Обратите внимание, что в этой работе мы должны проявить осторожность, различая итерации, т.е. повторное использование одной и той же функции, как это мы делали выше с N, и возведение в степень. Если мы хотим выписать, например, четвертую степень N(z), то, используя скобки и положение показателя степени 4, должны записать это как (N(z))4. Для начала немного теории. Вам нужно записать это, дополняя деталями. Мы хотим узнать, к какому корню сходятся числа Nk(z) при к -> ос (если они вообще сходятся). (i) Определим T(z) как T(z) — |^4 (это, конечно, связано с тем фактом, что корни уравнения z2 + 1 = 0 суть г и —г). Проверьте подстановкой N(z) в Г, что T(N(z)) — (Т(г)) 2 ; повторное применение этого показывает, что T{N2(z)) = (T{N(z)))2 = (T(z))\ Каков будет здесь общий результат? Какой степенью T(z) будет k T(N (z))'? (Подсказка: эта степень не равна 2к. Для начала попробуйте найти T(N3(z)).) i
' В литературе он обычно называется методом Ньютона. Для кратных корней он требует модификации. — Прим. перев.
188 Глава 13. Итерации Ньютона-Рафсонп и фракталы (и) Почему \T(z)\ — 1 тогда и только тогда, когда z равноудалено от г и —г ? {Вспомните, что \z — a\ есть расстояние между комплексными числами z и а.) Пусть I,—множество точек z, обладающих этим свойством. Что представляет собой L? Нарисуйте его на диаграмме Аргана комплексных чисел. Из определения следует, что точки по одну сторону от L удовлетворяют условию fTfz)! > 1, а точки по другую сторону удовлетворяют условию |Т(г)| < 1. Какая сторона соответствует каждому из условий? (iii) Предположим, что |Т(г)[ < 1. Почему из этого следует, что (T(z))r -*• 0 при г -> сю? (Подсказка: \(T(z))r = \T(z)\r.) Выведите из сказанного, что при к -> оо мы имеем T(Nk(z)) -4 0. Почему отсюда следует, что Nk(z) -> i? Каков соответствующий результат в случае |T(z)j > 1 ? (Подсказка: Положите ljT(z) — U(z), так что тогда [Lr(^)| < 1; затем примените те же аргументы (проверьте U(N(z)) = (U(z))2), принимая во внимание, что U~i(0) = —г.) (iv) Теперь рассмотрим две области на плоскости:
R+ = {z:Nk(z) -¥ г при fc -^ оо}; R^-{z:Nk(z) -t -i при к -* ос}. Нарисуйте диаграмму, изображающую эти области, линию L и корни i И —г. Назовем R+ областью притяжения для корня +i, и, аналогично, R- называется областью притяжения для корня —г. Покажите, что если z принадлежит линии L (общей границе и TO k двух областей Я+ R-)-, N (z) остается на L для всех значений к. (Это легко сделать, поскольку вы знаете, что представляет собой X.) Так что в этом случае итерации вообще не сходятся ни к какому корню 1 '.
13.3. Общие квадратные уравнения (i) М-файл cnrl.m (enr означает complex Newton—Raphson — комплекс Ньютон—Рафсон) принимает любые два комплексных числа 1
' Здесь следует отметить достаточно тонкую ситуацию. Точка оо является неподвижной для преобразования N(z), хотя это не корень исходного уравнения k i /(г) = 0. На fc-й итерации 2 ~ конечных точек Zi из L попадут в оо {для к — 1 1 это г — 0, а для к > 1 это все те z, для которых Л'*~ (г) = 0), и с ростом к они образуют в L всюду плотное множество. Из-за ошибок округления эта ситуация в вычислениях автоматически не реализуется, но для небольшого к приближенные значения всех Z{(k) можно при желании найти. —Прим. перев.
13.3. Общие квадратные уравнения
189
р, q и выдает квадратное уравнение z2
+
о,2 + 6 = 0,
(13.2)
имеющее эти числа своими корнями. Таким образом, как хорошо известно, о — — р — q. b = pq. В этом случае формула НыотонаРафсона (13.1) -заменяет текущее приближение z на
Этот М-файл случайным образом выбирает точку z и соединяет ее последовательно с комплексными числами Лг(2)> Л г 2 (г),Л г 3 (г).... пока они не подойдут очень близко к одному из корней р, q (помеченных на графике большими крестами, красным и зеленым). Таким образом полученная ломаная показывает, как метод постепенно строит приближения к корню уравнения. Чтобы выбрать другую случайную начальную точку, нажмите <Enter>. М-файл позволяет выбрать десять таких начальных точек. Попробуйте запустить М-файл и в качестве корней ввести Г и —г. От вас требуется указать границы квадратной области диаграммы Аргана, выводимой на дисплей, а именно xl < х < xu,yl < у < уи, задавая последовательно х/, жи, yl (уи вычисляется автоматически). Посмотрите, какие итерации устремляются к Г, а какие к —i; это должно согласовываться с приведенной теорией. Попробуйте запустить М-файл, взяв в качестве корней, например, 1 + 2Г и 3 + 4г и область 0 < х < 5 , 0 < у < 5 . Есть ли у вас соображения о том, какие начальные точки приводят в 1 + 2г, а какие в 3 + 4г? (и) М-файл cnr2.m выбирает случайным образом 500 начальных точек и рассчитывает, что произойдет с ними после итераций по формуле Ньютона—Рафсона для такого же квадратного уравнения z2+az + b = Ос корнями р, q. На графике корни р и q помечены соответственно красным и зеленым крестами. Те начальные точки, которые устремляются к первому корню (р). изображаются маленькими красными кружками, а те, которые устремляются ко второму корню (у), изображаются маленькими зелеными кружками. Выполните те же примеры, какие были в задаче (i), и несколько других. Выпишите значения р и q, которые вы использовали, а также границы х и у и сделайте набросок линии L, разделяющей две «области притяжения», для каждого примера, рассмотренного вами. (Область притяжения для р содержит все те начальные точки z, которые порождают последовательности, сходящиеся к р.)
190 Глава 13. Итерации Ньютона-Рафсона и фракталы Сможете ли вы догадаться, какой вид имеет линия L, которая разделяет две «области притяжения» в случае общего квадратного уравнения? Подтверждает ли это ваше предположение в задаче (i)? (iii) Руководствуясь следующими подсказками, найдите теоретически линию раздела областей притяжения для общего квадратного уравнения с разными корнями p,q. Пусть отображение Ньютона—Рафсона снова задано в виде (13.3) и пусть
где, как и раньше, р и q являются корнями квадратного уравнения (13.2). Пусть L есть множество точек z на плоскости, для которых |Т(.г)| = 1,т.е. \z—p\ — |г—{j|. Нарисуйте диаграмму, чтобы показать как L связано с р и q. Проверьте, что T(N(z)) = (T(z))2, как и в § 13.2. Как и там, отсюда следует, что T(Nk(z)) = равняется T(z) в какой-то (в какой?) степени. Дальнейшее доказательство распадается на два случая в зависимости от того, по какую сторону от L находится начальная точка z. Эти две стороны различаются неравенствами |T(z)| < 1 и |Г(г)| > 1. Используя те же доводы, что и в § 13.2, покажите, что если \T(z)\ < 1, то T(Nk(z)) -> 0 при k -J- оо, и, следовательно, Nk(z) -*• р. Аналогично, если \T(z)\ > 1, покажите (используя, наk пример, U = 1/Т, как в §13.2), что N (z) —» q. Таким образом, L является разделяющей две области линией. k
Можете показать, что если z лежит па L, то все N (z) также лежат на L? Что произойдет, еслир — q? Сначала выполните c n r l . а и cnr2.m для нескольких вариантов равных корней и понаблюдайте, что произойдет. Сформулируйте общий результат и докажите его. (Подсказка: Примените T{z) = z — p.) (iv) Возвращаясь к случаю р ф q, выясните, что произойдет, если мы возьмем наше начальное приближение z на разделяющей ли2 нии L1 Случай г + 1 = 0 является типичным, и здесь, как вы должны уже понимать, L есть ось х\ В задаче (iv) из § 13.2 вы показали, что если z лежит на L, то там же будет и N(z): все итерации 2
3
N{z),N (z),N (z),...
лежат на L.
Проиллюстрируйте это, преобразовав c n r l .m в спгЗ .m так, чтобы было р = г, g = —г, границы изображения были в диапазонах —10 < х < 10, —10 < у < 10, а единственная случайная начальная
3
13.4. Кубическое уравнение z — г = 0
191
точка, z лежала на прямой L. Белые кружки должны быть помещены в эту точку и в каждую из 100 последовательно вычисленных точек командой plot(real(z),iraag(z),'wo') Вам также необходимо значения z (которые в этом примере теоретически должны быть вещественными, так как все они принадлежат L) сохранить в векторе xvalue. Вы сделаете это, задав исходное состояние xvalue= [] ; и затем после каждого вычисления z выполняя xvalue= [xvalue, r e a l ( z ) ] ; После окончания вычислений выведите график этих значений как функции порядкового номера, выполнив plot([0:100],xvalue) ^ Распечатайте этот график. Не говорит ли это о том, что величины, полученные методом Ньютона—Рафсона, ни к чему не сходятся, если начальная точка лежит на L1 Дайте обоснование вашего ответа.
13.4. Кубическое уравнение г 3 — z — 0 Теперь рассмотрим кубическое уравнение г3 — z = 0, которое имеет корни р = — 1, д = 0 и г = 1, Проверьте, что тогда формула Ньютона—Рафсона примет вид
Мы хотим найти области притяжения, т. е. область плоскости Д_1 = {z : Nk(z) -» - 1
при
к -> оо}
и аналогично определенные RQH R\. Вы увидите, что это довольно сложная задача. (i) Измените cnr2.m так, чтобы его можно было применить в данном примере и чтобы он выводил на график кружки трех цветов: ^ Достаточно без всякого накопления выполнить команду plot(real(z)). По поводу сходимости итераций на L см. наше замечание в самом конце § 13.2. — Прим. перев.
192 Глава 13. Итерации Ньютона-Рафсона и фракталы
Рис. 13.1. Крупномасштабный вид части области притяжения для корня г — 1 кубического уравнения г — z — 0.
кружок в точке (х,у) изображается определенным цветом, если НР-итерации для начального значения z — х + гу сходятся к определенному корню. Вам нужно взять 1000 случайных точек в качестве начальных. Полученный М-файл назовите cnr4.m. (ii) Выполните программу для xl ~ —2, xu — 2, у/ = —2 (так что х и у изменяются от —2 до 2). Сделайте грубый набросок трех областей притяжения. Теперь выполните программу для xl = —0.6, хи = —0.4, yl = —0.1, сосредоточив внимание на небольшом участке предыдущего графика. (Отметьте приблизительно этот участок на вашем первом наброске.) Снова сделайте грубый набросок трех областей притяжения. Области притяжения в случае этого, очень простого на первый взгляд кубического уравнения на самом деле являются бесконечно сложными образованиями в том смысле, что под каким бы увеличением вы ни разглядывали их, они все равно выглядят сложными (подобно множествам Мандельброта). Рисунок 13.1 получен с помощью программы, очень похожей на спг4.ш, за исключением того,
13.4. Кубическое уравнение 2 3 - г = 0
193
что она пробегает экран пиксел за пикселем вместо того, чтобы выбирать большое количество случайно разбросанных точек. На нем изображена область притяжения корня г = 1 для xl = —0.6, хи = —0.4, yl = —0.1. Каждый маленький нарост и изолированные островки вокруг главного образования при более тщательном рассмотрении оказываются бесконечно сложными. Область притяжения является фрактальным множеством: под каким бы сильным увеличением вы ни разглядывали его малую часть, она не выглядит хоть немного проще. Как вы можете видеть, природа кубической и квадратичной зависимостей различается очень сильно!
14 Перестановки
В этой главе описываются две работы. Первая (А) — о случайных перестановках конечного множества, циклах и матрицах перестановок. Вторая (В) посвящена исследованию тасования карт, вводящему много стандартных понятий, включая идеальное и приближенное тасование внахлест.
А. Разложение на циклы Цель работы Мы используем MATLAB, чтобы исследовать «случайные* перестановки, особенно их разложения на непересекающиеся циклы. Имеется теоретическое и экспериментальное исследование [5] о среднем числе непересекающихся циклов, встречающихся в случайной перестановке. Основной материал по перестановкам обычно излагается в начальных курсах по высшей (абстрактной) алгебре: см., например, [11].
Используемые математические понятия В этом исследовании рассматриваются перестановки конечных множеств, разложения на непересекающиеся циклы, порядок перестановки и перестановочные матрицы. Понятие порядка перестановки связано с понятием наименьшего общего кратного {НОК) множества целых чисел. Также среднее число непересекающихся циклов, встречающихся в перестановках заданного конечного множества, исследуется как экспериментально, так и теоретически. Замечание: Мы всегда записываем композицию перестановок справа налево: запись 7Г27Г1 означает «выполни сначала TTI, а затем выполни 7Г2».
Используемые возможности MATLAB'а Один М-файл порождает «случайные» перестановки последовательных чисел 1,2,... , п, а другой разлагает перестановки на непересекающиеся циклы. Вам потребуется внести изменения в них,
Глава 14. Перестановки
195
чтобы вычислять длины циклов и наименьшее общее кратное этих длин. К тому же вам будет нужно перссчитываать общее число непересекающихся циклов в перестановке и усреднить его по большому числу проб. Перестановка чисел 1,2.... ,п есть их перегруппировка в некотором порядке. Например, при п = 8 перестановка 1 2 3 4 5 6 7 8 \ 7 3 8 6 5 4 1 2 ^ 1
^
>
переводит 1 в 7, 2 в 3, З в 8 и т.д. Перегруппировка просто записана в нижней строке, которую мы будем обозначать как вектор р. Любая перестановка может быть записана в обозначениях непересекающихся циклов. Для тг это даст представление (17)(238)(46)(5), которое означает, что 7г можно получить, оставив 5 на месте; переставив 4 на место 6, а 6 на место 4; переставив 2 на место 3, 3 на место 8, а 8 на место 2 и переставив 1 на место 7, а 7 на место 1. Цикл (46) называется 2-циклом или транспозицией, (238) называется 3-циклом и т. д. Часто «1-цикл» (о) опускается при такой записи, но здесь мы будем включать его. Нас будет интересовать (кроме всего прочего) общее число непересекающихся циклов в представлении перестановки. В случае тг из (14.1) оно равно 4. (Достаточно понятно и верно, что разложение перестановки тг на непересекающиеся циклы полностью определяется самой тг, исключая то, что циклы могут быть записаны в другом порядке и элементы каждого цикла сами могут быть циклически переставлены. Например, наша перестановка 7г равна также (5)(382)(71)(46),) Обозначим через S(n) множество всех перестановок чисел 1,2.... , п. Имеется п! таких перестановок, поскольку имеется п положений для 1, п — 1 положений для 2 и т. д., а всю перестановку молено выбрать п(п — 1){п — 2 ) . . . 1 = п\ способами. (i) В MATLAB'e есть функция randperm(n), порождающая случайную перестановку чисел 1,2,... , п, т. е. случайный элемент из S(n). Наберите randperm(lO), чтобы получить случайную перестановку чисел 1,2,... ,10. Загляните в этот М-файл. Воспользуйтесь вашими знаниями о команде s o r t , чтобы описать работу randperm.m. (Если вы забыли команду s o r t , наберите help sort.)
13-
196
Глава 14. Перестановки
Напишите короткий М-файл, создающий 1000 случайных перестановок, и запасите их все как строки матрицы Ыдр размера 1000 х п. Подсказка: Начните с команды n=inputС'Наберите значение п') чтобы вы могли использовать разные значения тг в разных примерах. Каждая случайная перестановка тогда порождается командой p=randperm(n); Вам понадобится команда цикла for j = 1:1000 выполняющаяся после строки ввода п. Если вы напишете внутри цикла bigpCj,:)=p; то вектор р сделаете j-й строкой матрицы Ыдр. Если вы хотите выполнить один за другим несколько примеров, то неплохо будет набрать {в МАТЪАВ'е) >> clear bigp между примерами или вставьте это в начало вашего М-файла. Теперь положите п = 5 и постройте гистограмму из столбцов матрицы Ыдр. (Обратите внимание, что hist(v,I:5) построит гистограмму вектора v из «столбиков», середины которых даются числами 1, 2, 3, 4, 5.) Распечатайте одну из этих гистограмм и убедитесь, что все столбики находятся на том уровне, который говорит, что числа 1, 2, 3, 4, 5 появляются в любой позиции перестановки с одной и той же частотой (и, следовательно, randperm.m является неплохим генератором случайных перестановок). (ii) Созданный для вас М-файл cycles.m генерирует случайную перестановку, а затем раскладывает ее на непересекающиеся циклы. Он делает это точно так, как делали бы вы, следуя за числами при перестановке, пока не получится цикл, и переходя затем к новому числу, чтобы сформировать следующий цикл. Чтобы помочь компьютеру остановиться, когда все числа от 1 до п будут «использованы» в циклах, элементы вектора р обнуляются по мере попадания в циклы. Попробуйте выполнить М-файл несколько раз, чтобы понять, что он делает. В одном случае, взяв, например, п = 10, разложите перестановку на циклы вручную и сравните ваш результат с компьютерным.
Глава 14. Перестановки
197
(iii) Измените cycles, m так. чтобы подсчитывались порядки (длины) циклов, а в конце определялось НОК этих длин. Было бы лучше, если бы длины запоминались в векторе, скажем, clength, который вначале определяется как пустой: clength = [] а затем этот вектор получает приращение каждый раз, когда будет определена очередная длина: clength = [clength newlength] где «newlength* означает только что найденную длину. Чтобы найти НОК, сделайте следующее: положив / = Н0К(х1,ж 2 , • • • ,Xk)^ вычислите последовательно и тогда последнее lk-i даст искомое /. Можете также считать, что для двух чисел а, Ъ
НОК(а,&)=
ff
...
НОД(а, Ь)
Можете воспользоваться существующей функцией gcdiv.m, чтобы вычислить НОД. Таким образом, для вычисления НОК длин нужно выполнить команды МАТХАВ'а ord=clength(l); for i=2:length(clength) ord=(ord*clength(i))/gcdiv(ord,clength(i)); end а затем, конечно, вы захотите вывести на экран получившееся значение ord. Сделайте несколько примеров с помощью этого М-файла. (iv) Измените randperm.m так, чтобы он также вычислял соответствующую перестановочную матрицу А перестановки 7г € S(n)l\ Она определяется как матрица, у которой для г = 1,... , га в г-й строке в позиции тг(г) стоит 1, а остальные элементы строки равны 0. Так что вы сначала должны определить А = zeros Cn,n), а затем выполнить цикл for
i=l:n A end;
1
^ Его следует сохранить под другим именем, поскольку randpenn — функция системы. — Прим. перев.
198
Глава 14. Перестановки
(Вспомните, что р — имя вектора, определяющего перестановку, например, это нижняя строка в (14.1).) Почему когда вы умножаете А на вектор-столбец и = (1,2,... , п ) т , чтобы ВЫЧИСЛИТЬ Аи, то получаете вектор перестановки р, записанный в виде столбца? Заметьте, что в МАТЬ А В'е вектор и может быть записан как u = [ l : n ] '. Отсюда следует, что степени перестановки 1 ' можно вычислять как A2u,A3u, Воспользуйтесь вашим примером из приведенной выше задачи (ш) для иллюстрации того факта, что НОК длин циклов равно порядку перестановки (т. е. наименьшей степени к > 1, для которой Аки = и). Замечание: Возможно, вам покажется проще создать новую версию М-файла, написанного вами перед этим, в которой вы могли бы задавать перестановку, а не выбирать ее случайным образом. (v) Измените cycles.га, чтобы со всем прочим подсчитывалось общее число циклов (включая 1-циклы) в разложении перестановки на непересекающиеся циклы. Затем еще раз измените его, чтобы для заданного числа случайных перестановок (их может быть до 1000) вычислялось среднее число циклов в разложении этих перестановок на непересекающиеся циклы. Выполните его несколько раз для различных значений п, чтобы найти экспериментальную оценку для этих средних при различных п. (vi) Мы изложили теоретические соображения, позволяющие предсказать величину среднего, найденного выше экспериментально в задаче (v). Они не требуют вычислений. Вы должны дополнить доказательство деталями и ответить на ряд вопросов. Мы вычисляем среднее Е непересекающихся циклов по всем п! перестановкам из S(n). Итак, пусть Р^(п)—общее число ^-циклов среди разложений на непересекающиеся циклы всех элементов S(n). Нам нужно найти v Е
РЛп) + Р2(п) + • • • + Рп{п) =
п\
•
Например, пусть п = 3. Разложения на непересекающиеся циклы шести элементов из 5(3) суть (1)(2)(3), (1)(23), (2)(31), (3)(12), (123), (132). Так, Рх(3) = 6, Р 2 (3) = 3, Р 3 (3) = 2, и Е - Ц- есть среднее число непересекающихся циклов для перестановок трех объектов. ' То есть результат ее многократного применения. — Прим. перев.
Глава 14. Перестановки
199
Как много перестановок из S(n) содержат, в частности, 1-цикл (1)? Оставшиеся п — 1 чисел можно переставлять произвольным образом, так что для него имеется (п— 1)! таких перестановок. Аналогично учитываются 1-циклы (2),... , (п). Итак, для каждого из п возможных 1-циклов имеется точно (п — 1)! перестановок, содержащих этот 1-цикл. Поэтому всего будет п(п — 1)! = п\ возможных 1-циклов, входящих в разложения на непересекающиеся циклы всех перестановок из S(n). Поэтому Pi(n) = п\. Теперь рассмотрим 2-циклы. Любой конкретный 2-цикл, такой, как (12), попадается точно в (п — 2)! перестановках из S(n), а всего имеется п ^"~ ' возможных 2-циклов (почему?). Таким образом, Аналогично покажите, что P${n) — у . (Чтобы подсчитать число возможных 3-циклов, сначала подсчитайте количество различных троек (а, Ь, с) из несовпадающих чисел от 1 до п. Затем учтите, что этих троек в 3 раза больше, чем реальных 3-циклов, поскольку (a, b,c) — (b, с, а)~(с, а, Ь), так что их число нужно разделить на 3.) Каков результат в общем случае для Pk{n)? Чему равно значение Е1 Сравните это среднее с полученным вами экспериментально в задаче (v). (vii) В заключение рассмотрите следующие отчасти эксцентричные вычисления. Нам даны числа пят такие, что 1 < т < п. Непересекающиеся циклы перестановки тг, содержащей числа из набора 1,2,... ,т, могут содержать или нет все числа, не входящие в него. Например, при п = 4, т — 2 рассмотрим перестановки 1 2 3 4 \ 2 1 4 З , ) ' ^
2
/ 1 2 3 4 " ^ ! 3 4 2
Для тгх — (12)(34) цикл, содержащий 1,2, не содержит 3,4. Для тг2 = (1)(234) — содержит. Внесите изменения в cycles.m, чтобы можно было вычислять в случайной выборке из, скажем, 1000 перестановок долю тех, которые удовлетворяют этому свойству для заданного т {вводя его вначале вместе с п). Подсказка: Это намного легче, чем звучит. Вам нужно ввести т и число проверяемых перестановок testnum. Вам также потребуется счетчик count, чтобы считать число перестановок, обладающих указанным выше свойством. Последнее существенное изменение, которое нужно сделать, состоит в том, чтобы вместо while i 0, < 0 или нулем. Изучается порядок перестановки, полученной тасованием колоды карт, который означает, сколько раз надо выполнить заданное ею тасование, чтобы вернуть картам их исходный порядок. (К несчастью, здесь возникает терминологическое недоразумение между «порядком» перестановки и «порядком» в перестановке! В последнем случае имеется в виду положение карт в колоде.) Используется разложение перестановок на непересекающиеся циклы. Замечание: Мы всегда записываем композицию перестановок справа налево: запись 7Г27Г1 означает «выполни сначала тг^, а затем выполни 7Г2 »•
Используемые возможности MATLAB'a Придется делать некоторые изменения в имеющихся М-файлах, например, чтобы использовать вместо нечетных номеров четные. Нам понадобится команда MATLAB'a s o r t .
14.1. Введение 14-1.1. Перестановки мест (ПМ) Рассмотрим стопку из шести карт, пронумерованных сверху вниз числами 1, 2, 3, 4, 5, 6. Предположим, что их переупорядочили (перетасовали) так, что порядок значений стал 4, 1, 5, 2, 6, 3 сверху вниз. Соответствующая перестановка мест (ПМ) есть 1 2 3 4 5 2 4 6 1 3
6 5
где 1г{х) = у (она задается верхней строкой х и записанной прямо под ней — элемент под элементом — нижней строкой у) означает, что карта, первоначально находившаяся в колоде сверху на месте х, перемещается на место у (тоже сверху). Большинство тасований лучше всего описывается с помощью соответствующих им ПМ. Так, например, приведенное в начале есть «тасование внахлест», когда карты сначала делятся на две равные стопки со значениями 4, 5, 6 сверху вниз и 1, 2, 3 сверху вниз. Эти стопки снова объединяются, перемежаясь. Повторяя то оке самое тасование внахлест, снова получаем сначала две стопки со значениями 2, 6, 3 и 4, 1, 5, а затем объединенную стопку со значениями 2,
202
Глава 14. Перестановки
4, 6, 1, 3, 5 сверху вниз. Вы можете проверить для себя, что ПМ, соответствующее этому двойному тасованию, есть просто квадрат тг (выполняем 7г и затем опять выполняем тг): 1 2
3
4
5
6
Мы можем теперь «снять сверху»: разделить колоду на две стопки 2, 4, 6 и 1, 3, 5 и снова объединить так, чтобы получить порядок значений 1, 3, 5, 2, 4, 6. Вся последовательность трех тасований (два внахлест и снятие) имеет, следовательно, ПМ 1 2 1 4
3 2
4 5
5 3
6 6
Заметьте, что снятие само по себе имеет ПМ 1 2 3 4 5 4 5 6 1 2
6 3
(карта с места 1 переходит на место 4 и т.д.). Вы можете легко проверить, что перестановка из (14.2) есть в точности о"7г2. Таким образом, можно очень наглядно представить ПМ результата трех тасований, перемножая их ПМ справа налево, что записывается как сгтг2. Пусть в общем случае мы сделали несколько тасований с ПМ TTI, затем тгг и т. д. до тгг. Тогда ПМ суммарного тасования есть произведение перестановок тг г 7г г _1... TTI. В частности, повторение тасования с ПМ = тг общим числом г раз подряд эквивалентно тасованию с ПМ = тгг. Чтобы в дальнейшем писать покороче, мы будем описывать ПМ только их нижней строкой. Верхняя строка всегда имеет вид 1, 2,... , п. Иногда (§ 14.3) нас будет интересовать разложение ПМ на непересекающиеся циклы. Конечно, обычные игральные карты имеют масть. Мы же вместо этого будем маркировать их значениями 1,2,... ,52. Это равносильно упорядочиванию мастей и упорядочиванию А,2,... , 10,J,Q,K (туз, 2, . . . , 10, валет, дама, король) карт одной масти.
14-1-2. Использование команды MATLAB'a sort В MATLAB'e есть способ автоматического перехода от перестановок места (ПМ) к указанным на картах значениям, а именно команда s o r t . Предположим, что мы начинаем с шести карт в естественном порядке 1, 2, 3, 4, 5, 6. Выполните следующее в MATLAB'e
14.2. Тасования внутрь и поверх » »
»
р= [2 6 4 1 5 3] ; [v q]=sort (p) ;
203
'/. Или любой другой список: это ПМ
q
Вы обнаружите, что вектор q дает значения карт слева направо (которые мы понимаем как значения сверху вниз в колоде). Заметьте, что v здесь не используется, но он необходим, поскольку является частью команды s o r t 1 ) . И наоборот, если рассматривать q как перестановку мест, то р есть вектор значений карт слева направо, так что этот прием работает в обе стороны. Итак, решающее преимущество метода ПМ состоит в том, что перемножением ПМ двух тасований обычным образом мы получаем ПМ объединенного тасования карт. Мы всегда можем перейти к упорядочиванию по значениям, используя sort, и это сделано для вас в М-файлах.
14.2. Тасования внутрь и поверх2^ Возьмите колоду из п карт, промаркированных как 1,2,... , п, и разделите ее на две части, по возможности равные. Идеальное тасование внахлест получается перемежающимся слиянием этих двух половинок колоды. Имеется четыре возможности в соответствии с тем, четно или нечетно п, и с тем, из какой части выбирается первая карта. 14-2.1. Четные тасования внутрь Если п четно, т.е. п = 2к, то две половинки колоды состоят из карт 1, 2,... , к и к + 1, к 4- 2,... , 2к. Если карта к + 1 идет наверх первой, то это называется тасованием внутрь, и карты по значениям расположатся так: fc + l,l,fc + 2,2,fc + 3,3,... ,2k,k. На рис. 14.1 приведен случай к = 3. Выпишите соответствующую перестановку мест, скажем, тг, и проверьте (хотя бы на двух примерах, таких, как п = 6, п = 10), ' ' B v = sort(p) здесь будет получаться v = [ 1 , 2 , . . . . п].Если р — перестановка из чисел 1,2,... , п, то обратная ей перестановка q может быть вычислена непосредственно из ее определения как q(p) — 1 : п. Этот способ работает быстрее, чем команда s o r t . —Ярил*, перев. 2 > В оригинале: ins and out-shuffle. Мы перевели это как «тасование внутрь и поверх». — Прим. перев.
204
Глава 14. Перестановки
4 5 6 Четное тасование внутрь
Четное тасование поверх
Нечетное тасование внутрь
Нечетное тасование поверх
Рис. 14.1. Тасования внутрь и поверх для четного и нечетного числа карт с исходным расположением 1, 2,3,... сверху вниз. что тг может быть записана в виде 7г(аг) = 2х (mod 2fc + l), это, напоминаем, означает, что тг(ж) — 2х — точное кратное 2к + I 1 ' . В этом случае ж(х) будет равно либо 2х, либо 2х — (2к + 1). Обратите внимание, что, поскольку это перестановка мест, мы сразу знаем, что повторение того же самого тасования приведет к ПМ, полученной выполнением тг дважды: 2
7г (я) = тг(тг(а:)) = тг(2з:) = 4х (mod 2k + 1).
(14.3)
Таким образом, здесь карта, занимавшая в начале до тасования место х, в конце после двух тасований окажется на месте 4х (mod 2k + 1). Проверьте это непосредственно для случая п = 6. Какое минимальное число раз необходимо повторить это тасование при п=6, чтобы карты вернулись в первоначальное положение? '' Свойства обозначения — mod n, которые нам нужны, суть: если а = Ь и с = d, то (i) а ± с = Ь ± d и (ii) ас = bd. В частности, если а = Ь, то аг = ЬТ для любого целого г > 0.
14.2. Тасования внутрь и поверх
205
Чтобы показать, как соединять перестановки в М-файле, М-файл r i f f l e i . m повторяет тасование внутрь для четного п любое число раз. Изучите этот М-файл: позже вам придется внести в него изменения. Заметьте, в частности, что он использует s o r t , чтобы распечатать окончательный порядок карт по их значениям, поскольку именно это мы хотим знать. Воспользуйтесь им, чтобы узнать минимальное число тасований 14 карт, необходимое для восстановления их исходного порядка. Теперь взгляните на М-файл r i f f l e l a . m . Здесь последовательно вычисляются степени 2 и приводятся по mod 2&+1, т.е. вычисляется остаток от деления результата на 2к + 1. Возьмите к = 7; полученное значение г должно совпадать с числом тасований внутрь 14 карт, рассмотренным выше. Это объясняется следующим образом. Повторением рассуждений, приводящих к формуле (14.3), мы находим, что перестановка мест для г повторных тасований есть перестановка тгг, обладающая свойством, что для любого места х 7гг(ж) =Тх
(mod2fc + l).
Отсюда следует, что если 2 Г ~ 1, то каждая карта возвращается на ее исходное место! Обратно, если каждая карта возвращается на ее исходное место, то, в частности, карта на 1-м месте возвращается на 1-е место, так что 2Г = 1. Таким образом, наименьшее число повторных тасований, возвращающих все карты в первоначальное положение, есть наименьшее г, для которого 2Г = 1 (mod 2k + 1). Это наименьшее число называется порядком тасования или порядком перестановки, описывающей тасование. (Терминология, конечно, весьма неудачная, поскольку перечисление элементов перестановки (их порядок) говорит о значениях на картах сверху вниз.) Воспользуйтесь r i f f lela.m, чтобы найти это наименьшее г для всех четных чисел от 40 до 52 включительно. Повторите сделанный выше анализ для других трех случаев. Ввиду небольших различий дадим по этому поводу некоторые указания. 14-2.2. Четные тасования поверх Здесь имеется п = 2k карт, но теперь 1 идет поверх первой, и после одного тасования карты упорядочиваются по значениям так: l,fc + l,2,&-f-2,3,fc + 3 , . . . , k,2k
206
Глава 14. Перестановки
Взгляните на рис. 14.1 для к = 3. Проверьте, рассмотрев, например, п — 6, п = 10, что перестановка мест в этом случае есть тг, где 7г(х) = 2 я : - 1 (mod 2к - 1) при 1 < х < 2к ~ 1, тогда как тг(2к) = 2к. Имеется одна дополнительная сложность: для х — к новое место есть 2к— 1, а не 0. Таким образом, при вычислении тг{х) мы берем остаток от деления 2х — 1 на 2к — 1, но, поскольку нет места 0, остаток 0 означает место 2к — 1. Чтобы облегчить это, для вас была написана специальная функция remm.m. Она делает то же, что и rem, за исключением остатка 0. Таким образом, remm(19,ll) дает 8, но retnm(22,ll) и гешш(11,11) дают 11. Сперва, используя функцию remm.m, модифицируйте riff l e i .m, чтобы он работал в случае четного тасования поверх. Вам надо изменить г'-цикл, чтобы он продолжался только до 2fc — 1, и вставить store (2*k)=2*k; это делается после окончания i-цикла, но до команды position_perm=store. Назовите ваш модифицированный М-файл riffle2.m и воспользуйтесь им, чтобы проверить, что 52 карты возвращаются к первоначальному упорядочиванию после всего лишь восьми тасований поверх. Сравните полученное с числом тасований внутрь для 52 карт, найденным вами выше с помощью rifflela.m? Далее, детализируйте следующий набросок доказательства, чтобы показать, что число тасований поверх, требуемое для возврата 2к карт на их исходные места, есть наименьшее г, для которого Г
2 Е 1 (mod 2fc-l). Приводим набросок доказательства. Заметьте, что карта, находившаяся вначале на месте 2fc, там и останется после любого числа тасований поверх, поэтому мы исключим х = 2к из дальнейшего рассмотрения. Как и прежде, объединяемые тасования равносильны перемножаемым перестановкам мест, так что два тасования дают перестановку мест 7г2, где 2
•к {х) = 2(2ж - l ) - l = 4 i - 3 (mod 2k - 1). По индукции получаем, что для г тасований ПМ равна тгг, где кГ{х) = 2гх - (2Г - 1) (mod 2k - 1).
14.2. Тасования внутрь и поверх
207
Следовательно, если 2Г = 1, то тгг каждую карту возвращает в начальное положение, так как кг(х) ~ х для всех х. Наоборот, если каждая карта возвращается в начальное положение, то возвращается и карта, находившаяся на 2-м месте, так что 2 Г + 1 — 2 Г + 1 ~ 2, т.е. 2Г = 1. Таким образом, наименьшее число тасований поверх, возвращающее каждую карту в исходное положение, есть наименьшее г, для которого 2Г = 1 (mod 2k — 1). Воспользуйтесь доказанным и r i f f I e 2 a . m (подправленным r i f f lela.m), чтобы найти наименьшее число тасований поверх, возвращающих каждую карту в исходное положение, для каждого четного п = 2к от 40 до 52 включительно. 14-2.3. Колоды с нечетным числом карт Если число карт нечетно, скажем 2к + 1, то после деления колоды надвое одна часть содержит к карт, а другая — к + 1 карту. Обе части тасуются внахлест так, что верхняя и нижняя карты части, содержащей к -f 1 карту, становятся верхней и нижней картами объединенной колоды (к + 1 карта «накрывает» к карт). Имеется два варианта: часть с к картами содержит карты со значениями 1,... ,к (тасование внутрь), либо карты со значениями к+2,... , 2к+1 (тасование поверх). Взгляните на рис. 14.1 для случая к ~ 2. Проверьте, что соответствующие перестановки мест задаются выражениями 7г(х) = 2х (mod 2к + 1) и тг(зг) = 2х - 1 (mod 2k + 1).
(14.4)
Переделайте r i f f l e i .m под эти два случая (пусть это будут М-файлы r i f f l e 3 . m и r i f f l e 4 . m ) и найдите наименьшее число тасований внутрь и поверх, которое возвращает 15 картам их исходный порядок. Заметьте, что вместо г em. га вам лучше применить remm.m, чтобы исключить случай с нулевым остатком. Покажите, что как для тасований внутрь, так и для тасований поверх, наименьшее число тасований, возвращающих карты в исходное положение, есть наименьшее значение г, для которого r 2 = l (mod 2k + 1). Примените r i f f l e l a . m , чтобы найти наименьшее число г для колод с нечетным числом карт при п = 2к + 1 от 39 до 51 включительно. 14-2.4- Тасования внахлест и снятия для колод с нечетным числом карт Имеется очень интересное явление, связанное с колодами из нечетного числа карт, которое мы рассмотрим здесь теоретически. Не
208
Глава 14, Перестановки
нужно ничего вычислять, но вы можете написать какой-нибудь иллюстративный М-файл, если, конечно, захотите. Снятие колоды есть циклическая перестановка, т. е. она сохраняет «циклическое» упорядочивание карт, которое получается, если расположить карты по кругу. Например, если с колоды 1, 2, 3, 4, 5 снять 3 карты сверху, то новое упорядочивание по значениям будет иметь вид 4, 5, 1, 2, 3. Если эти числа записаны по кругу, то их порядок будет тот же, что и вначале. В общем случае, для п карт, объясните на примерах, почему снятие с карт сверху дает перестановку мест п — с+ 1,п — с + 2 , . . . ,п — 1,п, 1,2,... ,п - с— 1,п - с. Обозначим эту перестановку через сгс, так что ас{х) = х — с (mod n). Теперь предположим, что п — нечетное и равно 2k + 1. В соответствии с формулами (14.4) идеальное тасование внахлест п карт дается перестановкой мест тг, где тг(:с) = 2ж или 2х — 1 (mod n). Покажите, что в обоих случаях 7ГСТ С
=
Здесь мы просто перемножаем перестановки самым обычным образом, так что тг(егс(а;)) = СГ2С(ТГ(:Е)) (modn) для всех х. Покажите, что обе части сравнимы с 2а: — 2с по mod п. Объясните, почему отсюда следует, что последовательность тасований, в которой тасования внахлест перемешаны со снятиями, можно заменить последовательностью, в которой сначала идут тасования внахлест, а затем снятия. Более того, вполне понятно, что многократное последовательное снятие колоды равносильно одному снятию. Таким образом, последовательность тасований внахлест и снятий имеет ПМ вида СГ7ГГ7ГГ_1 . . . 7 Г 1 ,
где а — какое-то снятие колоды, а тг; — тасования (внутрь или поверх) . Теперь мысленно вернемся к наименьшему числу г, указывающему, сколько тасований п — 2к + 1 карт, например, внутрь нужно сделать, чтобы они вернулись к их исходному порядку (§14.2.3). Предположим, что г тасований внутрь (для этого г) перемежаются с несколькими снятиями колоды. Из сказанного выше следует, что итоговая перестановка мест может быть представлена в виде атгг,
14.4. Грубые тасования внахлест (быстрые тасования)
209
где и — снятие колоды. Откуда следует, что сейчас карты циклически упорядочены так же, как и в начале? Покажите, что то же самое справедливо и для тасований поверх. Немного труднее доказать, что то же самое выполняется и для любой смеси (из г) тасований внутрь и поверх, лишь бы их было г. (Набросок доказательства приведен ниже в § 14.5.) Таким образом, тасования внахлест и снятия колоды являются очень неэффективным способом рандомизации колоды с нечетным числом карт: они всегда возвращаются на исходные места после довольно небольшого числа тасований. Кстати, в случае колод с четным числом карт все по-другому. Можно показать, что подходящим выбором последовательности тасований внахлест и снятий колоды можно получить любую из п\ перестановок п = 2k карт, так что тасования внахлест и снятия колоды являются эффективным способом рандомизации колод с четным числом карт.
14.3. Циклы Подобно всем другим, перестановки мест, соответствующие тасованиям внахлест, можно разложить на непересекающиеся циклы. Для вас написан М-файл, делающий разложения для четных тасований внутрь: он называется rifflelc.m. Он выводит циклы и их длины. Воспользуйтесь r i f f l e l c - т и известным фактом, что порядок перестановки равен НОК длин ее непересекающихся циклов, чтобы проверить результаты, полученные вами для четных чисел от 40 до 52 в §14.2.1. Для каждого четного числа выпишите длины циклов и НОК. Обратите внимание, что 52 карты обладают особым свойством: четное тасование внутрь является единственным циклом. Какое следующее четное число обладает этим свойством?
14.4. Грубые тасования внахлест (быстрые тасования) 1^.^.1. Одно быстрое тасование Если только вы не сверхискусны, идеальное тасование внахлест не подвластно вам. Поэтому мы рассмотрим здесь, как можно смоделировать тасование внахлест для обычного человека, которое мы будем называть грубым тасованием внахлест или быстрым тасованием (см. рис. 14.2). Чтобы определиться с понятиями, рассмотрим четное число карт, n = 2fc, которые вначале разбиты на две части из 14-4196
210
Глава 14. Перестановки
Рис. 14.2. Идеальное тасование внахлест 22 карт (слева) и грубое тасование внахлест (быстрое тасование) этих карт (справа).
т и 2к — т карт, причем мы будем предполагать, что к < т < к + 3 (почти совершенное снятие карт). Часть т карт сверху колоды (если мы начинаем с новой колоды, то они маркированы числами 1,2,... , т) быстро тасуется с оставшимися картами. Имеется 2к ~ т + 1 «щелей» между оставшимися картами, в которые могут войти m верхних карт, а именно «щель» над картой т + 1 и щели ниже карт m + l , m + 2 , . . . , 2к. Будем предполагать, что быстрое тасование вкладывает 0, 1, 2 или 3 карты в каждую из этих щелей. Попытаемся сделать разумное предположение о вероятностях для числа карт 0, 1, 2 или 3 быть вложенными в определенную щель. Пусть pi есть вероятность г карт попасть в щель, i = 1, 2, 3,4. Тогда мы, конечно, хотим, чтобы PO+Pl + Р2 + РЗ = 1«Ожидаемое» число карт, входящих в щель, равно р\ + 2р2 + Зрз, а всего имеется 2к — т + 1 щелей, так что «ожидаемое» число использованных карт есть (2к - т + l)(pi + 2рг + Зрз)- Возможно, мы должны уравнять это с числом имеющихся в нашем распоряжении
14.4. Грубые тасования внахлест (быстрые тасования)
211
карт, которое равно т. Поэтому будем считать, что (2к - m + l)(pi + 2p2 + Zp3) = т. Таким образом, если р2 и рз заданы {как и к и гл.), то ро и р\ даются выражениями Tfl Pl
-
2к — т + 1
„2р2 -Зрз,
Ро = 1 - P i - Р 2 - Р з -
(14.5)
Конечно, £>2 и рз надо выбрать так, чтобы ро и р\ были положительными и < 1. Заменяя дробь в (14.5) на 1 (что является разумным приближением при больших к), покажите, что нам нужно выбрать лишь р-2 и рз П Р И условии 2р2 + Зрз < 1 • При больших к это будет служить руководством при выборе pi и рз. Какие значения для р2 и рз вы считаете разумными? Какие значения получаются для ро и pi в случае п = 2к = 52 (обычной колоды) для каждого из четырех возможных значений т? Для вас написан М-файл ruff l e i .т, который реализует описанную выше модель быстрого тасования внахлест. Это довольно сложная программа, поскольку там тщательно рассматриваются различные возможности, как, например, когда карты 1,2,... ,т кончаются прежде заполнения щелей, и наоборот. При получении отрицательных значений ро или р% работа М-файла на этом заканчивается. Выполните М-файл ruff l e i . m несколько раз, используя разумные с вашей точки зрения значения вероятностей и положив к — 26 (обычная колода). Возможно, вы сможете взять один из результатов и показать с помощью подходящей диаграммы, как карты из одной (грубо) половины входят в промежутки (зазоры) между картами другой половины. М-файл r u f f l e l c . m находит циклы быстрого тасования, как и выше, в § 14.3. Прогоните его три раза и каждый раз вычислите порядок тасования, равный НОК длин циклов. Он совпадает с числом повторений быстрого тасования, после которых восстанавливается первоначальный порядок карт. Единственная особенность здесь в том, что вы найдете этот порядок сильно отличающимся от порядка после идеального тасования 52 карт внахлест.
14-4-2- Два
u
больше быстрых тасований
М-файл ruffle2.m имеет больше возможностей в том, что касается последовательности быстрых тасований. В ваших экспериментах вы сможете выполнить до четырех тасований. Наша цель — узнать, насколько успешно 2, 3 или 4 быстрых тасования «рандомизируют»
14*
212
Глава 14. Перестановки
колоду. При выполнении тасований вам будет предложено выбрать единственную карту, г-ю слева после очередного тасования (в колоде это i-я карта сверху) и передвинуть ее на j-e место слева, где i и j не должны находиться слишком близко друг к другу. (Совет: Чтобы упростить ваши эксперименты, придерживайтесь i = 1: первая карта всегда куда-то перемещается.) Запишите значение карты, которую вы передвинули. Мы увидим, можно ли угадать, какая карта была передвинута; если можно, то это верный знак, что колода не была рандомизирована. После перемещения одной карты все карты определенным образом раскладываются в столбцы. Выполняя М-файл с некоторым достаточно малым к (вам придется быть очень осторожным при выборе значений для р2 и р$ при малых к), посмотрите, сможете ли вы раскрыть метод, использованный при раскладывании карт по столбцам. Не обращайте внимания на все числа —1 в столбцах: они просто заполняют там место. При удаче передвинутая карта появится в отдельном столбце (не считая -1 ниже ее). Поэкспериментируйте с двумя, тремя или четырьмя тасованиями и проанализируйте ваши результаты в отгадывании передвинутой карты. Попробуйте проделать это с реальной колодой! Здесь мы приводим результаты типичного прогона для р2 = 0.2, р3 = 0.05 и трех тасований. Карта с номером 28 была перемещена на десятое место (так как [ i , j] есть [1 10]), и, как вы можете видеть, она стоит отдельно как воспаленный большой палец! ans =
2 3 4 5 6 7 8 9
22 23 24 25 26 27 -1 -1 -1
39 40 41 42 43 44 -1 -1 -1
29 30 31 32 33 34 -1 -1 -1
35 36 37 38 -1 -1 -1 -1 -1
45 46 47 48 49 50 51 52 -1
10 11 12 13 14 15 16 -1 -1
28 -1 -1 -1 -1 -1 -1 -1 -1
17 18 19 20 21 -1 -1 -1 -1
14.5. Приложение
213
14.5. Приложение Это набросок доказательства результата из § 14.2.4. Каждая из перестановок тг; здесь соответствует тасованию внутрь или поверх при нечетном п. Мы выполняем тасования внутрь или поверх, перемежаемые снятиями колоды. Как и в § 14.2.4, это эквивалентно выполнению сначала всех тасований, а затем некоторого снятия а. Наше намерение — доказать, что, если мы выбираем г, для которого 2Т = 1 mod n, то любая последовательность г тасований внутрь или поверх, перемежаемых снятиями колоды, даст в результате просто снятие, т. е. циклическую перестановку п карт. Мы также докажем и обратное: если результатом последовательности г тасований внутрь или поверх, перемежаемых снятиями колоды, является просто снятие, то должно выполняться соотношение 2Т ~ 1 mod п. Итак, пусть тп(:г) = 2х или 2х — 1. Тогда 7T27ri(x) может быть в 4-х вариантах: это 4х,2(2х — 1),2(2#) — 1 или 2(2х — 1) — 1, т. е. 4х,4ж — 1,4ж — 2 или Ах — 3. Вообще, мы имеем 7Г ~ 7Гг71>-1 . . .7Ti(x) = 2ТХ + 1,
где I может быть любым из чисел 0,1,2,... , 2Г — 1. Здесь и ниже = означает = mod п. Предположим, что 2Т = 1. Тогда ж(х) = х + I для всех х и фиксированного I, но это есть циклическая перестановка, т. е. снятие. Следовательно, сг7г — тоже снятие. Обратно, предположим, что перестановка air является циклической, так что и тг является циклической. Тогда 2гх + I = х + V г
для всех х и некоторых I, V. Пусть V — I = гп, так что 2 х = х + т. Г Г+1 Для х = 1 это дает 2 = 1 + т, а для г — 2 это дает 2 = 2 + т. Г Вычитание дает 2 = 1.
15 Итерационные методы решения нелинейных уравнений
Во многих математических задачах приходится решать нелинейные уравнения с помощью итераций. Такие уравнения могут быть как дифференциальными, так и алгебраическими. Задачи реального мира часто являются нелинейными и могут содержать более одной независимой переменной, хотя с помощью технических приемов задачу можно свести (правда не всегда) к одномерному случаю. Главная причина использования итераций в том, что прямое (т.е. аналитическое) решение нелинейных уравнений в общем случае затруднительно, а для сходимости численного решения требуется более одного шага. В этой главе рассматриваются главным образом уравнения с вещественными коэффициентами; комплексный случай кратко обсуждался в гл. 13.
Цель работы Цель этого исследования — узнать, когда и как работают численные методы при решении нелинейных уравнений. В частности, здесь рассматриваются важные вопросы точности и скорости сходимости итерационных процессов.
Использованные математические понятия В работе используются векторы и матрицы. Рассматривается метод, основанный на итерациях и линеаризации нелинейных уравнений. Сначала мы рассмотрим одно уравнение с одним неизвестным (для простоты названия соответствующих разделов начинаются с префикса ID), а затем рассмотрим системы уравнений со многими неизвестными (разделы, начинающиеся с 2D).
Используемые возможности MATLAB'a Здесь речь идет о решении уравнений. Для этого будут использоваться два М-файла fulljiew.m и g a u s s j a . m Чтобы воспользоваться ими, нужно передать информацию об уравнениях с помощью простого М-файла. При исследовании скорости сходимости исполь-
15.1. JO; Метод 1 —метод Ньютона—Рафсона
215
зуется М-файл f_rate.m и в качестве примера дается М-файл визуализации cont4.m. Но, протяжении всей главы верхние индексы используются в обозначениях последовательностей, а нижние индексы зарезервированы для координат в случае нескольких переменных.
15.1. ID: Метод 1 —метод Ньютона—Рафсона Запишем некоторое уравнение в виде
F(x) = 0. Формула Ньютона—Рафсона 1 ' имеет вид:
где F1 есть первая производная функции F(x). Задав начальное приближение х = х'°) для корня, молено надеяться, что последовательные итерации будут все ближе и ближе подходить к истинному решению, т. е. х^ —>• х — х* при п —> сю. Для вашего удобства мы разработали М-файл full_new.m, реализующий метод Ньютона. В качестве иллюстрации рассмотрим следующий характерный пример. Пример 1 Пусть F(x) = х3 - Юж2 + 27z - 18 = 0
(15.1)
и известно, что корень находится вблизи х^ — 7.4 (заметьте: точное решение есть х* = 6). Так как первая производная F'(x) = Зх2 - 20ж + 27, мы можем подготовить файл с именем f_exln.m, который содержит следующее 2 ': function [F,J] = fun_name ( Р ) ; У, Пример 1 х = Р(1) ; У, Метод
У, Ньютона - Рафсона F = [х~3-10*х"2+27*х-18]; J = [3*х~2 - 20*х + 27 ] ;
% Значение функции '/, Производная У, (якобиан)
1
) Формула Ньютона—Рафсона получается из первых двух членов разложения Тейлора для функции F(х) в окрестности корня уравнения — точки х*.—
Прим. перев. 2 *> Для пользователей MATLAB'a V3.5 надо отметить, что вторая строчка х = Р(1) в М-файле f-exln.m должна быть заменена на х = Р и такую же замену нужно сделать позже в f_exlg.m.
216
Глава 15. Итерационные методы решения нелинейных уравнений
Тогда корень может быть вычислен любой из команд » » » »
Root Root Root Root
= = =
full.newOf.exln', full_new( J f_exln J , full_new(If_exln>, full_new('f_exln',
7.4) У. 7.4, tni) У, 7.4, t n i , t o l ) X 7.4, t n i , t o l , hi)'/,
Форма Форма Форма Форма
А В С D
где tni — общее число требуемых (скажем, 12) итераций с начальным значением х^ = 7.4, tol — условие остановки вычислений при достижении заданной точности: |-F(a:)| < tol (скажем, 1.0Е—4) и hi определяет, нужно ли показывать результаты промежуточных итераций (hi = 1 означает «да», hi = 0 означает «нет»). При выполнении форм А-С выводится результат только последней итерации (т. е. hi = 0); если tni и tol не заданы, то по умолчанию им присваиваются значения 20 и 1.0Е—3 соответственно.
15.2. ID: Метод 2 —метод Гаусса—Якоби Для применения метода Гаусса—Якоби нужно преобразовать исходное уравнение F(x) = 0к виду х = G(x), а сам он представляет итерации
М-файл gauss.ja.m содержит программу этого метода. Обращение к ней аналогично обращению к full_new.m, за исключением подготовки М-файл а-функции. Так, пример 1, приведенный выше, можно решить следующим образом (аналогично f u l l л е и . т) » Root = gauss_ja('f_exlg', 7.4) У. А >> Root = gauss_ja('f_exlg', 7.4, t n i , t o l , hi) X D
с помощью укороченного в заглавии М-файла-функции f .exlg.m function G = fun_name( P ); У, Пример 1 x = PCD; '/• Метод Гаусса - Якоби R = 18 - x~3 + 10*x"2; G = R / 27; '/, Следующее также подходит: У. R - 10*х*2-27*х+18; У, Промежуточная величина X G = sign(R)*abs(R)~(l/3) ; У. Используйте SIGN, чтобы У, избежать комплексных X значений
15.3. ID; Анализ сходимости
217
где первая строка не содержит [ ]*'. Позже вы увидите, что такая функция G приводит к плохой сходимости. Замечание. Функция G(x) не определяется однозначно. Мы даже метод Ньютона можем рассматривать как метод Гаусса—Якоби, в котором G(x) = х — F(x)/F'(x). В приведенном выше примере 1 функцию F(x) ~ х3 - Юх2 + Tlx - 1 8 = 0 можно переписать в виде х = G{x) с G(x) = (18 + Юх2 — ж 3 )/27; но и это представление не единственно, поскольку G(x) = (Юж2 - 27ж + 18) другую возможность.
предоставляет
15.3. ID: Анализ сходимости Ни метод 1, ни метод 2 не работают хорошо всегда. Когда метод не работает, имеются две возможности: (1) метод плох, и мы должны найти более подходящий; (2) начальное приближение было выбрано слишком далеко от искомого, и это можно до некоторой степени исправить. Плохая работа метода обычно означает медленную сходимость и является знаком его низкого качества — тогда следует пойти по пути (1). Ниже мы надеемся проанализировать обе эти возможности.
15.3.1.
Область поиска
Под «областью поиска» мы понимаем область, содержащую искомые корни. Областью поиска может быть R — (—оо,+оо), но мы надеемся сделать менее протяженный диапазон. Большая часть задач приходит из практики, и поэтому можно выбирать «область поиска», исходя из априорных знаний; например, отрезок [1,10] может быть хорошей областью поиска, когда х представляет собой рост человека в футах. В нашем случае уравнения с одной переменной, т. е. уравнения F(x) = 0 можно получить некоторое представление о корнях F(x) на интервале [а, 6], воспользовавшись командой MATLAB'a p l o t . Рассмотрим
Пример 2 Пусть F(x) = (2 - sin z)(rc3 - Юх 2 + 27ж - 18) = 0-
(15.2)
То есть у функции G(P) только один выходной аргумент. — Прим. перев.
218 Глава 15. Итерационные методы решения нелинейных уравнений
15
:
•
•
10
•
•
•
!
•
•
•
•
!
/
-
:
/
у
5
ч
-5
• •
-10 -
-15
•
-
•
/
• •
-
\
•
•
;
:
•
•
/
•
•
-
-
:
• \
-го
'
!
V •
•
•
•
•
/
.
/
.
.
•
.
•
Рис. 15.1. Выбор области поиска. Для этого примера выполните » х = 0.5 : 0.01 : 6.5; » F = (2-sinCx)) .* (х.~3 - 10*х."2 + 27*х - 18) ; >> plot(x,F, х,zeros(size(x)) ) ; grid чтобы построить график, подобный изображенному на рис. 15.1. Теперь можно заметить, что все корни находятся примерно на отрезке [0,7], и поэтому [0,7] является подходящей областью поиска для начального приближения х = х^. 15.3.2.
Область сходимости
Область сходимости метода определяется как множество всех начальных точек из области поиска, для которых может быть получено сходящееся решение. Ясно, что область сходимости вложена в область поиска. Чтобы найти такую область сходимости, нужно перебрать в качестве начальных «все» точки области поиска и запомнить те, для которых соответствующие последовательности сошлись к решению. На практике рассматривают лишь точки, взятые с некоторым шагом. Например, для области поиска [0,8] из примера 1 мы можем проверить в качестве начальной точки а^0' = 0, 1/8, 2/8, ... , 8 — 1/8, 8; здесь использован шаг длины Ах = 1/8 = 0.125. В обозна-
15.3. ID: Анализ сходимости 219
О
ОООООООСЮОООСЮООООООООООСК I
оооооооооооооооооо
V юоооооооооооооо
0
1
2
3
4
5
6
7
Рис. 15.2. Поиск области сходимости из трех интервалов. 6 Б -
-
4
-
•
3
-
2
•
-
1
-
0
-
1
L
1
2
[0 1.875] д л и 1
3
4
5
[2.215 4.25] д л я 3
6
7
[ 4 . 8 7 5 в] д л я 6
Рис. 15.3. Пример 2: области сходимости для корней х = 1, 3, 6. чениях МАТЬАВ'аэто хО = 0 : 0.125 : 8. Более того, мы можем написать следующий М-файл для построения графика, подобного изображенному на рис. 15.2: t n i = 30 ; X = [] ; R = [] ; 1 forxO = 0 : 1/8 : 8 Ш'/.У. f.exln.m для примера 1 Ш /.'/. root = full_new('f_exln', xO, t n i ) ;
220
Глава 15. Итерационные методы решения нелинейных уравнений if 0 )^— + (a:2 -xy)-— + hot, OXi
0)
ОХ%
= Ъ(хРА ) + (*i - 4 ) | J + (x. - 4 ) g + hot, т.е.
F(*V) = F(x) + J • [х^> - x> >> >> >>
flops (0) ; х = А\Ь fI = flops flops (0) ;
°/, Установим счетчик операций в нуль . У, А размера 8 х 8 и b размера 8 x 1 . '/, Вывод числа выполненных операций '/о Установим счетчик операций опять '/, в нуль
х = inv(A)*b f2 = flops У, Должно быть больше
Здесь и всюду далее всегда можно вместо flops использовать другие команды MATLAB'a, перечень которых дан в табл. 16.1. Фактически используемый в MATLAB'e алгоритм решения системы Ах = b основан на методе исключения Гаусса, работа которого может быть разбита на три этапа: (1) Вычисляются нижняя треугольная матрица L, верхняя треугольная матрица U и перестановочная матрица Р, такие, что РА — LU'. Здесь Р — просто единичная матрица / с переставленными столбцами. Эта перестановка гарантирует, что при построчном приведении новой матрицы А± = РА к треугольной форме все множители, участвующие в процессе исключения, меньше или равны единице по модулю. Использование Р приводит к тому, что мы решаем систему РАх = РЪ или, точнее, Ы1х = РЪ вместо Ах = Ь. Такой процесс известен как частичный выбор ведущего элемента и помогает подцерживать точность вычислений. (2) Решаем систему Ьу = РЪ (нахождение у называется прямой подстановкой). (3) Решаем систему Ux = у (нахождение х называется обратной подстановкой). Первый этап, известный как треугольное разложение (или LU-разложение), связанное с построчным приведением к треугольной фор-
16.2. Плотные линейные системы 237 ме 1 ', является наиболее важным шагом. Это может быть сделано посредством команды Ги. Поэтому следующие действия 2 ' эквивалентны выполнению х = А\Ъ » [L,U,P] = l u ( А ) ; % Находим матрицы L, U и Р >> В = Р*Ъ ; '/, А х = b переходит в А1 */, или LU х=В » у = L \ В ; У, Решаем L у = В как L >> х = U \ у У, Решаем U х = у 16.2.2.
Многократное
применение L
и
(A1=PA=LU) х=В (U х) = В ---
U
Допустим, мы хотим решить системы Ах = b и Ах = е (в сущности, это линейные системы с одинаковыми матрицами, но различными правыми частями). Использовать дважды оператор \ — не самая лучшая идея, поскольку каждый раз MATLAB будет находить LUразложение матрицы РА. Лучше сделать следующее 3 ': LL,U,P] = In(A); В = P*b * z = L \ В x =U \ z E = P*e ; z = L \ E x =U \ z
16.2.3.
Значащие
У, Найдем матрицы L.U.P и (PA=LU) У, Подготовим РАх=РЬ (систему 1) '/. Решаем РАх=РЪ % Решаем РАх=РЬ У, Подготовим РАх=Ре (систему 2) У, Решаем РАх=Ре % Решаем РАх=Ре
десятичные разряды
В MATLAB'e и большинстве других компьютерных пакетов и языков в вычислениях на деле используется только конечное число десятичных цифр, так что большая часть чисел округляется. Это порождает вычислительные ошибки. Чем больше делается шагов в вычислениях, тем больше итоговая ошибка. Этим, в частности, объясняется, почему мы всегда должны отказываться при компьютер1 ' Команда MATLAB'a rref выполняет это, но не следует от нее ожидать многого. Более полезна другая команда —rrefmovie. К счастью, доступны тексты программ rref.m и rrefmovie.ш. Выполните A=round(rand(6)*7); Ш J]=rrei(A), rrefmovie(A). 2 ) Обратите внимание, что у = L\B не требует так много операций, как А\В потому, что MATLAB достаточно умен, чтобы распознать треугольную природу матрицы L. То же верно и для х = U\y. Проверьте это с помощью flops. 3 ' Достаточно выполнить X = Л\В, чтобы решить все системы Ах = Ь со столбцами Ъ из В. — Прим. перев.
238
Глава 16. Матрицы и решение линейных систем
ных вычислениях от методов, подобных х = inv(A) * b, поскольку он не только дольше работает, но и накапливает большие ошибки. Все вычисления в MATLAB'e по умолчанию проводятся с 16 десятичными цифрами. Так как мы хотим исследовать влияние выполнения арифметических операций с конечным числом разрядов на точность вычислений, то в этой работе мы будем иметь дело главным образом с i-разрядной арифметикой 1 < t < 16. М-файл chop.m 1 ' дает нам возможность легко проделать это. Выполните h e l p chop, c h o p ( 0 . 1 3 6 4 , 2) * 10 или c h o p ( l . 2 2 3 3 4 5 , 6) и c h o p ( l .223345, 5 ) , чтобы понять, как он работает. 16.2.4.
М-файлы: l i n _ s o l v . m ,
Iu2.m и
Iu3.m
Будем исследовать важность выбора ведущего элемента и числа значащих цифр на примере решения системы Ах = Ъ. Главный М-файл l i n _ s o l v . m вызывается следующим образом: >>
х = l i n _ s o l v ( ' l u . n a m e ' , A, b , t) ;
где lu_name есть имя М-файла-функции факторизации (разложения), которое нужно заменять на Iu2, Iu3 или Iu4. Здесь t указывает на то, что все вычисления проводятся с заданной точностью в £ десятичных цифр. М-файл-функция Iu2.m математически совпадает с встроенной функцией (системным файлом) lu.m за исключением того, что теперь мы используем только (-разрядную арифметику. Так, если вы зададите t = 16 с помощью Iu2.m, то l i n _ s o l v . m выдаст такой же результат, как и х — А\Ъ. М-файл-функция Iu3.m не делает частичного выбора ведущего элемента и используется здесь лишь для сравнения, а не для вычисления точного решения, так как не содержит перестановочной матрицы Р и допускает множители, большие единицы по модулю. М-файл Ги4. m всегда дает тот же результат, что и I u 3 . m, но в случае разреженных матриц использует меньшее число операций (флопов); см. §16.5. Д в а М-файла I u 2 . m и I u 3 . m могут быть использованы и сами по себе для разложения матриц (подобно lu) » [ Ь , и , Р ] = 1 и 2 С А ^ ) ; '/.Разложение A (t цифр и » [L,U]
Р)
= l u 3 ( A , t ) ; '/.Разложение A (t цифр и нет Р)
Таким образом, если мы решаем систему Ах — Ъ командой » х - l i n _ s o l v ( ' I u 2 ' , A, b, t) ; ) В версиях 5.0 и выше chop — это уже команда. — Прим. перев.
1
16.3. Алгоритм итерационного уточнения
239
то будем говорить, что используется метод исключения Гаусса с частичным выбором ведущего элемента. Подобным же образом будем говорить, что в команде »
х = l i n _ s o l v ( ' I u 3 ' , A, b, t)
;
используется метод исключения Гаусса без выбора ведущего элемента.
16.3. Алгоритм итерационного уточнения Если у — приближенное решение системы Ах ~ Ь, определим его невязку как г = b — Ay, которая может не быть нулевой (или малой). После решения системы Ае = г можно ожидать, что xi = у + е будет лучшим приближением к истинному решению х. Процедуру можно повторить, если невязка для xi недостаточно «мала», и мы получаем итерационный процесс. Это основная идея алгоритма итерационного уточнения1', используемого для улучшения решения: Шаг 0. Примените исключение Гаусса с заданной точностью t < 16, чтобы решить систему Ах = Ъ, и сохраните матрицы L, U, Р. Обозначьте приближенное решение через у. (Замечание. Р = I, если не используется частичный выбор ведущего элемента.) Шаг 1. Вычислите невязку г — b — Ay. Если г = 0 или если ее норма 2 ' достаточно мала, процесс заканчивается и полагается х = у. Шаг 2. Используйте те же самые L, U, Р, чтобы решить систему LUe = Рт. Шаг 3. Обновите решение: у + е -¥ у. Шаг 4- Вернитесь к Шагу 1 и повторите его и т. д. Значения г и е говорят о точности приближения у. Они могут быть измерены с помощью команды MATLAB'a norm. г > Отметим, что итерационное уточнение тесно связано с другой идеей, называемой остаточной коррекцией, когда А представляет собой другие операторы (например, дифференциальные, интегральные, нелинейные). Эта идея лежит в основе современного и мощного численного приема — многоуровнего (или многосеточного) метода. 2 ) В MATLAB'e, если г € TV1, то р-норма вектора есть ||r|| p = norm(r,p), где р есть либо произвольное положительное целое, либо 'inf' (т.е. оо-норма). Однако для матриц команда MATLAB'a norm может вычислять лишь четыре нормы, а именно, ||.4|| = погш(А, р), где р равно 1, 2, 'inf' или 'fro', что соответствует 1-норме, 2-норме, оо-норме и F-норме (Фробениуса) для векторов. По умолчанию norm(A) есть 2-норма.
240
Глава 16. Матрицы и решение линейных систем
16.4. Анализ возмущений системы Ах = b Вообще говоря, точность решения х = А\Ъ зависит от свойства матрицы А, называемого ее обусловленностью. Мерой обусловленности является число обусловленности, которое определяется как cond(A) = НА"1!! !|A|j, где \\ • || может быть любой матричной нормой. Для вычисления числа обусловленности в 2-норме MATLAB имеет команду1' cond, так что достаточно набрать cond(A). Для «хороших» матриц число цифр t не влияет сильно на точность вычислений, но для «плохих»2' (или плохо обусловленных) матриц значение t заметно влияет на результаты. Теперь рассмотрим точность решения при t < 16. Пусть Ах = b обозначает истинную линейную систему, не использующую округления при вычислении Аи Ь. Однако из-за округлений и ошибок при сборе данных наше численное решение у на самом деле удовлетворяет только так называемой возмущенной (близкой) системе (А + ДА)у = Ь + ЛЬ. Здесь (А + ДА) рассматривается как матрица А с i-разрядной точностью и аналогично для b + ДЬ. Погрешности ДА (матрица) и ДЬ (вектор) обычно известны. Например, когда мы используем t-разрядную арифметику, то \\AA\\ = norm(A - Al)
и
||ДЪ|| = norm(b - Ы ) ,
где А\ = chop(A,£) и Ы = chop(b,t). Точность решения говорит о том, насколько близко численное решение у к точному решению х. Линейная система хорошо обусловлена, если малые значения |(ДА||/!|А|| и |(ДЬ||/{|Ь|| приводят к малым значениям для ||х — у||/||х||. В противном случае система плохо обусловлена. Конечно, мы хотим знать, как эти величины связаны между собой. Имеется следующий результат. Теорема 16.1 Допустим, что точная система есть Ах — b, a мы фактически решаем систему (А + ДА)у = b + ДЬ. ^ Чтобы вычислить cond(A) в других нормах, мы можем воспользоваться определением, содержащим Л " 1 , но это может стоить много флопов. Для 1-нормы попробуйте condest(A). 2 ' Для «плохих» матриц, чтобы достичь хорошей точности, стратегия решения заключается в преобразовании этой матрицы в «хорошую», а не в требовании неограниченного увеличения t. Такой метод называется предобусловливанием.
16.4. Анализ возмущений системы Ах = b 241 Тогда для относительной ошибки имеем
|х-уЦ
< г
Л1АЛЦ
V V
где c
=
P I I
I N
; '
сопс!(Л)
Следовательно, мы говорим, что система Ах = Ъ хорошо обусловлена, если константа С не слишком велика, и плохо обусловлена, если она велика. Для целей нашей работы будем называть задачу плохо обусловленной, если С > 50. Пример. Решите случайную линейную И х 11-систему Ах — b в tразрядной арифметике при t — 2; об использовании rand см. гл. 6. Определите обусловленность этой системы. Следующий файл вы можете найти под именем solv6.m: randC'seed',1998); n=ll; У, Задаем 'seed' А = 10*rand(n,n) ; Ъ = rand(n,l); '/, Генерируем систему t = 2 ; У. Задаем число разрядов х = А \ Ъ ; У. 'Точное' решение у = lin_solv( 'Iu3', A, b, t) ; У, Численное решение A_rel=norm(A-chop(A,t))/norm(A) ;*/, Относит, ошибка в А b_rel=norm(b-chop(b,t))/norm(b) ;У, Относит, ошибка в b k = cond(A) ; '/, Число обусловленности С = к / ( 1 - к * A_rel ) ; if С >= 50, dispС'Задача плохо обусловлена . . . ' ) , else, dispС'Задача хорошо обусловлена.'), end error „theory = C*(A_rel+b_rel) У, Погрешность по формуле 7, из теоремы error_found = norm(x-y)/norm(x)'/, Погрешность по точному х '/. и численному у Вы увидите, что С — 97.561, так что задача плохо обусловлена; error.theory = 0.7618 —ошибка, предсказываемая теорией (большая), error_found=0.3381 — полученная в расчете ошибка (она меньше).
16-4196
242
Глава 16. Матрицы я решение линейных систем
16.5. Разреженные матрицы, упорядочение графа и перестановки Матрицы, встречающиеся в задачах прикладной математики, часто оказываются разреженными: под «разреженными» мы понимаем матрицы, у которых много (скажем, 50%) нулевых элементов. Следовательно, если в выполнении операций с такими матрицами будут участвовать в основном ненулевые элементы, то это приведет к ускорению работы алгоритмов. Один из общих подходов состоит в использовании перестановочных матриц для передвижений ненулевых элементов таким образом, чтобы привести матрицу к желательному виду (например, ленточному, когда матрица имеет нули всюду, кроме главной диагонали и небольшого числа поддиагоналей). Для графического изображения разреженной матрицы можно использовать команду MATLAB'a spy. Например, выполните следующее (это М-файл spar_ex.m) » А = diag(0:9); % Формируем матрицу размера 10 » spy(A); grid У. Посмотрите, как это выглядит >> а = eye(10,l)*ones(l, 10)*2; У, Ненулевая строка 1 >> b = ones(10, l)*eye(l, 10)*3; 7. Ненулевой столбец 1 >>А=А+а+Ь; '/, Формируем матрицу 7. «наконечник стрелы>> >> spy(A); grid % Посмотрите, как это выглядит '/, теперь Чтобы оценить методы работы с разреженными матрицами, выполните » А1 = А; » flops (0)
У, Это та же матрица, что и выше 7, Установим счетчик в нуль 7. (можно также tic/toe) >> [LI Ul]=lu3(Al); 7. Разложите А как полную матрицу >> Work_l = flops '/, Число выполненных операций >> al = symrcm(Al) 7, Найдите новое упорядочение 7, для матрицы А1 » А2 = Al(al,al) 7. Переупорядочение А2=Р*А1*Р> » flops (0) 7. Установим счетчик в нуль У, Сможно также tic/toe) >> [L2 U2]=lu4(A2) ; У, Разложите А как разреженную матрицу » Work_2 = flops У, Число выполненных операций Сновых)
16.5. Разреженные матрицы, упорядочение графа и перестановки 243 Вы обнаружите, что Work.l = 8434 и Work_2 = 1506. Вся хитрость здесь в том, что мы нашли новое упорядочение (строк и столбцов) матрицы Л1; чтобы увидеть и применить перестановочную матрицу, выполните >> Р = еуе(10); » Р = Р(а1,:) » A3 = Р*А1*Р'
'/, Создайте единичную матрицу 10 х 10 '/, Переупорядочиваем ее строки '/. Здесь A3 = А2
Как мы знаем, Р — ортогональная 1 ' матрица, и поэтому А, А2 и A3 имеют одни и те же собственные значения. Очевидно, при определении собственных значений удобнее работать с A3. Наконец, покажем, как представить разреженные матрицы с помощью графов. Разреженную матрицу АпХп можно рассматривать, как состоящую из нулевых и ненулевых элементов, и каждый ненулевой элемент представляет собой взаимосвязь (или взаимодействие) между двумя числами (т.е. индексами строк и столбцов, принимающими значения из одного и того же множества 1, 2, . . . , п). В теории графов граф Gen узлами (не все узлы связаны друг с другом) может иметь переменное число ребер, каждое из которых представляет собой связь между двумя узлами. Следовательно, разреженная матрица А естественным образом может быть сопоставлена с графом G(A), если мы отождествим индекс первой (индекс матрицы) с узлом последнего (узлом графа), а также ненулевой элемент первой с ребром последнего. Очевидно, нулевые элементы матрицы А соответствуют несуществующим ребрам графа G(A). Таким образом, связности (ребра) п узлов графа могут представлять структуру разреженной матрицы. Более точно, ребра графа G(A) представляют ненулевые элементы матрицы А, т. е. узел графа % связан с узлом j тогда и только тогда, когда у матрицы элемент Aij ф 0. Например, трехдиагональная матрица может представлять п узлов, образующих незамкнутую цепь (связность), в которой каждый внутренний узел связан только с его непосредственными соседями, т. е. первый конечный узел 1 связан только с узлом 2, внутренний узел к связан лишь с узлами к — 1 и & -Ь 1, а последний конечный узел п связан только с узлом п — 1. И наоборот, для такого G(A), у которого узел к связан лишь с узлами j = к ~ 1 и j = к + 1, в *' Проверьте это, выполнив Рт Р — /. Замечание: Опытные пользователи МАТЪАВ'а могут использовать speye вместо eye, чтобы сформировать единичную матрицу: выполните также help sparse, чтобы больше узнать о построении разреженных матриц. 16*
244 Глава 16. Матрицы и решение линейных систем соответствующей матрице элемент Akj Ф 0 только для \к — j\ < 1. Отсюда следует, что А должна быть трехдиагональной. В приведенном выше примере матрицы 10 х 10 исходная матрица А представляет связности 10 узлов в естественном порядке а — 1 : 10, а .42 представляет связности в новом порядке al — [10 9 8 4 6 5 2 7 1 3]. Для симметричной матрицы А ее граф G(A) может быть изображен на графике с помощью команды MATLAB'a gplot. Для приведенного выше примера с Аюхю выполните следующее (М-файл spar-ex.m) >> ху = [
0 0 1.5 1.3 0.35 2.0 -1.0 1.7 -1.9 0.68 -1.9 -0.68 -1.0 -1.7 0.35 -2.0 1.5 -1.3 2.0 0.0 ], figure(2) » gplot (A,xy); hold on '/. Изображаем все ребра » gplot (А, ху,'о') '/, Изображаем все узлы как 'о' » for k=l:10, tt = sprintf O'/.dW ,k); text (xy(k,l) ,xy(k,2) ,tt) '/, Печатаем числа end; axis off >> titleC'MaTpmja А в исходном порядке а') » hold off; figure(3) */ Теперь изображаем G(A2) » xy2 = xy(al,:); '/, Переупорядочиваем узлы в '/, соответствии с al >> gplot (A2, ху2); hold on */, Изображаем все ребра >> gplot(A2,xy2,'о') У, Изображаем все узлы как 'о' » for k=l:10, tt - sprintf (' y.dNn^k); text(xy2(k,l) ,xy2(k,2) ,tt)'/ ( Печатаем числа end; hold off; axis off » t i t l e С'Матрица Al в новом порядке a i ' )
Изучение методов разреженных матриц имеет важное значение для прикладной науки. Заинтересованный читатель может обратиться к [4] и [15).
Упражнения
245
Упражнения 16.1
Создайте по крайней мере три случайных матрицы Апхп со случайными порядками от п = 50 до п — 170 и случайным вектором Ь размера п. Затем примените flops, чтобы показать, что следующие результаты приближенно выполняются, и в каждом случае оцените константу С: х — A\b требует Сп3 операций; у = det(A) требует Сп3 операций; z = inv(A) требует Сп3 операций; t — b * b' * b требует Сп2 операций; u = b * (Ъ' * Ь) требует Сп операций; v = b * 9 + 6 требует Сп операций; • w = А * Ъ требует Сп2 операций.
16.2
Решите следующую систему: Ах = Ь с помощью как Л\Ь, так и двух отдельных шагов LU-алгоритма (эти решения тождественны?): 1 2 3 1
1 1 -1 2
0 -1 -1 3
3 1
' Х\ \
/
х2
2
1
-1
4 1 —^ 4
16.3
С помощью подхода из § 16.2.2 решите новые системы Ay = e и Ах — f сразу после решения Ах — b из упражнения 16.2, с т т е ^ ( 4 2 - 2 1 ) n f = {34 10 1 3 6 ) .
16.4
С помощью [L U P]=lu(A) из упражнения 16.2 вычислите следующие относительные ошибки:
Hil
u
где L2, U2 получены из L, U с помощью chop.m при £=1, а || • У —норма, вычисленная командой MATLAB'a norm: например, ||L|| вычисляется командой norm(L). 16.5
Применив lin_solv.m вместе с Iu2.m и ГиЗ.т, выполните упражнение 16.2 опять с t = 1-разрядной арифметикой. Сравните оба решения. Какое из них точнее? Воспользуйтесь командой norm из упражнения 16.4.
246
Глава 16. Матрицы и решение линейных систем
16.6
Рассмотрите систему линейных уравнений Лх = Ь, где
/ 1.1756 4.0231 -4.0231 1.0002 А = -10.179 -5.2107 \ 886.19 7.0005
-2.14170 4.5005 1.1022 -6.6932
5.1967 1.1973 0.10034 -4.1561 )
и b = ( 15.721 19.392 2.9507 -38.089 ) Возьмите хе = Л\Ь в качестве точного решения. (а) Найдите приближенное решение у для Ах = b в t = 4разрядной арифметике методом исключения Гаусса с частичным выбором ведущего элемента. Вычислите относительную ошибку ег =
хе где |j • || обозначает 2-норму. (b) Выполните одно итерационное уточнение на основе (а) и вычислите новую относительную ошибку. (c) Следуя (Ь) и снова принимая t = 4, выясните, насколько больше шагов итерационных уточнений нужно сделать, чтобы достичь предела итерационных уточнений, т. е. чтобы получить ||е|| < 10~ 9 при выполнении шага у + е ->• у в алгоритме итерационных уточнений. Покажите все промежуточные невязки, их нормы и относительную ошибку окончательного решения. Подсказка: примените команду while как в у = l i n _ s o l v ( . . . ); count = 0 while С norm(e) > 1.0Е-9 ) г = Ъ - А * у
у=у+е ; count - count + 1 norm_e_is = norm(e) end 16.7
Следуя упражнению 16.6, решите две модифицированные задачи, приведенные ниже, с помощью исключения Гаусса с частичным выбором ведущего элемента в ( = 5-разрядной арифметике. Выясните обусловленность в каждом случае. (а) Оставьте без изменения приведенную выше матрицу Л, а
Упражнения
247
элементы вектора b замените числами, равномерно распределенными на интервале [—0.001,0.001]. Подсказка: Ъ > у = polyval (С, х) ; '/, Значения полинома в х » plot (х,у, 'ow') ;hold on; У, [0] Разбросанные точки » plot (x,y,'-w') ; 7, [1] График сплошной линией >> хр = -9.0 : 0.01 : 10.0 ; V. Длинный вектор с элементами 7. из [-9, 10] >> ур = polyval (С, хр) ; '/, Вычисление в хр для графиков >> p l o t С хр, ур, ' : g ' ) ; Я [2] Пунктирная линия (лучше) » a x i s ( [ - 9 10 -2000 17500]);% Задание осей >> CQ = p o l y f i t ( x , y , 2 ) ; % Квадратичная подгонка на 7. множестве точек (х,у) » у2 = polyval (CQ, xp) ; 7. Значения приближения >> p l o t ( x p , у2, ' — г ' ) ; 7. [3] График в виде штриховой 7. линии » t i t l e ( ' П р и м е р 1 - построение графиков кривых'); hold off 1
Здесь сплошная линия plot ' не является изображением полинома, поскольку это вообще не кривая и полином — далеко не прямая линия. Поэтому приходится брать больше точек, чтобы представить его в виде надлежащей кривой (пунктирная линия). Это первый важный момент для построения графика, который следует отметить при выполнении данной работы; см. рис. 17.1. *) Здесь мы предполагаем, что график имеет черный фон. На тех системах, где это не так, выполните aetfgca, 'Color', ' k ' ) , чтобы установить черный цвет фона, или замените 'white' (белое) в ('ow' и '-w') на 'black' (черное) в ('ok' и '-к').
17.1. ID: Введение
251
-
1
16OOO 14000
•-
•
12000
•
1
\ •
'
-
10000 8ООО /
-
6ОО0 40ОО 2ООО
\
-
'
-Жх \
f
/
/
/
•
•
•
-
-
0
Рис. 17.1. Пример 1—построение графиков кривых (сплошная линия— полином С с небольшим числом точек, пунктирная—с большим числом точек, штриховая — результат квадратичной подгонки).
Обозначения и соглашения. Материалом для всех аппроксимаций служат дискретные значения данных, а для анализа мы специально выбираем контрольные точки. Чтобы избежать путаницы, мы используем обозначения х, у (векторы длины п) для точек данных, xi, yi (векторы длины Т) для контрольных точек и хр, ур (векторы длины L) для точек графика. Очевидно, L должно быть достаточно большим (скажем, L » п), но Т может быть любым числом. Так, в приведенном выше примере было п = 5 и L = 1901. В практических задачах можно выделить две области приложений, где полиномы могут быть полезными: (i) дана сложная функция, и нужно найти простой полином определенной степени, разумно представляющий эту функцию; (и) дано дискретное множество точек, скажем, (ii,j/i), (£2,3/2), ••• Лхп,Уп)> и нужно найти полиномиальную функцию, представляющую эти данные. В главе 4 мы использовали polyf it для подгонки полиномом в случае (ii). Этот метод, использующий для приближения один полином, называется глобальным методом; примером служит рис. 17.1, где показано приближение квадратным полиномом. Мы сравним такой глобальный метод с так называемым методом кусочных приближений, где соединены воедино несколько кусочных интерполя-
252
Глава 17- Интерполяция и приближение функций
ционных полиномов. Здесь в первом случае используется polyf i t , а в последнем — i n t e r p l .
17.2. ID-пример: М-файл intdemol.m Чтобы продемонстрировать работу intdemol. m, возьмем у = cos(2a:) на отрезке [—2,4] с п = 13.
Пример 2. Пусть х = - 2 : 0.5 : 4 у = cos{2 * х). Все приближения этой функции сравниваются в 16 точках xi = —2 : 0.4 : 4, но изображаются в 151 точке хр = -2 : 0.04 : 4. Предлагаем вам распечатать и изучить демонстрационный файл intdemoi.m, в основе которого лежит этот ID-пример; см. рис. 17.2 и 17.3.
17.3. ID-подгонка данных Пусть дано множество точек данных (хг,у\), (£2,2/2), •• • Лхп,Уп)-> и нужно найти полином, аппроксимирующий их. Эта задача рассматривалась в гл. 5.
17.3.1. Глобальный подход (метод наименьших квадратов) Если мы рассматриваем полином степени т, т. е. т
Рт(х) = С{1)х
т
1
+ С(2)х ~
+••• + С{т)х + С(т + 1),
то коэффициенты (вектор С) неизвестны и будут определены путем некоторой минимизации разностей Pm{%i) — УГ- Метод наименьших квадратов дает возможность минимизировать квадратичную ошибку
относительно неизвестных С(г)> где Yi = Pm{^i)- Если т = 1, то получается линейное приближение Pi(x) = С(1)х + С(2), которое обсуждалось в гл.5.
17.3. lD-подгонка данных
- 2 - 1
0
1
2
3
Файл intdemoi.m — пример 1D {пунктирная линия — истинная кривая)
253
4
Р и с . 17.2. ID-глобальное приближение — линейное (о), кубическое (*) и 6-го порядка ( х ) .
- 2 - 1
0
1
2
3
Файл Intdemoi.m — пример 1D (пунктирная пиния — истинная кривая)
4
Рис. 17.3. ID-кусочное приближение — линейное (о), кубическое (*) и сплайнами (х).
254
Глава 17. Интерполяция и приближение функций
Команды MATLAB'a, реализующие этот метод для примера 2 с полиномом пятой степени (т = 5), суть >> х = -2 : 0.5 : 4 ; >> у = cos(2*x) ; >> С = polyfit(x,y,5);
*/. Задается вектор х % Вычисляется вектор у % Вычисляются коэффициенты C(i) У, полинома Р_5(х) » хр = -2 : 0.04 : 4; '/, Задаются точки для графика » fp = polyval(C, хр) ; */, Вычисляются значения Р_т У, для графика >> plot(xp, fp) У, График кривой приближения
17.3.2. Кусочные приближения Вы должны понять из примера 1 (или упр. 17.1), что полиномы (точнее, глобальные полиномы) могут оказаться осциллирующими и тем самым неудовлетворительными. Поэтому рассмотрим теперь альтернативные методы приближений. Интерполяция хотя и похожа, но все-таки отличается от подгонки по методу наименьших квадратов. Здесь мы хотим, чтобы полином без отклонений проходил через все п точек данных. Но степень m такого полинома будет очень большой, а именно та = п — 1 (т.е. на единицу меньше числа пар данных). Глобальная интерполяция полиномами высоких порядков может быть неудовлетворительной, она может оказаться не лучше метода наименьших квадратов, за исключением точного совпадения с данными. Оказывается, что полиномы могут давать хорошие приближения локально (т.е. не глобально, а на небольшом отрезке), и полиномы других или даже тех же порядков могут стать эффективными, если мы разобьем множество данных на небольшие непересекающиеся подмножества. Это приводит к рассмотрению кусочных (кусочно-полиномиальных) приближений 1 *. Поэтому вместо построения полиномов 2 ' степени тп = п—1, как в гл. 5, мы рассмотрим принципы кусочных приближений на примере интерполяции.
*) Современный метод конечных элементов является одним из лучших примеров приложения концепции кусочных приближений. 2 ) Заинтересовавшийся читатель может найти подробности и формулы в любом руководстве по численному анализу. Проведите свое исследование, используя polyfit.
17.3. ID-подгонка данных 255 17.3.2.1. Кусочные линейная и кубическая интерполяции При кусочно-полиномиальном подходе выбирают несколько полиномов невысоких порядков и соединяют эти кусочки вместе (отсюда и название «кусочный»). Полное приближение обычно недифференцируемо1), хотя и непрерывно, но оно эффективно и точно. Приведем два примера кусочной линейной и кубической интерполяции. Команда MATLAB'a interpl может выполнить оба вида интерполяции, линейной и кубической, как показано ниже с данными примера 2: >> х = -2 : 0.5 : 4; '/, Задается вектор х >> у = cos(2*x); У, Вычисляется вектор у >> хх = -2 : 0.04 : 4; */, Для интерполяции и графика >> FL = interpl(x,y, x x , ' l i n e a r ' ) ; /'• Для графика » FC = interpl(х,у, х х , ' c u b i c ' ) ; У. Для графика » plot(xx,FL, ' - r ' , x x . F C ' - g 1 ) Здесь вектор хх выбран с малыми промежутками для построения графика двух интерполяционных кривых, но он может быть любого размера, например, хх — — 1 : 0.3 : 1. 17.3.2.2. Непрерывно дифференцируемая интерполяция — сплайны Несовершенство кусочной интерполяции или отсутствие дифференцируемости преодолевается требованием, чтобы приближение имело непрерывные производные (скажем, первого и второго порядков) во всех интерполяционных точках. Для кубического приближения это приводит к известной интерполяции сплайнами, широко используемой при решении современных инженерных задач. Команда MATLAB'a interpl может выполнить интерполяцию кубическими сплайнами для данных примера 2: >> х = -2 : 0.5 : 4; У, Задается вектор х >> у = cos(2*x) ; У, Вычисляется вектор у >> хр = -2 : 0.04 : 4; '/, Абсциссы для графика » FS = interplCx.y, xp,'spline') ; '/, Ординаты для графика » plot(xp,FS,'-Ъ') J ) При желании полное приближение можно сделать дифференцируемым: см. §17.3.2.2.
256
Глава 17. Интерполяция и приближение функций
17.4. Насколько точно мое приближение? Если приближение, изображенное на графике вместе с точной функцией 1 ), почти совпадает с ней, то это означает хорошую подгонку. Здесь обсуждается способ оценки точности приближения в числовом выражении. Для подсчета этого числа используется некоторое множество контрольных точек. Предположим, что Х\,Х2,... ,жт (в виде вектора xi) есть наши контрольные точки с соответствующими им известными значениями уг,У2, • • • )Ут (в виде вектора yi). Тогда, если /; (в виде вектора fi) являются значениями приближения в xi, то можно оценить работу метода через среднеквадратичную ошибку
Error = J-\\u-yi
|2 — \2 ~
\
Если эта ошибка достаточно мала, мы можем сказать, что соответствующее приближение хорошее. В принципе можно взять Xi — Х{ для всех i (т.е. контрольные точки и точки данных совпадают вместе с Т = п), но тогда это не даст никакой информации, так как при интерполяции в этом случае Error = 0. (Вспомните определение интерполяции.) Для примера 2 в случае приближения полиномом пятой степени по методу наименьших квадратов для оценки ошибки приближения в среднеквадратичной норме выполним >> х = -2 : 0.5 : 4; » у = cos(2*x) ; » С = polyfit(x,y,5) ;
'/, '/, '/, 7,
Задаются точки данных х Вычисляются значения у Вычисляются коэффициенты C(i) полинома Р_5(х)
>> xi = -2 : 0.4 : 4; 7, Задаются контрольные точки » fi = polyvalCC, xi) ; 7, Значения приближения в 7. контрольных точках >> yi = cos(2*xi); '/, Точные значения в контрольных 7« точках » Т = length(xi); 7. Длина xi » Error = sqrt( normCfi - yi)"2 / T) '/. Среднеквадра'/, тичная ошибка *' В реальной жизни, где точная функция или решение неизвестны, полученное приближение обычно сравнивают с известным высокоточным приближением, нахождение которого может потребовать больших временных затрат.
17.5. Введение в многомерные приближения
257
Вспомните здесь, что norm —команда MATLAB'a. Заметим, что в последней строке, если f i заменить вектором, полученным с помощью i n t e r p l (например, FL), прежде чем вычислять разность 1 ' fi — yi, следует проверить, не нужно ли транспонирование.
17.5. Введение в многомерные приближения В §17.1 для ID мы рассмотрели различные способы нахождения полинома Рт(х) (определяемого его вектором коэффициентов С). Однако в задачах реального мира часто используется более одной пространственной переменной; общий полином m-й степени с п переменными из ( R n ) можно представить в виде р
_ р
(Т
~
. . .
г
V" 4
\ _
fi. .
. „Ч ™*2 . . . ™tn
где if. = 0 , 1 , . . . ,m для к = 1,2,... ,n. Для простоты сосредоточимся на 20-задачах с п = 2 и на двух специальных полиномах с т = 1 (линейный) и 3 (кубический). В случае т = 1 мы рассматриваем так называемую билинейную функцию вида Z(x, у) ~ а + Ьх + су + dxy, в то время как в случае т — 3 приблилсаем функции с помощью так называемой бикубической функции 2
2
2
3
2
3
Z(x,y) = а + Ьх + су + dxy + d\xy + d2x y + eix + e2x + fay + f2y
На практике, как и в случае ID, снова можно выделить две ситуации, где полиномы оказываются полезными: (i) дана сложная функция z ~ z(x,y), и нужно найти простой полином Z — Z(x,y) определенной степени (т~1 или 3) для ее разумного представления (на базе N точек); (ii) дано дискретное множество точек данных (xi,y1,z1), {x2,y2,Z2), ..., (xiv,yjv>2jv), и нужно найти полиномиальную функцию Z = Z(x,y), представляющую эти данные. Сначала исследуем пути определения таких полиномов, а затем изучим методы измерения качества каждой подгонки. ^ Более точно, в MATLAB'e версии 4 команда FS = interpKx.y, xp, ' spline') всегда порождает вектор-столбец, даже если хр — вектор-строка. Это не так в версии 5. 17-4196
258 Глава 17. Интерполяция и приближение функций Вам потребуются два основных М-файла, специально разработанных для оставшейся части этой работы: polyfit2.m - подгонка по методу наименьших квадратов в 2D (линейная и кубическая) polyval2.m - вычисления по результатам "polyfit2.m" (линейный и кубический) вместе с демонстрационными М-файлами intdemo2.m, cont4.m и cont7.m. Обозначения и соглашения. Внимательный читатель, возможно, заметил, что • m степень полиномов; • п число независимых переменных; • N число точек данных.
17.6. 2D М-файл intdemo2.ni Чтобы показать работу указанных выше М-файлов, для вас был приготовлен демонстрационный М-фаЙл intdemo2. m, в котором рассматривается следующий пример (N = 25): Пример 3 Пусть
{
х = 0 : 0.25 : 1 1/ = 0 : 0.25 : 1 z = rln(r),
где г = л/{х — 1/2)2 + (у — 1/4)2. Как и раньше, прежде чем идти дальше, вы должны запустить и распечатать этот М-файл intdemo2. m.
17.7. Графики линий уровня, ЗБ-графики и графики сечений Поскольку мы должны работать с функциями п = 2 переменных, придется изучить, как сделать зримыми (визуализировать) такие функции. В MATLAB'e можно изображать графики линий уровня и трехмерные ЗБ-графики после определенной подготовки данных, одной и той же в обоих случаях. Предположим, что мы хотим изобразить функцию z = z(x,y) = {х& - у3 - 0.5)ехр(~х2 - у2)
17.7. Графики линий уровня, ЗП-графики и графики сечений
о
259
о
Рис. 17.4. Сетчатый график.
в области П = [—2, 2] х [—2, 2]. Сначала будет выполняться команда meshgrid, задающая сетку, за ней следуют вычисления значений (если они еще неизвестны): » » » »
хО = -2 : 0.4 : 2; уО = -2 : 0.25 : 2; '/,% хО, уО - два ID вектора [х у] = meshgrid (xO,yO); У,'/, Создаются две матрицы ZZ=(x."6-у."3-0.5) .* ехр(-х.~2-у.~2) ; % Матрица ZZ
SD-графики. Две команды mesh и surf (и их варианты 1 )) могут быть использованы для визуализации ZZ; реальные графики см. на рис. 17.4 и 17.5. >> mesh(ZZ); t i t l e ( ' С е т ч а т ы й график') >> dispC'Pause . . . ' ) ; pause » surf (ZZ) ; title('fl4eiicTbni график') Чтобы повернуть график, воспользуйтесь командой view, например, view(20, 7 0 ) 2 ) . *) Наберите help mesh, чтобы увидеть много ссылок на другие команды. Некоторые команды, как surf и plot3, доступны только в MATLAB'e версии 4. 2 > Параметры команды view задаются в градусах широты и долготы, отсчитываемых от некоторых стандартных нулевых уровней, и определяют положение точки наблюдения— см. help view. — Прим. перев. 17'
260 Глава 17. Интерполяция и приближение функций
Рис. 17.5. Ячеистый график. График линий уровня. Команду contour можно использовать, чтобы нарисовать график линий уровня, но нужно указывать значения уровней (или их число), контуры1^ которых требуется изобразить (посмотрите также М-файл cont4.m). Выполните строки » M=max(ZZ) ; mi=min(ZZ); » V=[mi mi/2 О М/2 М] ;
7, Векторы-строки '/, Некоторые значения У, уровней ZZ » Cl = contour(x,у,ZZ, V , ' - r J ) ; У. ГЛАВНЫЙ шаг >> c l a b e l ( C l ) ; У, Метки уровней (числа) >> titleCTpai^HK линий уровня z ( x , y ) ' ) >> С2 = contourCx,y,ZZ, 7 , ' - g ' ) ; У. Простейшие 7 уровней Результат первых четырех командных строк, когда используется вектор уровней V, показан на рис. 17.6. Замечание: Вы, должно быть, заметили, что для хО — —2 : 0.4 : 2 и уО — — 2 : 0.25 : 2 график поверхности и график линий уровня выглядят очень негладкими. Чтобы повысить гладкость, т.е. изобразить искривленные поверхности более плавно, нужно уменьшить ^ Мы заметили, что в более ранних версиях MATLAB'a (скажем, в версиях 4-), доступны другие способы задания входных данных, например, С1 = coatour(ZZ,7, хО.уО, ' - г ' ) , или С1 = contour(ZZ,V, хО.уО, ' - г 1 ) , или С1 = contour(xO.yO.ZZ,7, ' - г ' ) . Только самый последний вариант имеет смысл в MATLAB'e версии 5.
17.7. Графики линий уровня, ЗО-графики и графики сечений
-2
-1.5
-1
-О.5
261
О
Рис. 17.6. График линий уровня. длину шага, например, взять хО = — 1: 0.01: 2 и уО — —2 : 0.02 : 2 и получить больше точек сетки. Г р а ф и к и сечений. Графики сечений 1 '—это плоские графики, являющиеся сечениями ЗБ-поверхности вдоль одной из координатных осей. Для данных примера 3 можно провести сечение через середину интервала в каждом направлении и затем построить графики отдельно для каждого сечения (см. рис. 17.7): >> х = 0; у = -2 : 0.25 : 2; VI, Число х, вектор у >> Zx=(x. "6-у. "3-0.5) .* ехр(-х.~2-у."2); У, Вектор Zx >> subplot(211);plot(y, Zx,'-r'); title('График сечения') J >> ylabelС'Сечение при x=0 ) >> у = 0; х = -2 : 0.25 : 2; '/, Фиксируем у » Zy=(x. "6-у. "3-0.5) .* ехр(-х.~2-у."2); °/, Вектор Zy » s u b p l o t ( 2 1 2 ) ; plotCx, Zy, ' - g ' ) ; >> ylabelС'Сечение при у=0') Другой {и, может быть, лучший) метод изображения сечений состоит в использовании команды p l o t 3 . Повторим приведенный выше пример в виде » subplot(ill) 1>
В MATLAB'e версии 5 вводится новая удобная команда slice для тех же целей. Наберите help slice, чтобы узнать подробности.
262
Глава 17. Интерполяция и приближение функций
-0.5 -2
-1,5
-1
-0.5
0.5
Рис. 17.7. Графики сечений.
» х = 0; у = -2 : 0.25 : 2; » Zx=(x.~6-y.~3-0.5) .* ехр(-х.~2-у."2) ; >> hl=plot3(zeros(size(у)), у, Zx, ' - r ' ) ; >> hold on У,'/,'/, Необходимо » у = 0; х = -2 : 0.25 : 2; » Zy=(x.~6-y.~3-0.5) .* ехр(-х.~2-у."2) ; J >> h2=plot3(x, zeros(size(x)), Zy, - g ' ) ; » zlabeK'Сечения плоскостями х=0 и у=0') » grid on; hold off '/. Ниже изменяется точка наблюдения » view(10,50) '/, Попробуйте view(80,50) или 7, view(175,50) » setChl.'Linewidth', 3 ) ; set(h2,'Linewidth', 2) » set(gca,'Ytick', -2:1:2)
17.8. Глобальный '\'-метод 263 Здесь посяедние две строки устанавливают атрибуты графика способом, требующим от вас большей подготовки: наберите get(gca) и help set, чтобы узнать, какие другие атрибуты графика можно изменять. Поскольку сечения не представляют график полностью, их нужно применять с осторожностью, но они могут быть полезны при сравнении разных приближений. Конечно, сечение можно сделать в любом подходящем направлении, например, плоскостью х + у = 1.
17.8. Глобальный ; \'-метод Пусть Z(x,у) —приближение функции z(x,y) и z^ = z(xi,yj); при этом может случиться так, что сама функция z(x,y) неизвестна, но известны ее дискретные значения. С помощью метода наименьших квадратов можно минимизировать квадратичную ошибку (полагая 2ц — Z(x{,yj) для всех i,j)
Минимизация проводится по параметрам приближающей функции (например, это а, Ь, с, d в случае билинейной функции из § 17.5). Этот метод реализован в двух М-файлах, где был использован \подход (теорию см. в гл. 5). Синтаксис использования polyf it2.m и polyval2.m для примера 3 таков (см. cont7.m): хО = 0:0.25:1; уО = хО; VI, Интерполяц. узлы [х у] = meshgridfxO, уО); R = sqrt ( (х-1/2).~2 + (у-1/4)."2 ); z = R. *log(R+eps) ; VI* Истинные и данные VI, значения Cl = polyfit2( x,y,z, 'linear'); С2 = polyfit2C x,y,z, 'cubic' );
V/XIX/X/XIX/X/. Вычисления только для графиков Ш'/.Ш хО = 0:0.02:1; уО = хО ; '/, Задание узлов [xi yi] = meshgrid(xO, yO); Zl = polyval2( Cl, xi,yi, 'linear'); % Билинейное '/, приближение Z2 = polyval2( C2, xi,yi, 'cubic' ); '/. Бикубическое У, приближение
yX/XIX/XIX/Xa Графики линий уровней Ш Ш Ш Ш Ш Ш Ш c o n t o u r ( Z l , 9 , xO.yO, ' - g ' ) ; contour(Z2,9, xO.yO, ' : r ' ) ;
hold on; */, 9 hold off
уровней
264
Глава 17. Интерполяция и приближение функций
17.9. Кусочный метод Глобальный метод может давать плохие результаты для некоторых сложных функций, поскольку полиномы высоких порядков осциллируют1). Другой подход, как и в Ш, состоит в использовании кусочных методов, преимущество которых заключается в гладкости полиномов низкого порядка и разумной локальной точности. Здесь мы рассмотрим интерполяцию кусочными полиномами небольшой степени. Команда MATLAB'a interp2 может быть использована как для билинейной, так и для бикубической интерполяции. Как мы знаем, пересечение двух кусков поверхности является кривой, имеющей несчетное число точек. Невозможно получить одновременно непрерывность и дифференцируемость2) для всех точек этой кривой, поскольку число степеней свободы полинома любого порядка ограничено. Поэтому существуют только одномерные «сплайны». Сейчас мы покажем, как использовать interp2 в примере 3 (см. cont7.m) » х=0 :0.25: 1; у=х; [х y]=meshgrid(x, у); » R=sqrt ( (х-1/2).~2 + (у-1/4)."2 ); z = R.*log(R+eps); >> ха=0 :0.05: 1 ; уа=ха ; У, Новый ID-вектор >> [xi yi] = meshgrid(xa, ya) ; '/, Новые 2Б-матрицы >> zL = interp2(x,y,z, x i , y i , ' l i n e a r ' ) ; >> zC = interp2(x,y,z, x i , y i , ' c u b i c ' ) ; » contour(zL,9, xa.ya, '-w'); hold on; J » contour(zC,9, xa,ya, - b ' ) ; hold off
17.10. Сравнение приближений Для функции z = z(x,y), мы обсудили четыре вида приближений Z ~ Z(x,y). Попробуем выяснить, какое из них ближе всего к исходной функции, сравнив их в некоторых отобранных точках. 1 * Непосредственное использование в методе наименьших квадратов команды \ вместо polyfit не дает осцилляции, но тогда приближение не будет совпадать с точными значениями в заданных для его построения точках, что уже отмечалось в гл.5. — Прим. перев2 ' Однако в таких случаях можно довольствоваться неполной дифференцируемостью (дифференцируемостью лишь в некоторых, а не во всех точках кривой). Такого результата можно достичь, используя тензорные произведения.
17.10. Сравнение приближений
265
Этими отобранными точками, называемыми контрольными, как и в Ш. могут быть точки, которые мы использовали при построении различных графиков, но только не начальные точки данных хО и уО. Предположим, что приближение Z и соответствующие ему значения z истинной функции представлены в виде матриц (скажем, размеров iV3 x Лг2). В примере, рассмотренном в последних двух разделах, таким приближением Z могут быть Zl,Z2,zL,zC, а при вычислении z используется исходная функция z(x,y). Теперь можно приступить к рассмотрению следующих двух методов. Геометрическое сравнение. Используя оператор hold on, мы можем наложить приближение Z на изображение линий уровня истинных значений z (конечно, применяя разные цвета). Тогда большие расхождения будут указывать на то, что рассмотренное приближение не очень хорошее, и наоборот. Замечание: Трудно совмещать графики непосредственно командами mesh и surf. Прежде чем произвести сравнения с помощью графиков сечений, можно построить график линий уровня, чтобы узнать, где расположены главные особенности функции. Заключения, сделанные на основе геометрического сравнения, могут быть субъективными, но такой подход дает эффективный способ установить, какой метод приближения самый плохой. Алгебраическое сравнение. Более полезный, но и более утомительный метод измерения расхождения между двумя матрицами заключается в использовании норм, например1', Е = norm(Z ~ z) в качестве показателя величины погрешности2' — малое значение Е указывает на хорошее приближение, и наоборот. В технических приложениях, как и для случая ID, чаще всего используют так называемую среднеквадратичную норму ошибки, определяемую как Е= Чем меньше эта величина, тем лучше метод. 1 ' Здесь это норма вектора, получаемого из матрицы ее вытягиванием в один столбец. — Прим. перев. 2 ' О других нормах упоминается в гл. 16.
266
Глава 17. Интерполяция и приближение функций
Оказывается, что эта формула напоминает норму Фробениуса для матрицы (Z — z), которую молено вычислить с помощью команды MATLAB'a norm(Z-z, ' f r o ' ) . Поэтому величина Е может быть вычислена следующим образом: >> [m n] = s i z e ( Z ) ; » inn = m * п ;
>> format compact;
7, Размеры матрицы У, Общее число узлов
°/, Удаляются лишние пустые строки
>> dispC'Среднеквадратичная ошибка равна '); » Е = s q r t ( normC Z-z, ' f r o ' ) "2 / ran ) В заключение отметим, что подгонка данных и приближение функций играют важную роль в научных расчетах. Как показывает эта работа, эффективный метод не для всех задач работает хорошо — факт, который служит типичным примером трудностей и сложных проблем, встающих перед математиками, занимающимися вопросами реального моделирования. Имеется много других глобальных функций, которые можно подставить вместо полиномов (таких, как тригонометрические функции, радиальные базисные функции и совсем недавнее изобретение -—вэйвлет-функции). И снова в каждом из этих случаев можно увидеть некоторые варианты кусочного подхода — в функциях с относительно малым компактным носителем. Вообще говоря, применение робастных (устойчивых) методов приближения требует тщательного экспериментирования и анализа результатов, но это должно предопределяться математическим исследованием каждой задачи.
Упражнения 17.1
Дана функция f(x) — 1/(1 + 25х2) на отрезке [—1,1] и девять точек данных х = —1:0.25:1; выведите график функции вместе с ее приближением полиномами 3 и 7 степеней.
17.2
Для функции f(x) из упр. 17.1 постройте ее график вместе с ее кусочными линейным, кубичным и сплайновым приближениями.
Упражнения 17.3
267
Для следующих функций, заданных на отрезке [0,1]: (a) f(x) = -(x + a)R + [aR{l-x) + {l+a)Rx] при а=10~2 и R — —I (b) f{x) = (l-x){tan-1[b(x-xQ)]+tzn-1[bx0]} при Ь = 100 и х0 = 1/4, (c) /(z)=tanh[20(a:-l/2)]. (d) Дополнение. f{x)=10000{fi(x)+f2(x))\{x-l/4){x-Z/4)\3 при fi(x) ~~(x + a)R + [aR(l-x) + {l+a)Rx] и f2{x) = -(l-x + a)R + [aRx + {l+a)R(l-x)]. где а = 0.3 и Д = -1/4. (i) Сравните результаты (эффективность) четырех приближений: метода наименьших квадратов с т = 1 : 2 0 , кусочно-линейного метода, кусочно-кубического метода и метода кубических сплайнов, используя п — 10 равномерно распределенных точек данных (х = 0 : 1/9 : 1). (ii) Постарайтесь улучшить результаты хотя бы двух приближений: метода наименьших квадратов с т — 1: 20 и кусочно-линейного метода, выбирая «вручную» п=10 неравномерно расположенных точек данных (например, х — [0:0.1:0.4 0.6 : 0.1 : 1] или х = [0 0.26:0.15:0.44 0.47: 0.035:0.65 1]). Изобразите оба приближения на одном графике. Замечание. В каждом случае, чтобы упростить задачу, вы должны: (1) найти среднеквадратичную ошибку для Х = 10п + 1 равномерно распределенных контрольных точек (т.е. контрольных точек с шагом 1/10); (2) ранжировать методы от лучших к плохим в виде таблицы эффективности (в соответствии с показателем величины ошибки для контрольных точек); (3) изобразить всех конкурентов на одном графике. Подсказка: (i) Для метода наименьших квадратов рассмотрите полиномы вплоть до т = 20 степени, но для сравнения возьмите лишь лучший результат, (ii) Если вы не уверены, как «выбрать вручную неравномер-
268
Глава 17. Интерполяция и приближение функций но расположенные точки данных», то может помочь следующее: • изобразите данную функцию, • изобразите первую производную данной функции, затем выберите больше точек вблизи области наибольшей вариации функции или вблизи области больших значений ее производной. к ; —i~^ = 1 - tanh 2 (x) и ~ y dx ' dx 1+x2 (iv) По завершении вы должны получить (1) 6 графиков; (2) таблицу 3 x 4 среднеквадратичных погрешностей и результаты после использования равномерно распределенных точек; (3) таблицу 3 x 2 среднеквадратичных погрешностей и результаты после использования неравномерно расположенных точек.
(iii)
17.4
Изобразите следующие две функции, а также постройте графики их сечений в некоторых подходящих местах (в каждом случае требуется один ЗЭ-график и один график сечения): • gi{x,y) = tanh[20(x + у - 1)] в области [0,1] х [0,1]; • 92(х,у) = t a n h [ 2 0 ( a : 2 + y 2 - l / 2 ) ] в области [0,1] х [0,1].
17.5
Для функций из упр. 17.4 постройте графики линий уровня (для пяти уровней) их линейного и кубического приближений; используйте N = 11 точек в каждом координатном направлении, т.е. хО = уО = О : 0.1: 1.
17.6
Для функций из упр. 17.4 постройте график линий уровня (для пяти уровней) их кусочных линейного и кубического приближений; используйте N — 9 точек в каждом координатном направлении, т.е. хО = уО = 0 : 1/8 : 1 .
17.7
Для одной из функций из упр. 17.4 сравните ее глобальные линейное и кубическое приближения на основе JVj = ЛГ2 = 13 точек (см. упр. 17.5 при хО = уО = 0 :1/12 :1) с ее кусочными линейным и кубическим приближениями на основе JVi = N2 = 8 точек (см. упр. 17.6 с хО = уО = 0 : 1/7 : 1): (а) Сначала выполните алгебраические сравнения и в каждом случае ранжируйте четыре метода от лучшего к худ-
Упражнения
269
шему. Число контрольных точек должно быть больше, чем 4 * N\ * N2. (b) Затем получите соответствующие графики, подтверждающие ваши заключения. (Определенно графики сечений будут полезны, но попробуйте получить хотя бы один график уровней или ЗБ-график.)
18 Обыкновенные дифференциальные уравнения
Цель работы Вам предлагается исследовать решения ряда обыкновенных дифференциальных уравнений, используя любые методы, имеющиеся в вашем распоряжении.
Используемые математические понятия Некоторые из уравнений можно решить аналитически, применяя такие математические приемы как разделение переменных, интегрирующие множители или представление решения в виде ряда. Другие являются примерами однородных дифференциальных уравнений или уравнений с постоянными коэффициентами. На чем вы сосредоточите свое внимание, сильно зависит от вашей математической подготовки по этому вопросу.
Используемые возможности MATLAB'a Все необходимые здесь средства были введены в гл. 7. Например, анализ полей направлений (или графиков в фазовой плоскости) и численное решение систем уравнений первого порядка. Может оказаться, что вы найдете полезными М-файлы, связанные с этой работой (fodesol.m, s p e c i e s , m, vderpol .m,...). Можно прямо воспользоваться ими или скопировать и внести в них требуемые изменения.
18.1. Стратегия Ваша цель для каждого уравнения из списка упражнений — подготовить надлежащим образом следующую информацию: (а) Для уравнений первого порядка постройте график полей направлений типичного решения. Для уравнений второго порядка или систем уравнений первого порядка сделайте набросок типичного графика в фазовой плоскости.
Упражнения
271
(b) Общее аналитическое решение, если сможете его найти. (c) Частное решение для заданных начальных условий. (d) Любые другие соображения, которые вы пожелаете сделать, о природе решений, их устойчивости и т.д. В каждом случае начинайте с определения типа дифференциального уравнения. Линейное? Какого порядка? Имеет постоянные коэффициенты? Однородное? Если оно знакомого вам типа, то попытайтесь решить его «аналитически», т. е. с карандашом и бумагой. Если не можете, то посмотрите, нельзя ли воспользоваться одним из методов, описанных в гл. 7. Если вы сможете решить уравнение точно, то сравните это решение с численным или графическим, используя MATLAB. В каждом упражнении вам надо найти частное решение. Приложите все ваши силы, чтобы решить эти задачи.
Упражнения 18.1
Найдите у при х — 1 для частного решения уравнения — = — 2ху,
18.2
удовлетворяющего начальному условию у(0) = 1. Найдите у при х = 1 для частного решения уравнения dx
18.3
удовлетворяющего начальному условию у(0) = 1. Найдите у при х — 5 для частного решения уравнения {х - 2 у ^ ) ~ ^ - у = 0, ах
18.4
удовлетворяющего начальному условию у(1) = 10. Найдите у при х = 1 для частного решения уравнения +
18.5
{х > 0,з/ > 0),
3
удовлетворяющего начальным условиям у(0) = 1, у'(0) = 0. Найдите у при х = 4 для частного решения уравнения
удовлетворяющего начальным условиям у(0) = 1, з/(0) = 0.
272
Обыкновенные дифференциальные уравнения
18.6 Найдите у при х = 4 для частного решения уравнения
удовлетворяющего начальным условиям t/(0) = 1, у'(0) = 0. 18.7 Найдите у при х = 4 для частного решения уравнения
удовлетворяющего начальным условиям у(0) = 1, у'(0)=0. (Подсказка: Вы можете встретиться с трудностями при определении численного решения, когда х находится вблизи 0 (это называется «регулярной особой точкой»). Рассматривая разложение в ряд Маклорена вида у(х) жа + Ьх + сх2, вы сможете определить поведение у и его производной при очень малых х, и использовать это в вашем М-файле.) 18.8 Найдите х при t ~ 1 для частного решения уравнений — =x(2x + i/-3), -£=у(х + 2у-3), at at удовлетворяющего начальным условиям ж(0) = | , у(0) = 1. (Ло^сказка. Вспомните о неподвижных точках и устойчивости, рассмотренных в гл. 7.) 18.9 Найдите у при х = 1 для частного решения уравнения
удовлетворяющего начальным условиям у(0) = 0, у'(0) = —|. (Подсказка. Воспользуйтесь рекомендацией из упр. 18.7, если вы столкнетесь с трудностями при нахождении решения в некоторых точках х.)
Часть III
Моделирование 19. Кассовые очереди: длинные и короткие 275 19.1. Имитация очередей 276 19.2. Придорожная заправочная станция 280 19.3. Кафетерий 283 Упражнения 284 20. Рыбное хозяйство 287 20.1. Предварительный взгляд на проблему 20.2. Модели роста рыбы 288 20.3. Построение матрицы Лесли 291 20.4. Стратегия рыбной ловли 293 Упражнения 294
288
21. Эпидемии 296 21.1. Предварительные замечания о некоторых данных 297 21.2. SIR-модель динамики эпидемии 298 21.3. Аналитическое исследование поведения 299 21.4. Анализ данных 301 Упражнения 302 22. Динамика сноуботинга 304 22.1. Предварительные замечания о задаче 305 22.2. Уравнения движения 306 22.3. Исследование рабочих параметров 308 Упражнения 309 23. Приливы 311 23.1. Предварительные замечания о данных по приливам 312 23.2. Ряды и методы Фурье 312 23.3. Анализ электрического сигнала 314 23.4. Фурье-анализ данных о приливе 315 Упражнения 315 18-4196
19 Кассовые очереди: длинные и короткие
В повседневной жизни мы встречаем много примеров очередей типа «первым прибыл — первым обслужен», т.е. очередей обслуживания в порядке поступления (fifo — first-in-first-out), которые обычно являются простыми системами массового обслуживания. Более сложная система с несколькими очередями может, с одной стороны, включать в себя структуру с объединением по входу, в которой несколько отдельных очередей соединяются в последнем устройстве, а с другой стороны, содержать структуру с разветвлением по выходу, где единственная очередь разветвляется на несколько различных подочередей. Люди, объекты, клиенты, которые проходят через систему, известные как объекты, могут иметь различные атрибуты (признаки, свойства, такие, как этилированный или неэтилированный бензин, оплата наличными или чеками), с которыми они проходят через систему.
Цель работы Моделирование очередей имеет двойное назначение. Во-первых, как клиенты, мы предпочитаем иметь дело с короткими очередями, чтобы экономить время. Во-вторых, в качестве управляющих делами, мы стремимся к рентабельности обслуживания, когда отношение полезного времени обслуживания ко всему доступному времени обслуживания приближалось бы к 100%, чтобы максимизировать прибыль, но при этом избегаем длинных очередей, чтобы не отпугнуть клиентов. Поэтому важно уметь предсказывать пиковые времена длинных очередей до принятия решения по улучшению обслуживания.
Используемые математические понятия Статистические распределения и вероятности, использованные здесь, обсуждались в гл. 6. Разреженные векторы из нулей и единиц для извлечения данных порождаются при различных условиях, и нам придется более аккуратно обрабатывать такую информацию.
18'
276
Глава 19. Кассовые очереди: длинные и короткие
Используемые возможности MATLAB'a Главным образом используется М-файл queue. m с тремя вспомогательными М-файлами exprand. m, normrand. m, unirand. m; основные команды MATLAB'a —plot, bar, sort, rand. Работа делится на три части. В § 19.1 рассматриваются некоторые приемы моделирования простых очередей и объясняется работа основного М-файл queue.ш. В §19.2 моделируются очереди на бензозаправочных станциях напряженных автострад, а в § 19.3 рассматриваются очереди в кафе у площадки для временной парковки автомобилей. Каждая из этих задач представляет собой отдельную работу, в которую может входить принятие решений по численности персонала, увеличению размеров прибыли и затратам на рекламу.
19.1. Имитация очередей Имитация осуществляется в виде последовательности событий двух типов • Поступление. Объект поступает в службу обслуживания и присоединяется к очереди. Если очередь до этого была пуста и обслуживание не проводилось, то для поступившего объекта оно начинается немедленно, а в противном случае объект становится в конец очереди и ждет обслуживания. • Конец обслуэюивания. Объект движется к конечной стадии. Если перед ним уже нет других объектов, то его обслуживание начинается немедленно и до своего окончания не фиксируется как отдельное событие. Конечно, если очередь пуста, то обслуживание не начинается до следующего поступления. 1
Если есть другие стадии ^, объект прямо переходит в следующую очередь, и это поступление в новую очередь не фиксируется как отдельное событие. Если следующей стадии нет, объект покидает систему- В примерах, приведенных в следующем разделе, «средство передвижения» —это объект, а «бензонасос» —обслуживание, в то время как в § 19.3 «люди» —объект, а «продажа товаров в магазинах и кафе» — обслуживание. Все объекты различаются по некоторым признакам. В случае одной очереди и одного устройства обслуживания нам обычно нужны • вектор 1 — последовательность интервалов времен и между поступлениями; 1
* Например, слияние или разветвление. — Прим. перев.
19.1. Имитация очередей 277
• вектор 2—последовательность интервалов времен и обслуживания (атрибуты). Заметьте, что команда cumsum преобразует интервал времени между поступлениями в момент времени поступлений. Как уже отмечалось, необходимо обращать внимание одновременно и на объект (или объекты), и на общую рентабельность обслуживания, чтобы сделать лежащую в основе коммерческую деятельность удобной и квалифицированной и в то же время экономически выгодной. Два указанных выше вектора могут быть использованы для получения требуемой информации — с этой целью мы разработали М-файл queue.m. Но сначала напомним, как мы моделировали интервалы времени между поступлениями и интервалы времени обслуживания. 19.1.1. Статистическая теория Промежуток времени между поступлениями It можно описать экспоненциальным распределением. Как и в гл. 6, запишем его в виде
где г — равномерно распределенная переменная, L — средний интервал времени между поступлениями, a It — интервалы между поступлениями (имитированные). Интервалы времени обслуживания обычно определяются дискретными характеристиками (такими, как: 40% поворачивает налево, а 60% поворачивает направо) и могут имитироваться с помощью генератора случайных чисел MATLAB'a, как в гл. 6. 19.1.2. М-файл queue.m и некоторые связанные с ним М-файлы Заранее подготовленный М-файл queue .m создан, чтобы вычислять время ожидания и время окончания обслуживания для заданных времени поступления и времени обслуживания. Обращение к М-файлу имеет вид »
[Mean_q Serv_u Wait_t Stop_t] = queue(Arr_t, Ser_t)
где два входных вектора суть • Arr_t — вектор времен поступления, • Ser_t —вектор времен обслуживания,
278
Глава 19. Кассовые очереди: длинные я короткие
а четыре выходных параметра —это • Mean.q —скаляр, показывающий среднюю длину очереди за время имитации; • Serv_u — скаляр, показывающий долю общего времени, когда обслуживание было востребовано; • Wait_t — вектор времен ожидания обслуживания в очереди без учета времени обслуживания; • Stop_t— вектор времен окончания обслуживания. Например, для двух поступлений Агг = [2 8] и соответствующих времен обслуживания Ser = [7 4] (в минутах) будем иметь » [М S Wait Stop] = queue(Arr, Ser) M - 0.9231 S = 0.8462 Wait = 0 1 °/, 1-й не ждет, а ждет только 2-й Stop = 9 13 7, Время окончания обслуживания М-файл queue.m, использованный выше, разработан для имитации простой очереди. Для более сложных примеров придется уже не один раз обратиться к программе queue.m ^. Для упрощения получения случайных чисел вы можете воспользоваться М-файлами exprand. m, normrand. ш и unirand. m. Их легко понять, поскольку они рассматривались в гл. 6, но все же, если нужно, наберите help, чтобы вспомнить обращение к ним. Для вычисления экспоненциально распределенных элементов п х fc-матрицы с средним fi = mu наберите >> matrix = exprand(ти,п,к) Чтобы вычислить нормально распределенные элементы п х ^-матрицы с средним (х = mu и стандартным отклонением a ~ sigma, наберите » matrix = normrand(mu,sigma,n,k) Чтобы вычислить п х ^-матрицу с равномерно распределенными между а и Ь, наберите » matrix = unirand(a,b, n,k) 1 ' Мы заметили, что с точки зрения прибыльности время обслуживания должно достигать 100%, чтобы минимизировать стоимость, но это неизбежно приводит к длинным очередям, чего следует избегать, максимально поддерживая заинтересованность клиента.
19.1. Имитация очередей 279 19.1.3.
Лучшее время делать покупки
Покупатели встают в очередь к кассе супермаркета в соответствии с экспоненциальным распределением времен поступления со средним значением L ~ 50 сек. Каждый делает / = 10 или меньше покупок, а время обслуживания покупки кассой есть 5 = 10 сек. Здесь время между поступлениями клиентов может быть имитировано посредством IT = exprand(5, L) для пяти покупателей, а число их покупок имитируется с помощью N = ceil(unirand(5,0,10)). Некоторые выборочные данные показаны в табл. 19.1. Время поступления AT может быть вычислено командой cumsum по времени между поступлениями I T . Далее, мы можем вычислить времена того, когда посетитель отходит от кассы супермаркета, как долго каждый посетитель должен стоять в очереди, а также среднее время ожидания и процент времени, когда касса работает. Вся эта информация может быть получена всего одним обращением к М-файлу queue.m следующим образом: » IT = [47 94 58 103 3 ] ; » AT = cumsumC IT ) » ST - [90 70 70 30 60] ; У. Время обслуживания >> [Mean.q Ser_u Wait_t Stop_t] = queue(AT,ST) Решение, найденное M A T L A B ' O M , будет AT = Mean_q = Ser_u = Wait_t = Stop_t =
47 141 0,.9158 0..8163 0 0 137 211
199
302
305
12 281
0 332
27 392
Это означает, что в среднем клиента ожидает очередь длиной в Mean_q = 0.9158 и 1 человек (т.е. кассовое обслуживание работает Таблица 19.1. Имитация данных по кассовой очереди супермаркета Время между поступлениями IT 47 94 58 103
Число покупок N 9 7
3
6
7 3
Время обслуживания ST = S * К 90 70 70 30 60
280
Глава 19. Кассовые очереди: длинные и короткие
Таблица 19.2. Результаты имитирования работы очереди в кассу супермаркета Событие
Начало поступление(1) поступление(2) поступление(3) поступление(4) поступление(б)
В
,рем* (сек) 0 47 141 199 302 305
N
ST
9 7 7
90 70 70 30 60
3
6
QL ^ 0 1 1 2 1 2
Сле
ДУюЩее поступление 47 141 199 302 305 343
EoS
Свободно 137 211 281 332 392
быстро). В частности, из пяти пришедших первому, второму и четвертому клиентам не пришлось ждать, а третий и пятый клиенты были немного менее удачливы, так как им пришлось подождать в очереди из одного человека перед ними. 19.1.4- Таблица событий После окончания имитации мы можем построить таблицу событий на основе полученной информации. Таблица событий представляет каждый из объектов во всех подробностях: время поступления, детали атрибутов, длина очереди и время окончания обслуживания. Таким образом, мы имеем возможность отслеживать ход событий, чтобы обеспечить эффективное функционирование и управление обслуживанием. В рассмотренном выше примере о покупках большая часть результатов наблюдений над очередью может быть отражена в таблице событий (см. табл. 19.2), содержащей время поступления, время ожидания, время окончания обслуживания и т.д., где N обозначает число покупок и EoS — время окончания обслуживания, тогда как QL —это длина очереди, вычисляемая вручную (замечание: среднее этих QL определяется в queue. m, а последний столбец EoS есть время окончания обслуживания, полученное с помощью queue.ш).
19.2. Придорожная заправочная станция Придорожная заправочная станция (см. рис. 19.1) располагается у дорожной развилки и имеет один въезд с автострады и один с боковой дороги. У каждого въезда находится по одному бензонасосу, причем автомобили с автострады образуют очередь у одного насоса, а машины с боковой дороги —у другого.
19.2. Придорожная заправочная станция 281
Рис. 19.1. План заправочной станции (главный насос на автостраде). Все клиенты, предварительно заправившись бензином, стоят в очереди, чтобы заплатить в единственную кассу, причем 20% платят наличными, 30% — кредитными карточками и 50% — чеками (подумайте, как вы смогли бы распознать их). Интервалы времени между поступлениями автомобилей распределены по экспоненциальному закону со средним временем 100 сек для автострады и 150 сек для боковой дороги. Время обслуживания для каждого насоса имеет нормальное распределение, изменяясь от 10 до 100 сек в случае насоса у автострады и от 30 до 150 сек в случае другого насоса. Время, затрачиваемое на кассовые расчеты, равно 30 сек для наличных, 40 сек для кредитных карточек и 60 сек для чеков. Исходя из малой выборки первых нескольких поступлений, можно определить их моменты времени поступлений, время заправок и кассовых расчетов (с округлением до ближайшей секунды), используя псевдослучайные числа, как показано в табл. 19.3, где «главный» относится к насосу у автострады, а случайный вектор г используется для задания способа оплаты (вектора s). Время в таблицах данного раздела дано в секундах. Далее в табл. 19.4 приведена соответствующая таблица событий, чтобы показать результаты Таблица 19.3. Выборочные данных для придорожной заправочной станции Поступления AT Обслуживание ST главный 2 246 344 400
боковой главный 17 72 98 356 405
56 52 94 • 33
Способ оплаты
Время кассовых боковой случайный г символ s расчетов 46 129 74 19
0.96 0.96 0.07 0.22 0.11
+1 +1 1 0
60 60 30 40 30
282
Глава 19. Кассовые очереди: длинные и короткие
Таблица 19.4. Выборочная таблица событий для примера с автострадой ('ml.p' означает первое поступление 'ml' к насосу со стороны автострады (обозначаемому как главный), 'ml.k' означает первое поступление 'ml' к кассе и аналогично 'sl.p' и 'sl.k' для боковой дороги). Код
события начало ml.p sl.p ml.k sl.k s2,p s3.p s2.k m2.p s3.k m2.k m3.p s4.p
Время Время (сек) оплаты 0 2 17 58 63 72 98 201 246 275 298 344 356
60 60 30 40 30
Длина очереди
Следующее поступление главная боковая кассы главная боковая (выход) 2 0 0 0 17 1 58 0 0 246 17 1 1 0 246 72 63 1 72 0 1 246 118 2 72 178 0 0 246 2 0 1 246 98 201 2 2 246 356 275 0 1 0 1 246 356 231 1 1 0 344 356 298 1 1 344 0 356 315 0 0 344 356 345 2 1 1 400 0 405 438 1 1 0 400 405 375
ш
(замечание: EoS — время окончания обслуживания — соответствует событию в столбце 1). Мы снова можем использовать queue.m, чтобы проверить правильность столбца EoS: » Arr = С 58 63 201 275 298] ; У.'/, Поступления в очередь V/, к кассе » Ser = [ 60 60 30 40 30]; » [mq su wait_t EoS] = queue(Arr, Ser) где Arr и Ser выбраны из строк с меткой к табл. 19.4 (фактические общие поступления в очередь к кассе). Результаты (для EoS) согласуются с соответствующими элементами последнего столбца табл. 19.4, как и следовало ожидать: [mq su] = 0.8464 0.6377 ' wait_t 0 55 0 0 EoS = 118 178 231 315
17 345
7. Хорошо '/.
Замечание: Пусть для времен кассовых расчетов через г обозначен вектор равномерно распределенных чисел из [0,1], так что при оплате наличными 0 < г < 0.2, для кредитных карточек 0.2 < г < 0.5 и для чеков 0.5 < г < 1. Тогда для получения единиц при г < 0.2 и нулей при г > 0.2 нужно просто положить kl = ( r < = 0 . 2 ) .
19.3. Кафетерий
283
Кафетерий
Рис. 19.2. Расположение кафе. Здесь (г < = 0.2) — логическое выражение, a fcl принимает значение 1 или 0.
19.3. Кафетерий Кафетерий расположен у стоянки автомобилей для посетителей делового центра розничной торговли, объединяющего три главных коммерческих предприятия: супермаркет, магазин «Сделай сам» и садовый центр. Посетители посещают эти магазины прежде, чем заглянуть в кафе и что-нибудь поесть и выпить. Как показано на рис. 19.2, они заходят в один из трех магазинов, чтобы купить различные товары, и через некоторое время большинство из них заканчивает свое посещение торгового центра в кафе, входя туда через переднюю (главную) дверь. Кроме переднего входа есть еще и задний вход, но касса в кафе только одна. Предварительные данные говорят о том, что: (a) Интервалы времени между приходами покупателей в каждый магазин подчиняются экспоненциальному распределению со средними mi, m> whos
» plotC . .. .) и т.д. При выполнении упражнений можно использовать различные сочетания методов. Среди них: • отображение данных в виде графиков (с различными областями определения, если это необходимо); • изучение как графиков результатов Фурье-анализа, так и самих спектров; • определение простых параметризаций поведения основных синусоидальных составляющих, как в уравнении (23.1); • использование команды spline при интерполяции подмножеств данных.
Упражнения 23.1 Сравните временной интервал между измерениями с общим временем, затраченным на проведение измерений прилива. 23.2 Рассмотрите максимумы, минимумы и среднее данных. 23-3 Постройте график высоты как функции времени для различных временных масштабов—день, неделя и т.д. 23.4 Воспользуйтесь функцией locmax для оценки величин самого высокого и самого низкого приливов. Действительно ли это значения высокого прилива? 23.5 Оцените как можно лучше типичное время между последовательными самыми высокими значениями прилива.
316
Глава 23. Приливы
23.6
Определите дни, когда колебания прилива наиболее сильные/слабые. Определите даты, к которым относятся данные о приливе, и среднее значение измеренной высоты прилива за этот период. Определите абсолютные максимальное и минимальное значения измеренных высот и время, когда они были зарегистрированы. Оцените самый высокий прилив (измеренный прямо или нет) и время, когда он наблюдался. Проделайте то же для самого низкого прилива. Найдите основные частотные компоненты в порядке убывания их значимости. Прокомментируйте численные значения соответствующих периодов. Оцените среднее время между последовательными низкими или высокими приливами. Оцените уровень моря в 3 часа 10 мин пополудни 13 января и в 6 часов пополудни 4 марта 1992 г. Постройте график скорости (м/сек), с которой прилив уходил в полдень 22 января 1992 г. с берега, который имеет уклон 1 к 200 (предполагая приливные изменения не зависящими от географического положения). Какова максимальная скорость, достигнутая на песчаном берегу, и когда она была достигнута? В качестве помощи можете воспользоваться параметризацией (23.1).
23.7 23.8 23.9 23.10 23.11 23.12 23.13
Приложение 1 Краткий перечень команд MATLAB'a
Более полную информацию о командах можно найти с помощью help, а здесь мы приводим лишь краткий перечень использованных в тексте команд. Чтобы получить детальное описание команды, наберите help command.
Основные команды help fname quit exit type fname who whos clear what which format demo
выводит строки-комментарии в начале М-файла fname завершает работу системы MATLAB то же, что и quit выводит листинг М-файла fname выводит список текущих переменных выводит более подробную информацию о текущих переменных удаляет переменные и функции из оперативной памяти выводит список всех М-файлов, находящихся на диске выводит местоположение М-файлов устанавливает формат вывода результатов в командном окне запускает демонстрационные программы MATLAB'a
Встроенные значения pi inf flops
7Г GO
подсчитывает число операций с плавающей точкой
ans clock
текущий результат текущее время
318
Приложение 1
Арифметические и матричные операции + * .* / ./ \ " ."" ' size length sum norm
сложение чисел (скаляров), векторов и матриц вычитание чисел (скаляров), векторов и матриц умножение чисел или совместимых матриц и векторов поэлементное умножение векторов и матриц одного размера деление чисел, правое (обычное) матричное деление поэлементное деление векторов и матриц одного размера левое матричное деление возведение числа или квадратной матрицы в степень поэлементное возведение в степень вектора или матрицы транспонирование размеры матрицы или вектора число компонент вектора сумма элементов вектора вычисление нормы матрицы или вектора
Стандартные математические функции sin, cos, tan acos, asin exp, log sqrt rand round fix abs angle r e a l , imag conj
обычные тригонометрические функции обратные тригонометрические функции экспонента и натуральный логарифм квадратный корень генерирует числа на отрезке [0,1) округляет до ближайшего целого округляет, отбрасывая дробные части модуль вещественного или комплексного числа аргумент комплексного числа вещественная и мнимая части комплексного числа комплексное сопряжение
Краткий перечень команд MATLAB'a
319
Матричные функции det eig inv rref rank
определитель квадратной матрицы собственные значения и собственные векторы квадратной матрицы обратная матрица приведение матрицы к верхней треугольной форме ранг матрицы
Команды вывода графиков plot hold on/off clg mesh meshdom contour bar title xlabel, ylabel axis text print
построение графика по точкам, заданным векторами (кусочно-линейный Х,У-график) наложение графиков очистка графического окна график ЗБ-поверхности в виде сетки линий область определения сеточного графика ЗБ-поверхности график линий уровней столбцовая диаграмма вывод текстовой строки над графиком вывод текстовых строк вдоль осей х и у масштабирование осей надпись на графике вывод на печать текущего графика
Команды вычисления функций fmin imins izero spline quad ode23
минимизация функции одной переменной минимизация функции нескольких переменных нахождение нуля функции одной переменной интерполяция с помощью кубических сплайнов вектора данных численное интегрирование решение системы ОДУ методом Рунге—Кутты 2-го и 3-го порядков
320
Приложение 1
Статистические операции mean std СШПБШП cov inin, max
среднее вектора данных стандартное отклонение кумулятивная сумма ковариация векторов данных минимум и максимум
Операции загрузки/сохранения save load diary fname cd dir
запись переменных в файл загрузка переменных из файла запись протокола сеанса MATLAB'a в файл fname установка текущей директории вывод каталога текущей директории
Приложение 2 Символьные вычисления в MATLAB'e
В MATLAB версии 5 встроен интерфейс прямого вызова команд программной системы символьных вычислений MAPLE 1 *. Поскольку эта тема может оказаться полезной для читателя, но не является необходимой для нашей книги, в качестве иллюстрации мы воспользуемся примерами из этой книги. Дифференцирование и решение нелинейных уравнений — Глава 4 Чтобы найти д = •§£ для f = х + 2ty — t — 2t3, а затем решить относительно у уравнение д — 0, проделайте следующее: » mapleC f := х + 2*t*y - t - 2*t~3 ;' ) » mapleC g := d i f f ( f . t ) ') >> mapleC h := solve(g,y) ') Здесь можно не ставить точку с запятой, так как MATLAB сам поставит их в соответствии с синтаксисом Maple. В ответ вы получите f := x+2*t*y-t-2*t"3 g := 2*y-l-6*t~2 h := l/2+3*t"2 Решение дифференциальных уравнений — Глава 7 Чтобы решить ОДУ ^ | = | — х, выполните следующее: » mapleC a := diff (x(t) , t ) = x ( t ) / t - x(t) ') >> mapleC b := dsolve(a,x(t)) ') 1
' Программный пакет Maple для MATLAB'a разработан и распространяется компанией Waterloo Maple Software, Inc. Более подробно о ©Waterloo Maple можно узнать на сайте: http://www.maplesoft.on.ca/ . 21-4196
322
Приложение 2
Ответ будет таким (_С1 обозначает произвольную константу): а := d i f f ( x ( t ) , t ) = x ( t ) / t - x ( t ) b := x(t) - t*expC-t)*_Cl Интегрирование — Глава 11 Чтобы проверить, что Г выполните »
1
-A^d = 2 (у/с - г/о - у/с-уг) при с = 2,
maple( 'с := 2' )
>>
mapleC 'а :- int(1/sqrt(с-у), у=у_0..у_1) ')
Результатом будет а := -2*(2-у_1)~(1/2) + 2*(2-у_0)"(1/2) Решение систем линейных уравнений — Глава 16 Чтобы проверить, что решение системы 1 1 0 2 1 - 1 3 - 1 - 1 -1 2 3-
3 1 2 1
т
равно х = [—1 2 0 1] , выполните
\ х2
v
4 \ 1 -3
V4У
>> maple(' А := matrixC[[1,1,0,3],[2,1,-1,1], [3,-1,-1,2],[-1,2,3,-1]])') >> maple(' print(A) ') 3 ) } » maple(' х := х" ) » maple С Ъ := array(1..4, [4, 1,-3,4])') >> maple( J x := linsolve(A,b)' ) Обратите внимание, что первые две строки, определяющие Л, должны быть набраны в одну строку — у нас строка "разорвана" по чисто техническим причинам. Окончательный результат имеет вид х := VECTDR([-1, 2, 0, 1]) Чтобы получить дополнительную информацию о Maple, наберите >> mhelp У, можно mapleC'help') >> mhelp solve '/, Здесь информация о "solve"
Приложение 3 Список всех подготовленных М-файлов
Следующие М-файлы, которые мы подготовили для читателя, можно найти в интернете по адресам http://www.cup.cam.ac.uk/Scripts/webbook.asp?isbn=0521639204 или http://www.cup.cam.ac.uk/Scripts/webbook.asp7isbii~0521630789 Ниже мы распределили их по главам, где они впервые появляются. Некоторые из них, конечно, используются и в следующих главах. Чтобы найти точный номер страницы, на которой упоминается М-файл или команда MATLAB'a, посмотрите в алфавитном указателе разделы «М-файлы» и «команды MATLAB'a».
Часть 1: ВВЕДЕНИЕ Глава 1 нет
Глава 2 • leslie.m Глава 3 • fibno.m • hail.m • gcdiv.m • pow.m
21*
Глава 4 • • • • • • • • •
tsine.m tsine2.m polyex.m goatgr.m goatfn.m parnorm.m linenv.m cubics.m hypocyc.m
24
Приложение 3
Глава 5 • • • • •
tomato, m toms.m diabetic, m marks.m mannheim.m
Глава 6 • • • • •
сбехр.т exprand.m normrand.m randme.m unirand.m
Глава 7 • • • • • • • • • • •
fodesol.m fnxt.m odegr.m mode23.m species.m specfn.m ode23k.m vderpol.m vdplfn.m diffeqn.m dfeqfn.m
Часть 2: ИССЛЕДОВАНИЯ Глава 8 нет
Глава 9 • gcdran.m • primes.m • psp2.m • miller .m Глава 10 • hypocy.m • linenv.ra • paramc.m
Глава 11 • • • • •
zzl.m slide l.m slidelfn.m slide4.m slide4fn.m
Глава 12 • mobius.m • mobiusl.m • cobm.m • cobq.m • matit2.m • matit3.m • quadn.m • perdoub.m
Список всех подготовленных М-файлов
Глава 13 • cnrl.m • cnr2.m Глава 14 • • • •
randperm.m cycles.m riffle l.m riffle 1 a. m
• • • • •
remm.m riffle 1 c m rufflel.m rufflelc.m ruffle2.m
Глава 15 • fulLnew.m • gauss_ja.m • Lrate.m • cont4.m
Глава 16 • • • • • • •
Iin_solv.m chop.m Iu2.ra Iu3.m Iu4.m solv6.m spar_ex.ra
Глава 17 • • • • • •
intdemol.m intdemo2.m cont4.m cont7.m polyfit2.m polyval2.m
Глава 18 См. гл. 7
Часть 3: МОДЕЛИРОВАНИЕ Глава 19 • • • •
queue, m exprand.m normrand.m unirand.m
Глава 20 • fishy, m • lmfish.m • mparft.m • mparst4.m • resid4.m • fishdat.m
325
326
Приложение 3
Глава 21 • fludat.m • plagdat.m • colddat.ra • sirepi.m • sirfn.m • mparst3.m • resid3.m • lagsum.m Глава 22 • • • • • • • • •
topog.m snowsl.ra snowboat.m snbtfn.m fsnowO.m fsnowl.m fsnow2.m snowmn.m snowmx.m
Глава 23 • • • • • • • •
tides.m fourdat.m foursig.m locmax.m times.mat heights.mat noisyt.mat noisys.mat
Приложение 4 Как получить М-файлы с решениями
При составлении курсов на основе этой книги можно с помощью пароля найти в Интернете применяемые М-файлы и наброски некоторых простых решений. Руководители курсов должны связаться с издателем — CUP — по адресам: если книга в мягкой обложке, http://www.cup.cani.ac.uk/Scripts/webbook.asp?isbn=0521639204 или, если книга в твердой обложке, http://www.cup.cam.ac.uk/Scripts/webbook.asp7isbn~0521630789
Приложение 5 Избранные ресурсы MATLAB'a в Интернете
Название MATLAB означает: matrix laboratory — матричная лаборатория. Первоначально MATLAB создавался, чтобы обеспечить легкий доступ к пакетам LINPACK и EISPACK, представлявшим собой последнее достижение искусства программирования операций с матрицами. MATLAB преобразует пользовательские команды (включая М-файлы) в коды С или C++, а затем обеспечивает вызов других программных модулей (подпрограмм). Сегодняшние разработки MATLAB'a покрывают большие области приложений. Чтобы узнать о продуктах разработок, просмотрите web-страницу • http://www.mathworks.com/ Если вам этого недостаточно или вы хотите воспользоваться непосредственно пакетами LAPACK и EISPACK, посмотрите • http://www.netlib.org/Iapack/ Пользователям, желающим найти простое введение в MATLAB, будут полезны • http://www.ius.cs.cmu.edu/help/Math/vasc-help-matlab.html • http://www.unm.edu/cirt/info/software/apps/matlab.html Начинающим пользователям, предпочитающим краткие руководства по MATLAB'y с конкретными и простыми примерами, стоит посмотреть • http://www-math.cc.utexas.edu/math/Matlab/Matlab.html • http://www.liv.ac.uk/pollol/karen/document/486.dir/486.html • http://www.indiana.edu/~statmath/smdoc/Matlab.html • http://classes.cec.wustl.edu/~cslOO/lab5/
Избранные ресурсы MATLAB'a в Интернете
329
Продвинутый пользователь MATLAB'a может заглянуть на следующие страницы в поисках более всесторонних руководств: • http://wwwcache.rrz.uni-hamburg.de/RRZ/software/math/ Matlab/ • ftp://ftp.math.ufl.edu/pub/matlab/ В Интернете можно найти и более сложные примеры; например, посмотрите М-файлы на следующих страницах: • ftp://ftp.cc.tut.fi/pub/math/piche/numanal/ • ftp://ftp.mathworks.com/pub/mathworks/toolbox/matlab/ sparfun/ На следующих сайтах содержится техническая информация по МАТЪАВ'у и страницы FAQ (frequently asked questions - часто задаваемые вопросы): • • • • •
http://www.mathworks.com/digest/digest.htrnl http://www.mathworks.com/newsletter/nn.html http://www.math.ufl.edu/help/matlab-faq.htrnl http://ftp.mathworks.com/support/faq/faq.shtml http://www.uni-karlsruhe.de/~MATLAB/FAQ.html
Список литературы
1. Н. Abelson and A.diSessa, Turtle Geometry, Cambridge, Mass: MIT Press, 1981. 2. J. W. Bruce, P. J. Giblin and P.J.Rippon, Microcomputers and Mathematics, Cambridge: Cambridge University Press, 1990. 3. P. Doucet and P. B. Sloep, Mathematical Modelling in the Life Sciences, Chichester; Ellis Horwood, 1992. 4. I. S.Duff, A.M.Erisman and J.K.Reid, Direct Methods for Sparse Matrices, Oxford: Clarendon Press, 1986. 5. G.Fischer, Mathematical Models, Braunschweig: Friedrich Vieweg Sohn, 1986 (Commentary volume, p.53.) 6. M.Gardner, Mathematical Carnival, Washington DC: Mathematical Association of America, 1989. 7. P. J. Giblin, Primes and Programming, Cambridge: Cambridge University Press, 1993. 8. L. M. Hall, "Trochoids, roses, and thorns—beyond the spirograph', College Mathematics Journal 23 (1992), 20-35. 9. L. Haws and T. Riser, 'Exploring the brachistochrone problem', American Mathematical Monthly 102 (1995), 328-336. 10. F. C. Hoppensteadt, Mathematical Theories of Populations: Demographics, Genetics and Epidemics, Philadelphia: Society for Industrial and Applied Mathematics, 1975. 11. J. F. Humphreys and M.Y.Prest, Numbers, Groups and Codes, Cambridge: Cambridge University Press, 1989. 12. N. Koblitz, A Course in Number Theory and Cryptography, New York: Springer-Verlag, 1987. 13. J. C. Lagarias, 'The Зх + l problem and its generalizations', American Mathematical Monthly 92 (1985), 3-23. 14. H.-O.Peitgen and P. H- Richter, The Beauty of Fractals : Images of Complex Dynamical Systems, Berlin: Springer-Verlag, 1986. (Имеется русский перевод: ПайтгенХ.-О., РихтерП.Х. Красота фракталов. Образы комплексных динамических систем. — М.: Мир, 1993.)
Список литературы
331
15. Y. Saad, Iterative Solution for Sparse Linear Systems, Boston: PWS Int. Thompson Pub. (ITP), 1996. 16. A.C.Thompson, 'Odd magic powers', American Mathematical Monthly 101 (1994), 339-342. 17. В. М. Тихомиров, Рассказы о максимумах и минимумах. — М.: Наука, 1986. (Английский перевод: V- M.Tikhomirov, Stories About Maxima and Minima, Washington DC: Mathematical Association of America, 1990.)
Список дополнительной литературы по MATLAB'y на русском языке
1. ГультяевА. MATLAB 5.2. Имитационное моделирование в среде Windows.—СПб.: Коронспринт, 1999, 288 с. 2. ДьяконовВ. П., АбраменковаК. В. MATLAB 5. Система символьной математики. — М.: Нолидж, 1999, 633 с. 3. ДьяконовВ. П. MATLAB: учебный курс.— СПб.: Питер, 2001, 560 с. 4. ЛазаревЮ.Ф. MATLAB 5.x. К. Изд. группа BHV, 2000, 384 с. («Библиотека студента».) 5. Мартынов Н.Н., Иванов А. П. Matlab 5.x. Вычисления. Визуализация. Программирование.— М.: Кудиц-образ, 2000, 332 с. 6. Медведев В. С, Потёмкин В. Г. Control System Toolbox. MATLAB 5 для студентов. — М.: Диалог-МИФИ, 1997, 287 с. 7. ПотёмкинВ.Г. Введение в MATLAB.-M.: Диалог-МИФИ, 2000, 350 с. 8. ПотёмкинВ.Г. Система инженерных расчетов MATLAB 5.x. В 2-х томах. —М.: Диалог-МИФИ, 1999, 366 с. + 304 с. 9. ПотёмкинВ.Г. Система MATLAB. Справочное пособие. — М.: Диалог-МИФИ, 1997, 350 с. 10. РудаковП. И., Сафронов В.И. Обработка сигналов и изображений. MATLAB 5х. - М . : Диалог-МИФИ, 2000, 413 с. (Пакеты прикладных программ.)
Предметный указатель
М-файл-функдия (function M-file) 25 М-файлы (M-files) 21 - сбехр 96 - chop 238 - cnrl 188 - cnr2 189 - cobm 169 - cobq 179, 182 - colddat 297 - cont4 225, 260 - cont7 263, 264 - cubics 68 - cycles 196 - dfeqfn 113 - diffeqn 113 - exprand 96, 278 - Lrate 221, 228 - fftdemo 311 - fibno 45, 52 - fishdat 287 - fishy 287 - fludat 296 - fodesol 106, 287 - fouran 312 - fourdat 312 - fourier 311 - foursig 312 - fsnowO 304 - fsnowl 304 - fsnow2 304 - fulLnew 215, 223 - gaussja 216, 224 - gcdiv 49 - gcdran 124
- goatfn 64 - goatgr 64 - hail 46, 52 - hypocy 69 - hypocy 133 - intdemol 252 - intdemo2 258 - lagsum 297 - leslie 39, 287 - lin_solv 238 - linenv 66, 137 - lmfish 287, 291 - locmax 312 - Iu2 238 - Iu3 238 - Iu4 238, 248 - matit2 174, 176 - matit3 174 - miller 130 - mobius 166, 168, 174 - mobiusl 166, 174 - mparft 287, 290, 297 - mparst3 297 - mparst4 287, 290 - normrand 94, 278 - paramc 138 - parnorm 65 - perdoub 180 - plagdat 296 - polyex 63 - polyfit2 263 - polyval2 263 - pow 50, 53, 56 - primes 126, 128 - psp2 129
334
Предметный указатель
- quadn 179 - queue 284, 286 - randrae 101 - remm 206 - resid3 297 - resid4 288 - rifflel 205 - rifflela 205 - rifflelc 209 -rufflel 211 -rufflelc211 -ruffle2 211 - sirepi 297 - sirfn 297 - slidel 159 - slidelfn 159 - snowboat 304 - snowbtfn 304 - snowmn 304 - snowmx 304 - snowsl 304 - solv6 241 - spar_ex 244 - species 109 - tides 312 - topog 304 - tsine 61 - tsine2 61 - unirand 94, 278 - vderpol 111 - vdplfn 111 - zzl 149 Алгоритм Евклида (Euclid's algorithm) 47 анализ возмущений (perturbation analysis) 240 - данных (data analysis) 74 - Фурье (Fourier analysis) 314 арифметика (arithmetic) 15
- основные операции (arithmetic basic operations) 15 Б а з а данных (database) 77 биты, их вычисление (bits calculation of) 56 блокнот (notepad) 22 брахистохрона (brachistochrone) 156 быстрое тасование (ruffle) 209 Вектор - представление полинома (vector representing polynomial) 57 векторы (vectors) 18, 30, 44 - столбцы (vectors column) 19 - строки (vectors row) 19 вероятность (probability) 90, 124 взаимно простые числа (coprime) 124-126 вращение (rotation) 149 время между поступлениями (inter-arrival time) 277 - наступления события (arrival time) 96 - ожидания (waiting time) 277 - поступления (arrival time) 277 выступ (cusp) 70, 145, 155 Гипоциклоида (hypocycloid) 69, 73 глобальные переменные (global variable) 159 граф (graph) 244 - ребро (edge) 243 - связности (connectivities) 243 - узел (graph node) 243 график (plot) 20 - ЗО-линии (3D line) 261
Предметный указатель 335 -
линий уровня (contour) 260 поверхности (surface) 259 подграфик (subplot) 261 поля направлений (grain plot) 107 - сечений (plot sliced) 261 - установка атрибутов (graph annotation) 263 Дверь гаража (garage door) 139 двигатель Ванкеля (Wankel engine) 140 деление поэлементное (division element-by-element) 40 десятичные разряды значащие (digits significant) 237 дифференциальные уравнения (differential equations) 105 - автономные (autonomous) 108 - высшего порядка (higher order) ПО - обыкновенные (ordinary) 270 - первого порядка (first order) 107, 108 - система (coupled) 304, 308 - системы первого порядка (coupled first order) 296 Задача о козе (goat problem) 64, 69, 72 Интеграл (integral) 158 - несобственный (improper) 158 - Фурье (Fourier) 313 интервалы между наступлениями событий (inter-arrival time) 96 итерации (iterations) 214, 221 - ID (interpolation ID) 249 - 2D (interpolation 2D) 257
- линейная и кубическая (linear and cubic) 254 - сплайны (interpolation spline) 255 итерационное уточнение (iterative refinement) 239 Касательные параллельные (tangents parallel) 140 квадратичный функционал (quadratic functional) 89 квадратное уравнение (quadratic equation) 188 кинетическая энергия (kinetic energy) 157 команд повторение (commands repeating) 17 команды MATLAB'a - \ 223 - abs 36 - acos 31, 65 - angle 36 - axis 59, 68 - axis('equal') 60 - axis ('square') 60 - axis(axis) 61 - bar 46, 76, 287 - ceil 92 - clear 26 - comparison ( = = ) 47 - cond 240 - condest 240 - conj 36 - contour 304 - cumsum 75 - det 32 - diag 33 - diary 26 - eig 35, 287 - exp 29
336
Предметный указатель
- fft 311 -fix 92 - floor 48, 92 - flops 235 -fauns 161,304 - for 44, 45 - format 16, 31, 266 - fprintf 99 - fsolve 163, 232 - fzero 65, 301 - get 261 - gplot 244 - help 21, 24 - hist 76, 196 -hold 20, 21,58, 62, 265 -135 - if...else 46 - ifft 311 - iraag 36 - Inf 168 - input 293 - interpl 255 - interp2 264 - inv 32 - length 59 - load 28 - magic 118 - max 46, 75, 311 - mean 75, 311 - median 75 - mesh 259, 304 - meshdom 226 - meshgrid 226, 259 - min 75 - nnz 286 - norm 31, 257, 266 - ones 33 -pi 16 - plot 20, 58, 59, 76, 217 - plot3 261 - polyfit 63, 69, 80
- polyval 58, 63, 69, 81, 250 - prod 75 - quad8 158, 159 - rand 55, 90, 91, 94, 95, 101,241 - randn 94, 95, 103 - randperm 92, 195, 197 - real 36 - rem 46, 48, 50, 55, 206 - roots 69, 179, 180 - round 92 -rref 34, 119, 236 - rrefmovie 236 - save 27 - set 250, 261 - sin 16 - slice 261 - sort 75, 195, 203, 286 - sparse 243 - speye 243 - spline 311 - sprintf 244 - spy 242 - sqrt 30, 36, 266 - std 75 - sum 30, 75 - surf 259 - symrcm 242 - tic 235 - title 20 - toe 235 - type 23 - view 259, 263 - what 24 - while 45, 49, 246 - who 18 - whos 18 - xlabel 20 - ylabel 20 - арифметические операции (arithmetic operations) 318
Предметный указатель 33" - вывода графиков (graph operations) 319 - вычисления функций (function operations) 319 - матричные операции (matrix operations) 318 - матричные функции (matrix functions) 319 команды оболочки (shell) 28 - операции загрузки/сохранения (load and save operations) 320 - основные команды (basic operations) 317 - стандартные функции (common functions) 318 - статистические операции (statistics operations) 320 - точка с запятой (semicolons) 47 комплексные числа (complex numbers) 35, 187 - аргумент {argument 36 - действительная часть (real part) 36 - мнимая часть (imaginary part) 36 - модуль (modulus) 36 - расстояние (distance) 188 - сопряженное (conjugate) 36 конструкция педали (pedal construction) 141 кривая (curve) 57 - гипоциклоида (hypocycloid) 69, 73, 133 - график (plotting) 59 - квадратного корня (square root) 164 22-4196
- лепестки розы (rose) 133 - нормаль (normal) 65 - парабола (parabola) 65, 158 - параметрическая (parametric) 60 - постоянной ширины (constant width) 140 - синус (sine) 61, 64 - спирограф (spirograph) 69, 153 - циклоида (cycloid) 156 - эллипс (ellipse) 154 - эпициклоида (epicycloid) 135, 154 кубическое уравнение (cubic equation) 68, 191 - двойной корень (double root) 68 Лестница (ladder) 138 ломаная (zigzag) 147 ломаная (line broken) 160 Магический квадрат (magic square) 118 - пандиагональный (pandiagonal) 120, 123 - произведение (product of) 121 масштабирование для двух кривых (scale with two curves) 61 - изменение командой axis (scale change by axis command) 60 - фиксация (scale freezing) 61 матрица (matrix) 31 - Лесли (Leslie) 37, 288, 291 - верхняя треугольная форма (reduced echelon form) 119 - вращение (rotation) 149
338
Предметный указатель
- диагональная (diagonal) 33 - единичная (identity) 32 - магический квадрат (matrix magic square) 118 - невырожденная (nonsingular) 35 - обратная (inverse) 32 - определитель (determinant) 32 - перестановок (permutation) 122 - разреженная (sparse) 242, 243 - расширенная (augmented) 33 - треугольная форма (echelon form) 34 - умножение (multiplication) 32 метод Гаусса—Якоби (Gauss—Jacobi) 216 - Ньютона—Рафсона (Newton—Raphson method) 186, 215, 222 - расходящийся (divergent) 191 - комплексный (complex) 187 - исключения Гаусса (Gauss elimination method) 236 - метод наименьших квадратов (least squares method) 252 - ID (least squares method ID) 252 - 2D (least squares method 2D) 263 методы Фурье (Fourier methods) 313 минимизация (minimisation) 87 минимум (minimum) 87 - функции (function) 161 многоугольник правильный (polygon regular) 150 множество данных (data set) 74 - Мандельброта (Mandelbrot set) 192
Наибольший общий делитель (greatest common divisor) 47, 124, 131 - трех чисел (three numbers) 54, 126 наименьшее общее кратное (least common multiple) 151, 197 нелинейные системы (nonlinear systems) 221 - уравнения (equations) 214 неподвижная точка (fixed point) 177 неравенство Коши- Шварца (Cauchy—Schwarz inequality) 87 - доказательство (proof) 87 нормаль к кривой (normal to a curve) 65 нулевой вектор (zero vector) 262 Область притяжения (basin of attraction) 188, 189, 191 - сходимости (convergence region) 218 обозначения через непересекающиеся циклы (disjoint cycle notation) 195 огибающая (envelope) 65, 71, 135, 137, 139, 141 операции с плавающей точкой (флопы) (floating point operations (flops)) 234 определитель (determinant) 32 остаток (remainder) 46 - для больших чисел (when numbers are large) 50, 53 остаточная коррекция (residual correction) 239
Предметный указатель 339 отверстие, квадратное (hole, square) 140 очередь (queue) 275 ошибки, неопределенная переменная (errors undefined variable) 17 Парабола (parabola) 158 паутинообразная диаграмма (cobweb diagram) 169, 175, 180, 182 перестановка (permutation) 92, 122, 195, 200 - мест (position) 201, 203 - непересекающиеся циклы (disjoint cycles) 195, 209 - порядок (order of) 205 - транспозиция (transposition) 195 - циклическая (cyclic) 208 - число циклов (number of cycles) 198 перестановочная матрица (permutation matrix) 243 перпендикулярные биссекторы (perpendicular bisector) 137 печать (print) 28 полином (polynomial) 57, 250 - n переменных (in n dimensions) 257 - корни (roots) 57, 68 - Тейлора (Taylor) 61 популяция (population) 176 порядок (order) 205 - сходимости (convergence) 217, 228 последовательность Мёбиуса (sequence Mobius) 166, 169, 174, 185
22'
- Ньютона—Рафсона (Newton—Raphson) 187 - квадратичная (quadratic) 169, 178, 182, 185 - область притяжения (basin of attraction) 188, 189, 191 - периодическая (periodic) 167, 175, 182 - притягивающий цикл (attracting cycle) 178,183 - сверхпритягивающий цикл (superattracting cycle) 182 - сильно расходящаяся (wildly divergent) 167 - сходящаяся (convergent) 174, 180,182 - удвоение периода (period doubling) 180 - хаотичная (wildly divergent) 182 - экспоненциальная (exponential) 183 построение графиков (plotting) 20 потенциальная энергия (potential energy) 157 приближение (approximation) 249 - ошибка (error) 256 - по методу наименьших квадратов (least squares fitting) 78, 290, 301 - доказательство (least squares method proof of) 88 - нелинейное (least squares fitting nonlinear) 82 - обоснование (least squares fitting formulae derivations) 87
340
Предметный указатель
- полиномами (polynomial function fitting) 80 приливы (tides) 311, 312 производная частная (derivative partial) 308,
309 простое число (prime) 126, 128 процесс Пуассона (Poisson process) 103 псевдопростое число (pseudoprime) 52, 128 Разностные уравнения второго порядка (difference equations second order) 113 - первого порядка (first order) 111 разреженная матрица (sparse matrix) 242 - граф (graph) 244 распечатка (printing) 28 распределение нормальное (distribution normal) 94 - равномерное (uniform) 91, 277 - случайное (random) 277 - экспоненциальное (exponential) 95, 277 редактирование файлов (edit a file) 22 рыба (fish) 288 - лов (catching) 292 - рост (growth) 288 ряд Тейлора (Taylor polynomial) 222 Сила тяжести (gravity) 157 скользящая бусинка (sliding bead) 157 скрипт-файл (script) 21, 23 след (trace) 123
случайные пары (random pairs) 124 - переменные (variable) 102 - распределения (distributions) 96 - тройки (triples) 126 - целые (integers) 92 - числа (numbers) 90 собственное значение (eigenvalue) 35, 121, 173, 176, 243 собственный вектор (eigenvector) 35, 121, 173, 176 совпадение (congruence) 131 создание запросов (querying) 77 сопротивление (resistance) 306 сортировка (sorting) 76 сохранение файлов (saving work) 26 спирограф (spirograph) 69, 153 среднеквадратичная ошибка (root mean square error) 256, 265 статистика (statistics) 75 степени матрицы (matrix powers) 171 степенной алгоритм (power algorithm) 50, 53, 55, 129 сумма Фурье (Fourier sum) 313 Таблица событий (event table) 280 тасование (shuffle) 201 - быстрое (ruffle) 209 - внахлест (riffle) 201 - внутрь (in) 203, 207, 208, 213 - колоды с нечетным числом карт (for odd pack) 207 - поверх (out) 205, 207, 209, 213
Предметный указатель 341 - порядок (order of) 205 - снятие сверху (shuffle cut) 202, 207, 213 теорема Ферма (Ferraat's theorem) 50, 128 тест Миллера (Miller's test) 51, 130 транспозиция (transposition) 195 транспонирование (transpose) 19 трение (friction) 165, 306 треугольная форма (echelon form) 119, 236 Удвоение периода (period doubling) 180 умножение поэлементное (multiplication elementby-element) 19, 30 - скалярное произведение (scalar product) 30 уравнения движения (equations of motion) 306 Фазовая плоскость (phase plane) 108 - неподвижная точка (fixed point) 109 - орбита (orbit) 109 - предельный цикл (limit cycle) 111 - седловая точка {saddle point) 109
файлов редактирование (files edit) 22 - сохранение (save) 22 фрактальное множество (fractal set) 193 функции многих переменных (multiple variables) 82 - распределения (distribution function) 102 функционал (functional) 89 Циклоида (cycloid) 156, 162 цифры, применение степенного алгоритма (digits using power algorithm) 53 Частичный выбор ведущего элемента (partial pivoting) 236 числа Фибоначчи (Fibonacci numbers) 44, 52 число Кармайкла (Carmichael number) 52 Ширина (width) 140 Эпидемии (epidemics) 296 - SIR-модель (epidemics SIR model) 297 эпициклоида (epicycloid) 154 Ящики, отпирание (boxes, unlocking) 200
Оглавление
От переводчиков Предисловие I. Основы ' Глава 1. Введение 1.1. Первые шаги в MATLAB'e 1.2. Векторы и графики 1.3. Создание и редактирование скрипт-файлов 1.4. Получение распечаток Упражнения Глава 2. Матрицы и комплексные числа 2.1. Векторы и матрицы 2.2. Комплексные числа 2.3. Динамика населения: матрица Лесли Упражнения Глава 3. Целые числа 3.1. Цикл вычисления чисел Фибоначчи 3.2. Условный цикл: Зп + 1 или задача о граде 3.3. Евклидов алгоритм нахождения наибольшего общего делителя 3.4. Теорема Ферма и степенной алгоритм Упражнения 3.5. Приложение Глава 4. Графики и кривые 4.1. Полиномы 4.2. Простые примеры вычерчивания кривых 4.3. Полиномы Тейлора 4.4. Приближения с помощью функции polyfit 4.5. Задача о козе 4.6. Огибающие семейства линий Упражнения 4.7. Приложение Глава 5. Представление данных 5.1. Анализ данных
5 9 13 15 15 18 21 28 28 30 30 35 37 40 44 44 46 47 49 52 55 57 57 58 61 62 64 65 68 72 74 74
Оглавление
343
5.2. Приближение по методу наименьших квадратов... Упражнения 5.3. Приложение Глава 6. Вероятность и случайные числа 6.1. Генерирование случайных чисел 6.2. Случайные целые числа 6.3. Моделирование равномерных распределений 6.4. Моделирование нормальных распределений 6.5. Моделирование экспоненциальных распределений. Упражнения 6.6. Приложение Глава 7. Дифференциальные и разностные уравнения 7.1. Обыкновенные дифференциальные уравнения (ОДУ) 7.2. Системы дифференциальных уравнений 7.3. Разностные уравнения Упражнения
78 85 87 90 90 92 94 94 95 98 100 105 105 108 111 113
И. Исследования
115
Глава 8. Магические квадраты 8.1. Введение 8.2. Магические квадраты размера 3 х 3 8.3. Магические квадраты размера 4 х 4 8.4. Магические квадраты размера 5 x 5 (факультативно) Глава 9. НОД, псевдопростые числа и тест Миллера A. НОД случайных пар и троек чисел B. Псевдопростые числа и тест Миллера Глава 10. Графики: кривые и огибающие A. Лепестки розы и эпициклоиды B. Огибающие C. Кривые постоянной ширины Глава 11. Ломаные и кривые наискорейшего спуска A. Спирографы и ломаные B. Кривые наискорейшего спуска Глава 12. Последовательности вещественных чисел 12.1. Последовательности Мёбиуса 12.2. Паутинообразные диаграммы 12.3. Функции Мёбиуса и степени матриц А. Исследование последовательностей Мёбиуса
117 118 118 121 123 124 124 128 133 133 136 139 147 147 156 166 166 168 171 174
344
Оглавление
B. Притягивающие циклы C. Квадратичные и экспоненциальные последовательности ; неподвижные точки Глава 13. Итерации Ньютона-Рафсона и фракталы 13.1. Введение 13.2. Уравнение z2 + 1 = 0 13.3. Общие квадратные уравнения 13.4. Кубическое уравнение z3 — z = 0 Глава 14. Перестановки A. Разложение на циклы B. Тасование карт 14.1. Введение 14.2. Тасования внутрь и поверх 14.3. Циклы 14.4. Грубые тасования внахлест (быстрые тасования) .. 14.5. Приложение Глава 15. Итерационные методы решения нелинейных уравнений 15.1. I D : Метод 1 — метод Ньютона—Рафсона 15.2. I D : Метод 2 — метод Гаусса—Якоби 15.3. I D : Анализ сходимости 15.4. 2D: Итерации для нелинейных систем 15.5. 2D: Графики линий уровня и отображение сходимости Упражнения Глава 16. Матрицы и решение линейных систем 16.1. Подсчет числа операций 16.2. Плотные линейные системы 16.3. Алгоритм итерационного уточнения 16.4. Анализ возмущений системы Ах — Ъ 16.5. Разреженные матрицы, упорядочение графа и перестановки Упражнения Глава 17. Интерполяция и приближение функций 17.1. I D : Введение 17.2. ID-пример: М-файл intdemol.m 17.3. ID-подгонка данных 17.4. Насколько точно мое приближение? 17.5. Введение в многомерные приближения 17.6. 2D М-файл intdemo2.m
177 181 186 186 187 188 191 194 194 200 201 203 209 209 212 214 215 216 217 221 225 229 233 234 235 239 240 242 245 249 250 252 252 256 257 258
Оглавление
345
17.7. Графики линий уровня, ЗО-графики и графики сечений 258 17.8. Глобальный '\'-метод 263 17.9. Кусочный метод 264 17.10. Сравнение приближений 264 Упражнения 266 Глава 18. Обыкновенные дифференциальные уравнения 270 18.1. Стратегия 270 Упражнения 271 III. Моделирование Глава 19. Кассовые очереди: длинные и короткие 19.1. Имитация очередей 19.2. Придорожная заправочная станция 19.3. Кафетерий Упражнения Глава 20. Рыбное хозяйство 20.1. Предварительный взгляд на проблему 20.2. Модели роста рыбы 20.3. Построение матрицы Лесли 20.4. Стратегия рыбной ловли Упражнения Глава 21. Эпидемии 21.1. Предварительные замечания о некоторых данных. 21.2. SIR-модель динамики эпидемии 21.3. Аналитическое исследование поведения 21.4. Анализ данных Упражнения Глава 22. Динамика сноуботивта 22.1. Предварительные замечания о задаче 22.2. Уравнения движения 22.3. Исследование рабочих параметров Упражнения Глава 23. Приливы 23.1. Предварительные замечания о данных по приливам 23.2. Ряды и методы Фурье 23.3. Анализ электрического сигнала 23.4. Фурье-анализ данных о приливе Упражнения
273 275 276 280 283 284 287 288 288 291 293 294 296 297 298 299 301 302 304 305 306 308 309 311 312 312 314 315 315
346
Оглавление
Приложение 1. Краткий перечень команд MATLAB'a Основные команды Встроенные значения Арифметические и матричные операции Стандартные математические функции Матричные функции Команды вывода графиков Команды вычисления функций Статистические операции Операции загрузки/сохранения Приложение 2. Символьные вычисления в MATLAB'e Дифференцирование и решение нелинейных уравнений — Глава 4 Решение дифференциальных уравнений — Глава 7 Интегрирование — Глава 11 Решение систем линейных уравнений — Глава 16 Приложение 3. Список всех подготовленных М-файлов Часть 1: ВВЕДЕНИЕ Часть 2: ИССЛЕДОВАНИЯ Часть 3: МОДЕЛИРОВАНИЕ Приложение 4. Как получить М-файлы с решениями Приложение 5. Избранные ресурсы MATLAB'a в Интернете. Список литературы Список дополнительной литературы по MATLAB'y на русском языке Предметный указатель
317 317 317 318 318 318 319 319 319 320 321 321 321 322 322 323 323 324 325 327 328 330 332 333
Учебное издание
Ке Чен, Питер Джиблин, Алан Ирвинг MATLAB в математических исследованиях Зав. редакцией академик В. И. Арнольд Зам. зав. редакцией А. С. Попов Ведущий редактор Ю. И. Кузнецов Художник П. Инфантэ Художественный редактор Н. В. Зотова Технический редактор О. Г. Лапко Корректор Н. В. Беляева Оригинал-макет подготовлен В. Н. Цлаф в пакете 1£Т£Х 2е с использованием кириллических шрифтов семейства LH Лицензия ЛР № 010174 от 20.05.97 г. Подписано к печати 12.04.2001 г. Формат 60 х 90/16. Гарнитура Computer Modern. Печать офсетная. Объем 11,00 бум. л. Усл.-печ. л. 22,00. Уч.-изд. л. 19,23. Изд. № 1/9722. Тираж 5 000 экз. Заказ 4196. Издательство «Мир» Министерства РФ по делам печати, телерадиовещания и средств массовых коммуникаций 107996, Москва, 1-й Рижский пер., 2. Диапозитивы изготовлены в издательстве «Мир» Отпечатано в полном соответствии с качеством предоставленных диапозитивов в ОАО «Можайский полиграфический комбинат». 143200, г. Можайск, ул. Мира, 93.
ЛУЧШИЕ КНИГИ МИРА— В ИЗДАТЕЛЬСТВЕ « М И Р » Готовится к печати: о
ТЗ
3
о.
о 1 / 1 ЧО
3
2 -У
«
p
a
& о «
Шиллинг Р., Харрыс С. ПРИКЛАДНЫЕ ЧИСЛЕННЫЕ МЕТОДЫ ДЛЯ ИНЖЕНЕРОВ С ИСПОЛЬЗОВАНИЕМ MATLAB'A И ЯЗЫКА С: Пер. с англ. — 55 л., ил. Книга американских специалистов представляет собой учебный курс по численным методам для подготовки инженеров. Особенность книги — компьютерная реализация материала с применением системы MATLAB и языка С. Даны многочисленные примеры решения прикладных задач из механики, электротехники, химии, биологии, управления и регулирования систем. Включены тексты программ и результаты вычислений. Широкий охват материала позволяет использовать книгу как справочник и как руководство по численным методам. Ясный и простой стиль изложения позволяет использовать книгу в качестве учебного пособия, Основное содержание книги: • Численные вычисления • Системы линейных алгебраических уравнений • Собственные значения и собственные векторы • Приближение функций и интерполирование • Решение нелинейных алгебраических уравнений • Оптимизация • Численное дифференцирование и интегрирование • Обыкновенные дифференциальные уравнения • Уравнения с частными производными • Цифровая обработка сигналов • Приложения: Библиотека численных методов MATLAB'a Библиотека численных методов языка С Векторы и матрицы Ответы и решения некоторых задач Для студентов университетов и технических вузов, преподавателей и аспирантов, а также для всех специалистов, применяющих численные методы на персональных компьютерах.
ЛУЧШИЕ КНИГИ М И Р А В ИЗДАТЕЛЬСТВЕ « М И Р » Новинка 2001 г.: Тан К. Ш., Стиб В.-Х., Харды И. СИМВОЛЬНЫЙ C++: Введение в компьютерную алгебру с использованием объектно-ориентированного программирования: Пер. со 2-го англ. изд.—624 с, ил. В книге представлен подход к разработке новой системы компьютерной алгебры, основанной на объектно-ориентированном программировании. В первых вводных главах излагаются требования пользователя к таким системам, описан необходимый математический аппарат, лежащий в основе разработки системы, дан обзор наиболее популярных из существующих систем (REDUCE, MAPLE, AXIOM, МАТЕМАТ1СА, MuPAD). Далее обсуждаются основные понятия объектно-ориентированного программирования, языки Java, Eiffel, Smalltalk и Оберон, излагаются средства языка C++, вводится новая система компьютерной алгебры SymbolicC++. Приводятся примеры применения системы к задачам из математики и физики (нумерация Геделя, аппроксимация Паде, техника рядов Ли, метод Пикара, фрактальное множество Мандельброта и др.). В книгу включены листинги всех компонентов системы, что позволяет пользователям развивать и наращивать систему в соответствии со своими потребностями. Основное содержание книги: • Математические основы компьютерной алгебры • Системы компьютерной алгебры • Объектно-ориентированной программирование • Основные средства языка C++ • Классы компьютерной алгебры • Символьный класс • Приложения • Язык Лисп и компьютерная алгебра • Листинги программ • Параллельная виртуальная машина и абстрактные типы данных • Техника обработки ошибок • Программа Gnuplot и язык PostScript Для студентов и аспирантов вузов в качестве учебного пособия, для специалистов по компьютерной алгебре как справочное пособие, а также для непрофессионалов, желающих расширить свои познания в возможностях вычислительной техники.
о -q -D a
£
о in r-J (-1 00 С4
'К ос
с 12
ЛУЧШИЕ КНИГИ МИРА— В ИЗДАТЕЛЬСТВЕ « М И Р » Имеется в продаже: , ЛиттлДж., О'ШиД. ИДЕАЛЫ, Л)
а
о
« ГП 3
-°? g
ш в1
5 оо
s l i
У|У lei
МНОГООБРАЗИЯ И АЛГОРИТМЫ. Введение в вычислительные аспекты алгебраической геометрии и коммутативной
алгебры: Пер. с англ. — 687 с, ил.
Монография известных американских математиков посвящена изложению конкретных результатов применения вычислительных методов к современной алгебре. Обсуждение алгоритмов основывается на обобщении алгоритма деления для полиномов одной переменной, найденном лишь в шестидесятых годах. Эти алгоритмы в соединении с мощью высокопроизводительных компьютеров привели к некоторым интересным приложениям — например, в роботике и в доказательстве геометрических теорем. Основное содержание книги: • Геометрия, алгебра и алгоритмы • Базисы Гребнера • Теория исключения • Алгебро-геометрический «словарь» • Полиномиальные и рациональные функции на многообразии • Роботика и автоматическое доказательство геометрических теорем • Теория инвариантов конечных групп • Проективная алгебраическая геометрия • Размерность многообразия Для математиков-теоретиков, специалистов по компьютерной технике и инженеров, а также для студентов соответствующих специальностей.
ЛУЧШИЕ КНИГИ М И Р А В ИЗДАТЕЛЬСТВЕ « М И Р » Новинка 2001 г.: Чуй К. ВВЕДЕНИЕ В ВЭЙВЛЕТЫ: Пер. с англ. — 288 с, ил.
о
Вводный курс в новое активно развивающееся направление современной математики. Особое внимание в книге уделено сплаин-вэйвлетам и частотно-временной обработке сигналов. Из предисловия к русскому изданию «По теории вэивлетов и по их приложениям на русском языке нет ни одной книги, поэтому русское издание этой основополагающей книги весьма целесообразно... За последние годы вэйвлеты нашли широкое применение во многих областях прикладной математики: эффективная обработка передачи информации, решения дифференциальных уравнений специального вида, фрактальный анализ...» Среди затронутых в книге вопросов — • частотно-временная локализация • интегральные вэйвлет-преобразования • двойственные вэйвлеты • фреймы • сплайн-вэйвлеты • ортонормальные вэйвлет-базисы и вэйштет-пакеты. Представлены неортогональные, полуортогональные и ортогональные вэйвлеты. Для чтения необходимо только знакомство с основами теории функций и математического анализа. Книга может служить учебным пособием для студентов начальных курсов, а также для математиков и инженеров, желающих освоить этот предмет. Кроме того, эту книгу можно использовать и как справочное пособие.
о in
•
г.
И
С i .ы
-°? S ^чо Я га гч И
1
l a g
Вы не работаете с системой MATLAB, но хотите научиться работе с ней? Вы используете MATLAB в своей профессиональной деятельности? Вы разрабатываете приложения для решения прикладных задач? Вы - автор пособий по MATLAB?
КОНСУЛЬТАЦИОННЫЙ
ЦЕНТР MATLAB КОМПАНИИ СОФТЛАЙН The
MATH WORKS Inc.
Направления деятельности Консультационного Центра MATLAB О Чтение курсов лекций по работе в среде системы MATLAB. © Подготовка тематических курсов лекций по работе с приложениями MATLAB на заказ. О Проведение ознакомительных семинаров. © Разработка приложений MATLAB на заказ. © Подготовка электронных и печатных материалов по продуктам семейства MATLAB. © Разработка и поддержка сайта www.matlab.ru, интерактивная работа в среде системы MATLAB.
Консультационный Центр MATLAB приглашает к сотрудничеству специалистов! www.matlab.ru •
[email protected] w w w . s o f t l i n e . r u • тел.: (095) 232-0023