Коэффициент PB (что это) — примеры и что он показывает

Лучший брокер бинарных опционов за 2020 год:
  • БИНАРИУМ
    БИНАРИУМ

    Лидер среди всех брокеров бинарных опционов! Бесплатное обучение и демо-счет! Идеально для начинающих и средне-опытных трейдеров.
    Получите свой бонус за регистрацию:

Энциклопедия маркетинга

Каталог консалтинговых компаний

Библиотека маркетолога

Кое-что о Байесе, статистике и подходах

Дуглас У. Хаббард Глава из книги «Как измерить все, что угодно. Оценка стоимости нематериального в бизнесе»
Издательство «Олимп-Бизнес»

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

Предположим, что вы отбираете несколько торговых представителей для опроса на тему, существует ли связь между произошедшим недавно ростом продаж и проведенной ранее рекламной кампанией. Вы хотите оценить «вклад рекламной кампании в объем продаж». Для этого можно просто опросить весь торговый персонал. Но ведь изначально вы знаете больше, чем то, что расскажут вам эти люди. Вам и до опроса было кое-что известно о прошлой динамике продаж и об эффекте, который давали рекламные компании. Вы имеете сведения о сезонных колебаниях объема сбыта, влиянии экономического цикла и роли мер по повышению доверия потребителей. Имеет ли это какое-либо значение? Интуитивно мы понимаем, что предварительные данные также должны учитываться. Но пока студенты не доберутся до последних разделов своего учебника, им так и не расскажут, что нужно делать с этим знанием.

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

1. Вся традиционная статистика исходит из того, что наблюдатель ранее не располагал никакой информацией об объекте наблюдения.

2. В реальном мире данное допущение почти никогда не выполняется.

Проблему прежних знаний изучает так называемая байесовская статистика. Автор этого метода — Томас Байес, британский математик и пресвитерианский священник XVIII века, самые известные работы по статистике которого были опубликованы только после его смерти. Байесовская статистика занимается вопросом: как мы корректируем свое предварительное знание с учетом новой информации? Байесовский анализ начинается с того, что известно сейчас, и затем рассматривает, как это знание изменится с получением новых сведений. А небайесовская статистика, преподаваемая в большинстве курсов по методам выборочного наблюдения, исходит из следующего: все, что известно о некоей группе объектов, — это выборка, которую вы только что из нее сделали.

Фактически, именно байесовский анализ лежит в основе большинства иллюстраций, приведенных мною в главе 9, в том числе таблицы для определения 90-процентного CI без математических расчетов. Например, составляя рисунок 9.2, изображающий 90-процентный CI для доли в генеральной совокупности при малой выборке, я сначала предположил, что, если нет иных данных, внутри подгруппы значения этого CI распределены от 0 до 100% равномерно. Рассчитывая вероятность нахождения медианы по ту или иную сторону порогового значения, я начинал с исходного соображения: существует вероятность 50%, что истинная медиана генеральной совокупности лежит по одну из сторон от порога. И в том, и в другом случаях я исходил из максимальной неопределенности.

Теорема Байеса гласит, что вероятность наступления «события» при условии проведения «наблюдения» равна произведению вероятности наступления события и вероятности проведения наблюдения при условии наступления события, деленному на безусловную вероятность проведения наблюдения (см. рис. 1).

Предположим, решается вопрос о выпуске нового продукта. Согласно данным за прошедшие периоды, новые продукты приносили прибыль в первый год только в 30% случаев. Математик записал бы это утверждение следующим образом: P(FYP 1 ) = 30%, то есть вероятность получения прибыли в первый год выпуска продукта составляет 30%. Нередко до старта массового производства осуществляется тестирование сбыта. Для всех случаев, когда новый продукт дал прибыль уже в первый год реализации, пробные продажи были удачными (под удачными продажами мы подразумеваем достижение определенного порогового объема реализации) только на 80%. Математик записал бы это следующим образом: P(S|FYP) = 80%, то есть «условная» вероятность успеха тестирования сбыта (S, successful — успешный) при условии, что производство продукта оказалось прибыльным уже в первый год (черта «|» означает «при условии»), равна 80%.

Рис. 1. Теорема Байеса

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

  • P(FYP|S) — вероятность получения прибыли в первый же год при условии удачного тестирования сбыта, иными словами, вероятность наступления события FYP при условии S;
  • P(FYP) — «безусловная» вероятность получения прибыли в первый же год;
  • P(S) — «безусловная» вероятность удачного тестирования сбыта;
  • P(S|FYP) — вероятность удачного тестирования сбыта при условии получения прибыли в первый же год.

Допустим, что пробные продажи были удачны в 40% случаев. Чтобы рассчитать вероятность получения прибыли от продукта в первый же год при условии удачного тестирования сбыта, перепишем приведенное выше уравнение следующим образом:

P(FYP|S) = P(FYP) х P(S|FYP)/ P(S) = 30% x 80%/40% = 60%.

Если пробный рынок показал успех, то вероятность получения прибыли в первый же год составляет 60%. Заменив два числа в уравнении, мы можем рассчитать и вероятность получения прибыли в первый же год в случае неудачных пробных продаж. Как было показано, вероятность успеха тестирования реализации прибыльного продукта 80%. Поэтому вероятность провала пробных продаж равна 20%. Это можно записать следующим образом: P(

S|FYP) = 20%. Аналогично, если вероятность удачных пробных продаж всех продуктов 40%, то общая вероятность неудачи, или P(

S), равна 60%. Заменив в нашем уравнении P(S|FYP) и P(S) на P(

S) = 30% х 20%/60% = 10%.

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

Иногда, не зная вероятности получения некоего результата, мы можем оценить вероятности других событий и затем рассчитать на их основе нужный показатель. Предположим, что данных о коэффициенте успеха тестирования рынка в прошедшие периоды у нас нет, так как это первые пробные продажи. Мы можем рассчитать данную величину на основе других. Калиброванный эксперт уже оценил P(S|FYP) — вероятность успешных пробных продаж продукта, который принесет прибыль в первый же год: P(S|FYP) = 80%. Допустим теперь, что эксперт оценил и вероятность удачных пробных продаж продукта, выпуск которого окажется в итоге убыточным (классическим примером может служить «New Coke»): P(S|

FYP) = 23%. Как и ранее, мы знаем, что вероятность прибыли от продукта в первый же год P(FYP) составляет 30%, значит, вероятность того, что это не случится, P(

FYP) будет равна 70% — [1 — P(FYP)]. Если мы суммируем произведения каждой условной вероятности на вероятность выполнения данного условия, то получим общую вероятность наступления данного события. Тогда:

P(S) = P(S|FYP) х P(FYP) + P(S|

FYP) = = 80% х 30% + 23% х 70% = 40%.

Этот этап может оказаться очень полезным, потому что в некоторых случаях расчет вероятности получения определенных результатов при определенных условиях прост и очевиден. Помогают такие вопросы, как: «Если к данной группе действительно относятся только 10% всех объектов генеральной совокупности, то какова вероятность того, что из 12 случайно выбранных человек пятеро будут принадлежать к этой группе?» или: «Если медиана затрат времени на анализ жалоб потребителей составляет более часа, то какова вероятность того, что временные затраты 10 из 20 случайно выбранных человек окажутся менее часа?»

В каждом из этих примеров мы можем рассчитать вероятность наступления события А при условии наступления события В, если знаем эти вероятности и вероятность наступления события В при условии наступления события А. Данный математический прием называется байесовской инверсией, и те, кто начинает использовать его в одной области, быстро обнаруживают применимость инверсии и во многих других сферах. Особенно полезной байесовскую инверсию находят те, кто рассматривает проблемы измерения так же, как в свое время это делали Эмили, Энрико и Эратосфен. Более специальные вопросы, связанные с инверсией, мы рассмотрим позднее, а пока попытаемся объяснить ее на интуитивном уровне. Ведь, возможно, и вы, сами того не осознавая, уже применяли этот прием. Вполне вероятно, что вы обладаете врожденным байесовским инстинктом.

Используйте свой природный байесовский инстинкт

Проблему иного качественного знания о выборочной совокупности, которым вы обладаете, не решают даже некоторые передовые методы статистики. В описанном ранее примере с рекламной кампанией вы могли бы проработать с людьми отдела сбыта весьма продолжительное время и узнать (и это знание было бы качественным), что Боб обычно оценивает ситуацию слишком оптимистично, Мануэль всегда все взвешивает, а Моника любит осторожничать. И, конечно, вы по-разному отнеслись бы к мнениям того сотрудника, которого знаете очень хорошо, и новичка. Как статистика учитывает эти знания? Если отвечать односложно, то она их вообще не учитывает, во всяком случае, тот ее вводный курс, который изучают тысячи людей.

К счастью, существует способ справиться с этой проблемой, причем намного более простой, чем любой раздел статистики за первый семестр. Назовем его инстинктивным байесовским подходом, суть которого заключается в следующем:

1) сначала нужно дать объекту (явлению) свою калиброванную оценку;

2) затем необходимо собрать дополнительную информацию (провести опрос, изучить работы других исследователей и т.д.);

3) далее нужно чисто субъективно скорректировать свою калиброванную оценку без дополнительных расчетов.

Я называю это инстинктивным байесовским подходом, так как есть основания считать, что когда люди получают новую информацию и уточняют свои прежние знания, они делают это способом, который можно охарактеризовать как байесовский. В 1995 г. психологи-бихевиористы Калифорнийского технологического института Махмуд А. Эль-Гамаль и Дэвид М. Гретер изучали, как люди учитывают первоначальные знания и новые сведения, оценивая вероятность каких-либо событий. Они попросили группу из 257 студентов угадать, из какого из двух лотерейных барабанов были извлечены шарики. В каждом барабане находились шарики, помеченные буквами «N» и «G». В одном барабане их было поровну, а в другом шариков с буквой «N» было больше. Шарики вынимались шесть раз, и студентам объявляли, сколько всего шариков каждого вида было вынуто.

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

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

В нескольких построенных мною моделях использовались определенные калиброванными оценщиками условные вероятности самых разных событий. В 2006 г. я задал калиброванным экспертам из одной государственной структуры следующие пять вопросов.

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

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

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

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

E. Если ваш бюджет через четыре года увеличится, то какова вероятность того, что это произойдет в период президентства демократа?

Отвечая на эти вопросы, инстинктивный байесианец руководствовался бы теоремой Байеса. Если бы первые три вероятности (A, B и C) он оценил как 55, 60 и 40%, то, чтобы быть последовательным, четвертую и пятую вероятности (D и E) он должен был бы определить, соответственно, в 51 и 64,7%. Ответ на четвертый вопрос следовало бы записать так: A х B + (1 — A) х C, строго говоря, не из-за теоремы Байеса, а из-за необходимости правильно сложить условные вероятности. Иными словами, вероятность наступления некоего события равна вероятности выполнения некоего условия, умноженной на вероятность наступления данного события в случае выполнения этого условия, плюс вероятность того, что это условие не будет выполнено, умноженная на вероятность наступления этого события в случае невыполнения этого условия. Поэтому байесианец ответил бы на вопросы A, B, D и E таким образом, чтобы B = D / А х Е.

Это не всегда неочевидно, но, тем не менее, большинство калиброванных экспертов по принятию решений интуитивно дают ответы, удивительно близкие к удовлетворяющим этому требованию. Допустим, что в нашем последнем примере ответы калиброванного эксперта на вопросы A, B и С были 55, 70 и 40%. Но его ответы на вопросы D и E были 50 и 75%, хотя, по логике, при таких ответах на предыдущие вопросы они должны были быть 56,5 и 68,1%, а не 50 и 75%. На рисунке 2 мы показываем, как субъективные ответы на эти вопросы соотносятся с расчетными байесовскими значениями.

Обратите внимание: для того, чтобы согласовываться с другими субъективными ответами, одно из пары байесовских значений должно быть меньше нуля, а другое — больше 100%. Очевидно, что эти значения противоречили бы здравому смыслу, но когда калиброванные эксперты давали свои субъективные оценки, они не знали, что возникнет такая проблема. Однако в большинстве случаев полученные ответы оказались даже более близкими к «собственно байесовским», чем ожидали калиброванные эксперты (см. рис. 2).

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

Рис. 2. Субъективные вероятности, указанные калиброванным экспертом, в сравнении с байесовскими вероятностями

Интересно, что, сравнивая новую информацию со старой, люди обычно мыслят максимально логично, что крайне важно, поскольку человек способен учитывать качественную информацию, не вписывающуюся в стандартную статистику. Например, при составлении прогноза возможного влияния новой политики на имидж компании в глазах общественности (что измеряется снижением числа жалоб потребителей, ростом доходов и т.п.) калиброванный эксперт должен был бы дополнить имевшиеся у него сведения «качественной» информацией о том, какую роль эта политика сыграла в других компаниях, результатами обсуждения в фокус-группах и т.д. Даже когда имеется
информация только о выборке, калиброванный специалист, обладающий байесовским инстинктом, принимает во внимание такую качественную информацию о выбранных объектах, которую не учитывают обычные статистические методы.

Убедитесь в этом сами, попытавшись ответить на следующий вопрос: увеличатся ли доходы вашей компании в следующем году? Укажите сначала свою калиброванную вероятность. Затем опросите двух-трех компетентных в этом вопросе сотрудников. Пусть они не только выскажут свое мнение, но и как-то его аргументируют, приведут какие-то детали. Теперь предложите другую субъективную вероятность того, что доходы компании увеличатся. Эта новая оценка наверняка будет отражать полученную вами новую информацию, даже если она и была по большей части качественной.

На рисунке 3 калиброванный эксперт (обладающий байесовским инстинктом и не страдающий как избытком, так и недостатком уверенности) сравнивается с тремя другими специалистами — использующим традиционные небайесовские методы выборки, такие какt-статистика, некалиброванным оценщиком и чистым байесовским оценщиком. Эта концептуальная схема показывает нам, как соотносятся с байесовским используемые ими подходы. Одна ось показывает, насколько специалисты уверены в своих оценках по сравнению с реальной вероятностью правильности их оценок, другая ось — насколько они учитывают предыдущую информацию.

Рис. 3. Уверенность или информацияЖ разные акценты при проведении оценок

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

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

  • Отбирайте самых беспристрастных экспертов. Если от результатов исследования зависит бюджет отдела, не привлекайте его руководителя к качественной оценке новой информации.
  • Проводите испытания вслепую. Иногда специалистам предоставляют необходимую информацию, скрывая от них, какую именно проблему они оценивают. Например, из стенограммы обсуждения нового продукта в фокус-группе удаляют все ссылки на этот продукт, с тем чтобы судьи определяли лишь то, позитивна или негативна реакция группы.
  • Разделяйте обязанности. Этот прием хорошо сочетается с испытаниями вслепую. Пусть одна группа экспертов оценит качественную информацию, а вторая группа, изучив выводы первой и не зная, о каком конкретно продукте, отделе, проекте и т.д. идет речь, даст окончательный байесовский ответ.
  • Помните о байесовских последствиях. Просите экспертов указать заранее, как определенные результаты могут повлиять на их оценки, и применяйте байесовскую поправку до тех пор, пока они не окажутся внутренне непротиворечивыми.

Неоднородный бенчмаркинг и его использование для оценки «ущерба бренду»

Все, что вам нужно представить в количественной форме, можно каким-то образом измерить. В любом случае это даст лучший результат, чем если не проводить измерений вовсе.

Закон Гилба

Одна из трудностей, с которыми столкнулись эксперты в задаче по определению среднего веса леденца, заключалась в невозможности сравнить его с весом другого объекта для наглядности. Один эксперт заявил: «Не представляю себе, как может выглядеть один грамм леденцов», а другой отметил: «Я вообще плохо определяю на глаз вес маленьких предметов».

А что, если я подсказал бы им: визитная карточка весит примерно 1 г, 10-центовая монета — 2,3 г, а большая скрепка для бумаги — ровно 1 г? Помогло бы это сузить диапазоны предлагаемых ими значений? Кое-кому это было очень полезно, особенно если первоначально указанный ими диапазон был достаточно широким. Получив мою информацию, один человек, который сначала считал, что верхняя граница диапазона может составлять 20 г, сразу же опустил ее до 3 г. Люди корректируют свои оценки потому, что, как мы теперь знаем, все они, особенно калиброванные оценщики, являются интуитивными байесианцами. Они склонны довольно рационально обновлять первоначальную информацию, которой обладали, учитывая новые сведения, даже если те носят качественный характер или имеют к оцениваемому объекту отдаленное отношение.

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

Представление о порядке величин

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

Пример: прогнозирование продаж нового продукта на основе информации о сбыте других товаров или аналогичных конкурентных продуктов.

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

Кому не раз доводилось сталкиваться с сопротивлением проведению измерений в области информационной безопасности, так это Питеру Типпетту из компании Cybertrust. Работая над своим дипломом и кандидатской диссертацией по биохимии, он сделал то, что не пришло в голову никому из его сокурсников: создал первую антивирусную программу, получившую впоследствии известность как Norton Antivirus. Затем Типпетт провел ряд исследований с участием сотен организаций с целью сравнительной оценки рисков для разных угроз безопасности. Казалось бы, мнению такого человека об измеряемости безопасности, безусловно, можно доверять. Тем не менее у многих специалистов в сфере IT сама идея проведения подобных измерений, похоже, вызывает острое неприятие.

Типпетт предложил свой подход к решению проблемы, состоящий в том, чтобы задаться вопросом: «Насколько ужасно будет, если. » Согласно такому подходу, специалисты по информационной безопасности решают, существует ли малейшая вероятность наступления такого катастрофического события, которое необходимо предотвратить любой ценой. Типпетт замечает: «Поскольку катастрофа может произойти в любой области, превентивные меры должны приниматься везде. Думать о приоритетах здесь не приходится». Он приводит следующий конкретный пример. «Одна компания из списка Fortune 20 выделила на реализацию 35 своих проектов в сфере информационных технологий 100 млн дол. Руководитель ее информационной службы захотел узнать, какие из проектов важнее, и получил от своих подчиненных ответ, что этого никто не знает и знать не может».

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

Но Типпетт не согласен с мнением, что масштабы проблемы ущерба для бренда и других нежелательных событий нельзя различить. Он предложил оценивать то, что объединяет гипотетические примеры ущерба бренду с реально имевшими место событиями. Например, он спрашивает, во что компании обошлись часовой сбой в работе электронной почты и другие нежелательные события. Затем следует новый вопрос: «Насколько велик этот ущерб по сравнению с. » («примерно такой же», «вдвое меньше», «в 10 раз больше» и т.д.)

Специалисты Cybertrust уже получили некоторое представление о сравнительной шкале ущерба от различных нежелательных событий после анализа материалов экспертиз 150 случаев взлома баз данных о клиентах. В основном это были сведения о кражах данных карточек MasterCard и VISA.

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

Сравнение с несколькими ориентирами позволило выявить разницу в масштабе ущерба от разных типов катастроф. Какой-то ущерб бренду был больше урона от одних событий, но меньше потерь от других. Более того, появилась возможность рассчитать «ожидаемые» убытки на основании относительных уровней потерь и их вероятностей.

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

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

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

Применение метода неоднородного бенчмаркинга

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

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

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

Если подобное использование ориентиров кажется «слишком субъективным», вспомним о цели нашего измерения в данном случае. Что такое ущерб бренду, как не восприятие? Ведь мы оцениваем не физическое явление, а мнения людей. Такая оценка невозможна без понимания того, что ущерб бренду — это, по определению, изменение представлений потребителей. И вы определяете размеры этого ущерба, опрашивая потребителей. С другой стороны, можно проследить, что покупатели делают со своими деньгами, наблюдая за тем, как неблагоприятное событие повлияло на курс акций или объем продаж. В любом случае ущерб бренду оказывается измеренным.

Кое-какие тонкости: байесовская инверсия для диапазонов

Как уже упоминалось, в основе многих рисунков и таблиц, составленных мной для этой книги, лежит байесовская инверсия. Решая большинство статистических задач и задач по измерению, мы спрашиваем: «Какова вероятность того, что истинное значение данной величины равно X при условии, что я видел то-то и то-то?» Но вообще-то легче ответить на вопрос: «Если истинное значение равно X, то какова вероятность увидеть то, что я видел?» Байесовская инверсия позволяет нам ответить на первый вопрос, ответив сначала на второй. Нередко ответить на последний бывает намного легче.

Сразу хочу предупредить, что далее нам придется коснуться специальных вопросов. Если вы захотите пропустить это описание, то электронную таблицу для байесовской инверсии, составленную в том числе и на основе приводимого ниже примера, вы найдете на вспомогательном веб-сайте: www.howtomesureanything.com, выбрав связь «Bayesian Inversion» («Байесовская инверсия»). Я постарался сделать это описание как можно проще. Расчеты могут показаться довольно длинными, но я свел их к минимуму, перейдя, где это было возможно, сразу к функциям Excel.

Итак, предположим, что у нас есть магазин автозапчастей и возникла необходимость определить коэффициент удержания покупателей. Мы подозреваем о существовании проблемы с удовлетворенностью потребителей. Калиброванная оценка процента покупателей, которые захотят сделать в нашем магазине еще одну покупку, составляет 75—90% (доверительный интервал, как обычно, 90-процентный). Конечно, желательно, чтобы этот показатель был как можно выше, но если он не достигнет 80%, нам придется принять ряд весьма дорогостоящих корректирующих мер. Расчетная стоимость этой информации намного превышает 500 тыс. дол., но мы, естественно, постараемся минимизировать затраты на проведение опросов потребителей, переложив часть их на плечи своих покупателей. Помня о поэтапном определении интересующего нас показателя, выберем сначала всего 20 потребителей и посмотрим, какую информацию удастся получить. Если из этой выборки 14 человек скажут, что придут к нам за покупками еще, то как мы изменим первоначальный диапазон? Помните, что типичные параметрические, небайесовские методы не позволяют учитывать его при расчетах.

Начнем с более простого вопроса: если 90% покупателей скажут, что вновь придут за запчастями в наш магазин, то сколько человек из 20 сказали бы то же самое? Ответ очевиден — 90% от 20, или 18 человек. Если бы таких людей было 80%, то в нашей выборке их оказалось бы 16. Конечно, мы знаем, что совершенно случайно в числе 20 выбранных нами покупателей желающих вернуться в магазин может оказаться 15 или даже 20 человек. Поэтому нужно узнать не только ожидаемый результат, но и вероятность его получения.

Чтобы определить вероятность получения конкретного результата, используем специальное, уже упоминавшееся распределение, которое называется биноминальным. Напомним, что биноминальное распределение позволяет рассчитать вероятность определенного числа «попаданий» при условии проведения определенного числа попыток и того, что в каждой попытке может быть только один результат. Например, при подбрасывании монетки «попаданием» можно назвать выпадение орла, попытками — подбрасывания, а шанс попадания составляет 50%. Предположим, например, что мы хотим узнать вероятность того, что при 10 подбрасываниях орел выпадет четыре раза при вероятности его выпадения 50%. Вместо того, чтобы объяснять всю формулу и теорию комбинаторики, я сразу перейду к формуле программы Excel. В Excel мы просто запишем:

= binomdist(число попаданий, число попыток, вероятность попадания, 0).

Взяв числа из нашего примера с подбрасыванием монеты, запишем: binomdist(4, 10, 0,5, 0), и Excel даст нам значение 20,5% (ноль в конце говорит о том, что нас интересует вероятность только этого конкретного результата. Записав вместо нуля единицу, получим накопленную вероятность, то есть вероятность указанного или меньшего числа попаданий). Данный результат означает, что есть 20,5-процентная вероятность того, что в случае 10-кратного подбрасывания монеты орел выпадет точно четыре раза.

В нашем примере с магазином автозапчастей покупатель, заявивший «да, я еще сюда вернусь», — это попадание, а размер выборки — это число попыток. Используя биноминальное распределение, менеджер может определить вероятность конкретного результата, например вероятность того, что среди 20 выбранных нами покупателей вернутся в магазин только 14, хотя вообще таких людей должно быть 90%. В Excel мы запишем: =binomdist(14, 20, 0,9, 0), что даст нам 88,7-процентную вероятность 14 попаданий при 20 случайно выбранных покупателях, если бы на самом деле 90% посетителей сказали, что готовы сделать еще одну покупку. Отсюда мы уже видим, что верхняя граница нашего первоначального диапазона не слишком правдоподобна.

Предположим теперь, что мы рассчитали эту вероятность для генеральной совокупности, в которой доля повторных покупателей составит сначала 75%, затем 76, 77 и т.д. вплоть до 90% (таким образом, шаг равен 1%). Используя некоторые таблицы в программе Excel, мы сможем быстро рассчитать вероятность конкретного результата при данном «истинном» проценте повторных покупателей. Для каждого приращения на 1% получим вероятность того, что 14 из 20 покупателей ответят утвердительно на вопрос о возвращении за повторной покупкой при данном «истинном» проценте повторных покупателей. Я бы рассчитывал эти вероятности для каждого приращения на 1%, начиная от 60% (что с учетом нашего 90-процентного CI маловероятно, но возможно) и заканчивая 100%. Для каждого приращения проведем расчет на основе теоремы Байеса. Запишем все это вместе в следующем виде:

P(Prop = Х|Попадания = 14/20) = P(Prop = X) х х Р(Попадания = 14/20|Prop = х) / P(Попадания = 14/20),

P(Prop = Х|Попадания = 14/20) — вероятность данного процента повторных покупателей в генеральной совокупности (процента X) при условии, что 14 из 20 случайно отобранных объектов являются попаданиями;

P(Prop = X) — вероятность того, что определенный процент покупателей в генеральной совокупности вернется снова (например, X = 90% генеральной совокупности покупателей, которые действительно сказали, что вернутся снова);

P(Попадания = 14/20|Prop = X) — вероятность 14 попаданий из 20 случайно выбранных объектов при данном проценте (проценте X) повторных покупателей в генеральной совокупности;

P(Попадания = 14/20) — вероятность получения 14 попаданий из 20 попыток при условии, что все возможные проценты повторных покупателей в генеральной совокупности находятся в первоначальном диапазоне.

Мы знаем, как рассчитать Р(Попадания = 14/20|Prop = 90%) в Excel: [=binomdist(14, 20, 0,9, 1)]. Теперь нам нужно придумать, как рассчитать P(Prop = X) и Р(Попадания = 14/20). Мы можем рассчитать вероятность каждого приращения на 1% доли повторных покупателей в нашем диапазоне, вернувшись снова к функции =normdist() в Excel и используя калиброванную оценку. Например, чтобы получить вероятность того, что 78—79% наших покупателей окажутся повторными (или, по крайней мере, заявят об этом во время опроса), мы можем записать следующую формулу Excel:

=normdist(0,79, 0,825, 0,0456, 1) — normdist(0,78, 0,825, 0,0456, 1).

Число 0,825 — это среднее значение нашего калиброванного диапазона: (75% + 90%)/2; 0,0456 — среднее квадратичное отклонение (как вы помните, в 90-процентном CI 3,29 среднего квадратичного отклонения): (90% — 75%)/3,29. Формула normdist дает нам разность между вероятностью получить менее 79% и вероятностью получить менее 78%, которая составляет 5,95%. Мы можем определить это для каждого приращения на 1% в исходном диапазоне, а затем рассчитать вероятность того, что доля повторных покупателей в генеральной совокупности равна X [то есть P(Prop = X)] для каждого мало-мальски вероятного значения X в нашем диапазоне.

Расчет значения P(Попадания = 14/20) основан на всем, что мы делали до сих пор. Чтобы рассчитать P(Y), когда мы знаем P(Y|X) и P(X) для каждого значения X, суммируем произведения P(Y|X) х P(X) для каждого X. Зная, как рассчитать P(Попадания = 14/20|Prop = X) и P(Prop = X) для любого X, мы просто умножаем эти две величины для каждого X, затем суммируем их и получаем, что P(Попадания = = 14/20) = 8,56%.

Теперь для каждого значения в исходном диапазоне (и даже немного за его пределами, чтобы получить «хвосты» в уравнении) мы рассчитываем P(Prop = X), P(Попадания = 14/20|Prop = X) и P(Prop == X|Попадания = 14/20), для каждого приращения на 1% повторных покупателей в генеральной совокупности величина P(Попадания == 14/20) для всех одинакова и равна 8,56% (см. табл. 1).

Значения в последнем столбце — вероятности данного процента повторных покупателей в их генеральной совокупности. Если суммировать накопленные значения в последнем столбце (складываем все предшествующие значения в строке), то выяснится, что итог составит около 5%, когда процент повторных покупателей достигнет 79%, и 95%, когда этот процент будет равен 85%. Это означает, что наш новый 90-процентный CI сократится до 79—85%. Это не слишком большое сужение первоначального диапазона (75—90%), но тем не менее достаточно информативное. Теперь, согласно накопленным значениям последнего столбца, вероятность того, что мы находимся ниже основного порога в 80%, составляет 61%. Эту электронную таблицу целиком можно найти на веб-сайте: www.howtomesureanything.com

Таблица 1. Отдельные строки из таблицы расчётов с использованием байесовской инверсии

Похоже, что удержание покупателей у нас не на высоте. Но мы пересчитаем стоимость этой информации, и хотя она уменьшится, окажется, что провести дополнительные измерения все равно имеет смысл. Выберем еще 40 покупателей, и тогда в сумме их будет 60 человек. Из этих 60 только 39 скажут, что вернутся в наш магазин. Наш новый 90-процентный CI окажется равным 69—80%. Теперь верхняя граница равняется нашему первоначальному критическому порогу 80%, давая 95-процентную уверенность, что доля повторных покупателей низка настолько, что требует от нас серьезных, дорогостоящих изменений.

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

Избегайте «инверсии наблюдения»

Многие задают вопрос: «Какой вывод я могу сделать из этого наблюдения?» Но Байес показал нам, что нередко полезнее задать вопрос: «Что я должен наблюдать, если будет соблюдаться условие X?» Ответ на последний вопрос позволяет разобраться с первым.

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

Напротив, многие менеджеры, похоже, считают, что все измерения сводятся к поиску ответов на вопрос: «Какой я должен сделать вывод из того, что вижу?» Когда кажется, что совершена ошибка наблюдения, люди решают: на этом основании делать выводы нельзя, какой бы низкой ни была вероятность такой ошибки. Однако байесовский анализ показывает, что воображаемые менеджерами ошибки крайне маловероятны и что измерение все равно заметно снизило бы существующую неопределенность. Иными словами, отсутствие, по крайней мере, теоретического понимания байесовской инверсии приводит к переворачиванию вопроса и к формированию убеждения, что маловероятные ошибки сводят ценность измерений к нулю — то есть к самой неудачной разновидности «инверсии наблюдения».

Примечания

1 David M. Grether, Mahmoud A. El-Gamal. Are People Bayesian? Uncovering Behavioral Strategies // Social Science Working Paper 919, 1995, California Institute of Technology.

2 Tom DeMarco, Timothy Lister. Peopleware: Productive Projects and Teams. 2nd ed. New York: Dorset House Publishing, 1999.

1 FYP — first year profit, прибыль первого года. — Примеч. переводчика.

2 Неточность: рисунок доли генеральной совокупности приведен в главе 9 (см. рис. 9.2). — Примеч. редактора.

Занятия по MATLAB в компьютерном классе

Категория: Информатика
Тип: Методичка
Размер: 198.9кб.
скачать

Занятия по MATLAB в компьютерном классе

(6 занятий по 90 мин.)

1. Общие сведения о MATLAB ‘е.

3. Элементы xy -графики.

Топ лучших площадок для торговли опционами на русском языке:
  • БИНАРИУМ
    БИНАРИУМ

    Лидер среди всех брокеров бинарных опционов! Бесплатное обучение и демо-счет! Идеально для начинающих и средне-опытных трейдеров.
    Получите свой бонус за регистрацию:

4. Простые примеры, иллюстрирующие эффективность MATLAB ‘а.

5. Графический способ решения уравнений.

Тема 1. Общие сведения о MATLAB ‘е

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

MATLAB предназначен прежде всего для программирования численных алгоритмов. Он разрабатывается уже более 15 лет и возник на основе более ранних прикладных пакетов LINPACK и EIGPACK, созданных в 1970-е гг. в США, и в свою очередь повлиял на появление таких систем, как MathCad, MAPLE и Mathematica. Совершенствование системы MATLAB происходило как в связи с достижениями в вычислительной математике, так и в связи с изменениями в архитектуре персональных компьютеров и развитием общесистемных средств. Со временем MATLAB был дополнен целым рядом уже упоминавшихся приложений (toolboxes), далеко раздвинувших границы его применимости. Далее речь пойдет лишь о ядре MATLAB’а, которое мы будем называть системой, и конкретно о ее версии 5.2, выпущенной фирмой MathWorks в январе 1998 г.

MATLAB – система программирования высокого уровня, работающая как интерпретатор и включающая большой набор инструкций (команд) для выполнения самых разнообразных вычислений, задания структур данных и графического представления информации. Команды эти разбиты на тематические группы, расположенные в различных директориях системы. Теперь в системе около 800 команд, и примерно половина из них вполне доступна начинающему пользователю. Команды с большим возможным объемом вычислений написаны на С, но много и таких команд, которые представлены в терминах этих первых. Поэтому система оказывается почти открытой для пользователя. Имеются большие возможности для вывода двумерной и трехмерной графики и средства управления ею. Пользователь может без особых затруднений добавлять свои команды и писать программы в терминах уже существующих команд; несколько сложнее делать это в рамках Фортрана и С. Можно обмениваться данными с программами на этих языках, а из них обращаться к системе. Краткость и наглядность программирования и исключительные возможности визуализации результатов делают систему очень эффективной при поисках и апробации новых алгоритмов, при проведении разовых расчетов и в учебном процессе, поскольку ее можно осваивать без предварительного знакомства с основами программирования и выполнять такие сложные примеры, которые невозможно делать с использованием других систем.

Документация по системе и ее приложениям содержит много тысяч страниц, и поэтому естественно встает вопрос о том, как ее осваивать. Работа с системой требует определенной математической подготовки, так что обучение можно начинать на втором курсе вуза. Основные сведения о системе изложены в руководствах /1/ – /2/: /1/ – это учебник с описанием вычислительных возможностей и архитектуры системы, /2/ – описание ее графических возможностей. Конечно, можно читать подряд /1/, /2/ и при необходимости обращаться за уточнениями к команде help или справочнику /3/, в котором описаны почти все команды. Но гораздо более эффективным, на наш взгляд, является изложение основных вычислительных процедур с помощью наиболее употребительных команд системы. Именно так мы и познакомимся с MATLAB’ом, а точнее примерно с 30-40 его командами. После этих занятий пользоваться документацией /1/ и /2/ будет гораздо легче.

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

Для работы с системой достаточно иметь компьютер PC 486 с оперативной памятью хотя бы 16 Mb и с установленными на нем системами Windows 95 и MATLAB 5.2. В действительности MATLAB может работать и с другими операционными системами, такими, например, как Macintosh , Unix и OS /2.

За рубежом вышло уже достаточно много учебных пособий по системе, но на русский язык ни одно из них пока не переводилось и даже в центральных библиотеках их теперь нет из-за сокращения финансирования. Изданные у нас пособия (например, /4/ – /12/) в основном следуют руководствам /1/ – /3/, тогда как нам представляется полезным дать менее формальное введение в предмет, опираясь прежде всего на интуицию слушателя.

MATLAB – высокоуровневая система программирования, позволяющая резко сократить затраты труда при проверке алгоритмов и проведении прикидочных расчетов. Возможность проведения больших расчетов на MATLAB’е определяется в основном теми затратами времени, на которые может пойти пользователь: здесь приходится выбирать между легкостью и наглядностью программирования и представления результатов, с одной стороны, и затратами времени на счет – с другой. Система очень удобна для освоения и апробации численных методов, что мы и хотим показать здесь прежде всего. Именно поэтому она рекомендуется как одна из основных для физиков и многих других естественно-научных специальностей в ведущих американских университетах. Детальное освоение любой большой программной системы – это достаточно длительный процесс, основу которого составляют индивидуальная работа, и наши занятия призваны дать лишь первоначальный импульс этому процессу в отношении MATLAB’а. Темы 2 – 4 представляют сравнительно элементарное введение, а в остальных рассматриваются более сложные примеры, показывающие, как можно использовать программные и графические возможности системы для исследования численных алгоритмов.

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

Тема 2. Переменные

Переменные могут быть числовыми, текстовыми и других типов. У нас будут только числовые (это во всех деталях) и текстовые (совсем немного). Название переменной начинается с латинской буквы, далее могут быть буквы и цифры (не более 31 символа). Строчные и прописные буквы здесь различаются.

1. Числовые переменные. Это числа, векторы, матрицы и многомерные массивы. В компьютере все числа представлены примерно с 16 десятичными знаками, под каждое вещественное число отводится 8 байтов, под комплексное – 16.

Целые числа. В системе они не выделяются явно. Наберем и выполним отдельно каждую команду:

a=2 a=2.0 a=2; a=1:6 b=1:20 c=10:-2:5

Командное окно . Командная строка. Редактирование командной строки. Буфер исполненных команд. Как выбирать информацию из командного окна и из буфера исполненных командных строк. Нельзя допускать совпадения имени переменной с именем какой-либо команды.

Вещественные числа. Выполним по отдельности следующие команды:

d=0.5:0.3:2.5 d=.5:.3:2.5 d=.5+1:.3-.1:2.5*2 length(d)

d(end) d(end-2) d(1) d(0) d(2:7) d(7:-1:2) d(150)

f = linspace (1.5,30,143); length ( f )

Индексы всегда начинаются со значения 1. Команды набираются на малом латинском регистре. Возможна многопараметричность команд.

Диапазон вещественных чисел:

Другие константы MATLAB’а:

Их не следует портить.

q=1+2*i q=1+2i real(q) imag(q) abs(q) conj(q) s=angle(q) ( здесь — p p ).

q=1+2*i;r=3; fi=0:.01:pi; z=q+r*exp(i*fi); plot(z) Это верхняя полуокружность .

1.2. Ввод векторов

a =1:6 linspace (1,6,10)

a =(1:6)’ linspace (1,6,10)’

y1=linspace(1,6,4)’; y2=y1; y=y1+i*y2; y.’ y’

Команды linspace и : применимы для задания только вещественных векторов.

1.3. Ввод матриц. A(i,j) — элемент из i-й строки и j-го столбца. A(k) – k- й элемент таблицы , вытянутой в столбец .

A=[1,2;3,4] A=[1;2,3;4] A(2,2) A(3) A(5) size(A) A(3,4)=10 size(A)

A(5)=6 size(A) A(22)=3 A=A(:) A(22)=3 size(A) [m,n]=size(A)

A=reshape(1:24,4,6) size(A) A([1,end], 🙂 =[] A( :, [1,end] ) =[] size(A)

1.4. Некоторые специальные матрицы :

m=3;n=4; eye(m,n) eye(m) eye(n) ones(m,n) ones(m) ones(n) zeros(m,n)

rand(m,n) rand(m,n) rand(‘state’,0) rand(m,n) rand(m) Это равномерное распределение на интервале (0, 1).

randn(m,n) randn(‘state’,100) Это нормальное распределение, у него мат.ожидание=0, дисперсия=1

v1=1:4 v2=7:12 toeplitz(v1,v2) toeplitz(v1)

1.5. Некоторые простые команды :

A=reshape(1:24,4,6) triu(A) triu(A,0) triu(A,2) triu(A,-1) tril(A)

v=1:5 diag(v) diag(v,2) diag(v,-1)

diag(A) diag(A,2) diag(A,-1)

A=reshape(1:24,4,6) rot90(A) rot90(A,2)

1.6. Выдачи на экран. Команда format с различными опциями.

В обычном формате (forrmat short) выдается 5 знаков, для целых чисел 9 знаков, порядки изменяются от -308 до +308. В полном формате (format long e) 16 знаков .

a=2 a=.001 a=1e-3 a=1e-5 a=123456789 a=1234567891 a=1+3*i

format long e, 2^.5, format short

Опция format short e позволяет получать ровные столбцы .

2. Текстовые переменные. Они берутся в кавычки (на букве э на латинском регистре), символ занимает 2 байта. Используются для задания заголовков в числовых выдачах и на графиках, для задания формул и т.д. Можно переводить текстовые переменные в числовые и наоборот. Выполним в командной строке

t=’Moscow — столица России’

(после дефиса нужно перейти на русский шрифт и затем не забыть снова вернуться на латинский).

3. Контроль за переменными:

4. Другие типы переменных – ячейки и структуры.

help выдает список директорий системы;

help выдает список команд директории;

help выдает описание команды.

type выдает текст команды или программы пользователя, если он составлен в терминах MATLAB ‘а.

1. Из заданной матрицы A выбрать вектор, компоненты которого есть все окаймляющие A элементы, взятые в порядке A (1,1), A (2,1), … , A (1,2).

2. Из заданной матрицы A размера m * n построить матрицу B с m строками, у которой диагонали с номерами 0, 1,…, n -1 были бы столбцами A с номерами 1: n , а все остальные элементы равнялись бы нулю.

3. Построить последовательность из 1000 целых случайных чисел, которые равновероятно принимали бы значения 11:18, и выдать, сколько из них оказалось равным 11, 12, …, 18. Используйте команду round ( k ) округления k до ближайшего целого.

Тема 3. Элементы xy -графики

1.Как открывать графическое окно:

figure whitebg zoom on

Теперь построим график функципи y = sin (2 p x ), 0 x

x=0:1e-3:5; y=sin(2*pi*x); plot(y) plot(x,y) ,grid

Использование режима zoom :

k =100; y = sin (2* pi * k * x ); plot ( y )

2.Автоматическое чередование цветов. Теперь будем, как правило, нумеровать строки.

1;x=linspace(0,1,20); k=.1:.1:.8; y=k’*x; plot(x,y)

Здесь определяется вектор-строка x=0:20, затем вектор-строка k из 8 угловых коэффициентов, далее получается матрица y =k’*x как произведение вектора-столбца k’ на вектор-строку x. Строки этой матрицы состоят из точек соответствующих прямолинейных отрезков. Наконец, строятся графики этих отрезков как функций от x – первая нижняя линия (она желтая) соответствует k=.1, последняя, тоже желтая, – для k=.8. Мы видим, что цвета, которых всего 7, чередуются циклически в таком порядке (под русскими английские названия):

желтый фиолетовый голубой красный зеленый синий белый

yellow magenta cyan red green blue white

Вызовем строку 1 и отредактируем в ней команду plot:

1;x=linspace(0,1,20); k=.1:.1:.8; y=k’*x; plot(x,y,’g.’)

т.е. добавим там третий (текстовой, ибо он в апострофах) аргумент. Все кривые на рисунке станут зелеными (green), а линии будут изображаться отдельными точками. Аналогично употребляются и другие цвета из этого списка – по первой букве. В текстовом аргументе может быть до трех символов. Для изображения точек графика помимо . употребляются еще : — -. * x o + и некоторые другие символы.

3.Графики в полярных координатах:

x=1:.01:3; nx=length(x); r=x.^2; fi=linspace(0,5*pi,nx); polar(fi,r)

4.Еще один пример – легко строятся многозначные функции:

x=0:.1:6*pi; y=cos(x); plot(x,y) plot(y,x)

5. Управление осями :

axis off axis on axis ([-10,10,-5,20]) axis auto axis equal axis square

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

Тема 4. Простые примеры, иллюстрирующие эффективность MATLAB ‘а

1. Суммирование. Найдем при заданном n частичную сумму ряда s(n) = 1/k^2, k=1:n. Для этого выполним строку

1;n=100; k=1:n; f=k.^(-2); plot(cumsum(f)), [sum(f),pi^2/6] =1000

Команда cumsum(f) подсчитывает все частичные суммы s(k) от f(1:k) для каждого k от 1 до n, так что на графике можно наблюдать процесс формирования нужной нам величины. В конце строки выдается численный и точный результаты:

ans = 1.6350 1.6449 .

Полагая n=1000, получим

ans = 1.6439 1.6449 ,

т.е. ошибку в 1 единицу 4-й значащей цифры.

Сходимость не всегда столь очевидна, как на этом графике. Чтобы в этом убедиться, усложним наш пример: при заданных m>1 и n найдем частичную сумму ряда s(m,n) = sum(1/k^m), k=1:n (при m=1 получается уже расходящийся гармонический ряд). Для проведения вычислений отредактируем строку 1:

2; m =2; n =1000; k =1: n ; f = k .^(- m ); plot ( cumsum ( f )), sum ( f )

и сначала для проверки получим свой старый результат. Но уже при m=1.5 у нас, глядя на график, нет полной уверенности в достижении сходимости. Это тем более так при m=1.2: для n=1000 ans=4.3358, а для n=1e4 ans=4.7991. Факт сходимости ряда при m=1.01 нельзя установить численно из-за низкой скорости его сходимости.

Чтобы лучше запомнить действие команды cumsum, вычислим ò (x/sin(x))dx, x Î [0, 3]. Подинтегральная функция f=x/sin(x) не имеет в нуле особенности, и поэтому достаточно выполнить строку

3;n=100; h=3/n; x=h/2:h:3-h/2; f=x./sin(x); plot(h*cumsum(f)), grid, sum(h*f) =1000

т.е. аппроксимировать f в серединах интервалов (эти точки x называют полуцелыми в отличие от концов счетных интервалов – целых точек). Сравнение ответа ans = 8.4495 и графика наводит на мысль о том, что пока сходимость еще не достигнута, но при n=1e3 ans = 8.4552, так что при n=1e2 со сходимостью в действительности все в порядке, а возрастание функции h*cumsum(f) на правом конце происходит из-за роста там функции f – это можно увидеть, выполнив

Для матрицы A команды sum и cumsum работают вдоль столбцов (значит, по первому индексу), а для вектора – вдоль него независимо от того, строка это или столбец. Чтобы провести суммирование для матрицы A вдоль ее строк, нужно выполнить sum(A,2), т.е. указать для выполнения команды второй индекс. Это правило относится ко многим командам MATLAB’a и к многомерным матрицам тоже – по умолчанию имеется в виду первый индекс, а в противном случае нужно всегда указывать, по какому индексу должна работать команда, и это указание не сохраняется для последующих команд.

2. Произведения. Аналогично суммированию с помощью команд prod и cumprod вычисляются и обрабатываются произведения. Например, найдем Õ (1-1/k^2), k=2:100 (при k ®¥ Õ® 1/2), выполнив строку

1; n =100; k 2=(2: n ).^2; a =1-1./ k 2; cp = cumprod ( a ); cp ( end ), plot ( cp /.5), grid

Результат cp(end) = 0.5050 говорит о том, что сходимость здесь не очень быстрая. Это видно и из графика, на котором представлена относительная ошибка результата. Обратите внимание на названия переменных k2=k^2 и cp=cumprod(..): при выборе имен переменных всегда нужно стремиться к тому, чтобы эти имена хоть как-то отражали суть дела (это особенно важно при написании больших программ, где много переменных).

При вычислении произведений можно выйти за числовую шкалу. Найдем, например, для каких k можно найти k!. Ясно, что максимально допустимое km вряд ли больше 200, так что строка

2;n=200; k=1:n; kf=cumprod(k); plot(kf)

должна дать ответ на наш вопрос. Из-за быстрого возрастания kf и ограниченной разрешимости дисплея (это не более 0.5% от максимального значения на графике) мы видим всего одну точку kf(km), перед которой, как нам ошибочно кажется, идут нули и за которой идут числа inf ( infinity ), вообще никак не представленные на рисунке. Точно так же графика обходится и с переменной NaN ( not a number ), и это обстоятельство может быть иногда полезным. Переменная NaN возникает в таких ситуациях:

0/0 inf — inf inf / inf

Переменные inf и NaN (они получаются со знаком) можно использовать в программах. Для определения km выполним строку

3; sum ( isinf ( kf ))

в которой isinf(kf) выдаст 1 на тех позициях вектора размеров kf, где элементы kf есть inf, и 0 на остальных позициях. Поскольку ans=30, km=n-30=170, что можно было бы получить и сразу, выполнив строку

4; km = sum ( isfinite ( kf ))

где isfinite отмечает те элементы числовой переменной, которые отличны от inf и NaN. При выходе произведения за числовую шкалу для сомножителей можно использовать команды

log (взятие натурального логарифма),

log10 (взятие десятичного логарифма),

abs (взятие модуля),

sign (взятие знака, выдающее 1, 0 и -1).

3. Логические задачи. Обычно при освоении программирования логические действия даются труднее арифметических. Приведем здесь два простых примера задач логического характера.

1. Напишем строку для нахождения общих элементов двух векторов:

x=1:20; y=15:30; [X,Y]=meshgrid(x,y); v=X(X==Y)

2. Второй пример несколько сложнее, и начинающие изучать MATLAB обычно пытаются решить его с помощью циклов for-end, что совершенно неправильно. Взяв на сторонах единичного квадрата по 200 интервалов, определим, сколько точек получившейся таким образом сетки попадает внутрь вписанной в него окружности. Нужная программа имеет вид

1;tic, x=0:1/200:1; [X,Y]=meshgrid(x); M=abs(X+i*Y-.5-i*.5)

и даст ответ s=31397 точек, t1=0.16 сек, тогда как строка для циклов for-end

2;tic, s=0;w=1:201; for I=w,for J=w,if norm([x(I),x(J)]-.5)

дает то же самое s и t2=7.47 сек, так что t2/t1=46. Это лишний раз говорит о том, что нужно разумно подходить к использованию операторов языка программирования.

4. Усовершенствуйте, как можете, обе строки последнего примера и посмотрите, как изменится значение t2/t1.

5. Проверьте, что при вычислении определителя квадратной матрицы M порядка n методом Гаусса нужно выполнить @ 2n 3 /3 операций сложения и умножения. Считая их одинаковыми по времени выполнения, найдите, за какое время t выполняется 1 млн операций, взяв n =500 и выдав время счета det ( M ).

6. Используя предыдущий результат, оцените число арифметических операций для вычисления функций sin и exp .

7. Оцените число операций, которое затрачивается в MATLAB ‘е для организации одного шага в цикле for — end .

8. Прочтите в help описания команд max , diff , sort и с их помощью попробуйте составить программу, которая для заданной квадратной матрицы M определяла бы, что M является нижней треугольной с ненулевыми элементами на главной диагонали или получается из таковой перестановкой столбцов.

Тема 5. Графический способ решения уравнений

1. Простой пример: найти корни уравнения x*sin(x^2)=0 на отрезке [0,3]. Программа :

1;x=0:.01:3; f=x.*sin(x.^2); plot(x,[f;0*f]), grid

В команде ginput точка снимается нажатием левой клавиши мыши, Enter – выход из ginput .

Проверим это другим способом:

3; nx = length ( x ); w =1: nx -1; x ( find ( f ( w ).* f ( w +1) f ( w )==0))

Эту строку можно упростить:

4;nx=length(x); w=1:nx-1; x(f(w).*f(w+1)

Матрицы и векторы с элементами 0-1.

2. Сложный пример – неявные функции. Построим график неявной функции f(x,y) º x 3 y-2xy 2 +y-0.2=0, x,y=[0, 1]. Это выполнит программа

1; h =.02; x =0: h :1; [ X , Y ]= meshgrid ( x ); f = X .^3.* Y -2* X .* Y .^2+ Y -.2;

2;v=[0,0]; contour(x,x,f,v), grid

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

Выясним, какой знак имеет f в области G, для чего выполним

3; mesh ( x , x , f .*( f >0))

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

Вычислим площадь S этой области:

4; S = h ^2* sum ( f (:)>=0) ( S =0.7296).

Для h=0.01 выполним строку 1, затем строку 4 и получим S=0.7204, а для h=0.005 найдем S=0.7152. При интегрировании всегда естественно делать такие проверки.

Выясним, какой объем заключен между поверхностью f(x,y) и областью G, где f(x,y)>=0. Для этого снова возьмем в строке 1 h=0.02 и вычислим

5; V = h ^2* sum ( f ( f >=0)) ( V =0.1268)

Для h=0.01 V=0.1235, а для h=0.005 V=0.1219. Теперь не нужно писать f(:), поскольку f(f>=0) есть вектор.

Конечно, эти результаты приближенные (с точностью до 1 — 2%), но отметьте, как быстро и просто они были получены. Такие приемы можно применять для решения достаточно широкого круга задач.

6; C = contour ( x , x , f ); clabel ( C )

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

Обобщения. Графическим способом можно решать системы уравнений и уравнения в комплексной плоскости. Команда contour 3 строит линии уровней для функций f ( x , y , z ), при этом сетки по аргументам всегда должны быть прямоугольными.

9. Постройте с помощью команды contojur график эллипса x 2 / a 2 + y 2 / b 2 =1и затем найдите его площадь, сравнив ее с точным значением p ab .

10. Выполните строки

x=0:.01:1; for k=1:4,subplot(2,2,k), plot(x,sin(pi*k*x)), end

и затем прочтите в help описание команды subplot .

Тема 6. Полиномы

По степени применимости, по разнообразию и качеству соответствующих команд скалярные полиномы – следующие за матрицами математические объекты в MATLAB’е. Полином

p(x)=a n x n +a n-1 x n-1 +. +a 0 задается вектором-строкой p из чисел a n , a n-1 , . , a 0 ,

т.е. коэффициентами, расположенными в порядке убывания показателя степени. Его степень n задавать не надо, поскольку n=length(p)-1; полином может быть и константой – тогда n=0; коэффициенты a k – любые комплексные числа. Вектор p интерпретируется системой как полином только тогда, когда он задается в качестве параметра для одной из команд, производящих вычисления с полиномами. Так как в этих командах не проверяется условие a n ¹ 0, надо стараться самим соблюдать его, поскольку иногда это может служить источником ошибок.

Основные команды для действий с полиномами таковы:

conv(p,q) – произведение полиномов p и q. Название команды происходит от слова convolution (свертка), поскольку коэффициенты произведения действительно получаются как компоненты свертки векторов p и q.

[q,r]=deconv(b,a) – частное (q) и остаток (r) от деления b на a, так что conv(a,q)+r=b.

residue(b,a) – разложение рациональной функции b(x)/a(x) на элементарные дроби над полем комплексных чисел с выделением целой части. Если a(x) имеет кратные или близкие друг к другу корни, результаты могут быть неверными, поскольку такая задача плохо обусловлена. Плохая обусловленность, т.е. крайне сильная зависимость результата от коэффициентов, иллюстрируется заключительным примером из этой темы.

p=poly(r) – построение полинома по корням, заданным в векторе-столбце r. Для квадратной матрицы r полином p будет ее характеристическим многочленом.

polyval(p,x) – поэлементное вычисление значений полинома p на множестве x, где x может быть как вектором, так и матрицей. Размеры результата совпадают с size(x).

polyder(p) – производная от p.

roots(p) — вектор-столбец, содержащий все корни полинома. Их порядок не определен. Сказанное по поводу неустойчивости результатов для команды residue точно так же относится и к команде roots. Корни полинома вычисляются как собственные значения некоторой матрицы A(p) того же порядка.

Приведем несколько примеров по применению этих команд.

1. Построим график полинома p(x)=x 3 -x+2 на отрезке -1

p =[1,0,-1,2]; x =-1:.01:1; f = polyval ( p , x ); plot ( x , f ), grid

Полином не имеет корней на заданном отрезке. Это подтверждает и команда roots ( p )’ которая даст

ans = -1.5214 0.7607 — 0.8579 i 0.7607 + 0.8579 i .

2.Разделим предыдущий полином на x-3:

q = 1 3 8, r = 0 0 0 26.

Другими словами, частное q(x)=x 2 +3x+8, а остаток r=26.

3. Разложим функцию (x-3)/p(x) на элементарные дроби:

Для r’ получим вектор из трех компонент r 1 , r 2 , r 3 :

-0.7607 0.3803 — 0.4289i 0.3803 + 0.4289i,

для s’ — также вектор из трех компонент s 1 , s 2 , s 3 :

-1.5214 0.7607 — 0.8579i 0.7607 + 0.8579i

и k=[] (это означает, что целой части в разложении нет – действительно, у числителя первая, а у знааменателя третья степени). Компоненты векторов r и s означают, что

( x -3)/ p ( x )= sum ( r i /( x — s i ), i =1:3.

Команда residue работает и в обратную сторону:

восстановит исходные числитель и знаменатель:

q = 0 1 -3 (он получился точно),

p = 1.0000 -0.0000 -1.0000 2.0000 (здесь уже сказались ошибки округления и старший коэффициент не равен 1 автоматически).

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

Перейдем теперь к описанию примера. Пусть vn=1:n, где n>1 — целочисленный параметр, и pn=poly(v’) — полином с корнями 1:n, которые хорошо отделены друг от друга, а wn=roots(pn) — вектор-столбец с вычисленными корнями полинома pn. Проведем сравнение vn’ и wn для различных n. Начнем с n=2:

1;n=2; vn=1:n; pn=poly(vn’); wn=roots(pn); [vn’,wn]

и получим ans=1 2

откуда видно, что элементы в wn нужно упорядочить. Выполняя при n=3 отредактированную строку 1

2;n=3; vn=1:n; pn=poly(vn’); wn=roots(pn); R=[vn’,sort(wn)]

найдем R = 1.0000 1.0000

Появившиеся в первом столбце R цифры 0 как бы «наведены» значениями из второго столбца, и таких мелких шероховатостей у команды format немало. А цифры 0 во втором столбце R говорят о том, что уже появилась погрешность в определении корней. Она, конечно, еще очень мала:

дает относительную ошибку для корней

ans = 1e-14 *( 0.1110 -0.0444 -0.1184)

– это означает, что в численном результате верны примерно 14 знаков.

Для n=10 выполнение строки (ее можно создать из строк 2 и 3)

4;n=10; vn=1:n; pn=poly(vn’); wn=roots(pn); R=[vn’,sort(wn)]; R1=(R(:,2)-R(:,1))./R(:,1)

говорит о том, что точность результата постепенно падает. Строка

дает me=4.2009e-10, т.е. теперь для всех корней верны только 9 знаков ( m e – max . error). Но корни еще остаются вещественными, поскольку

6; iwn = sum ( abs ( imag ( wn )))

Выполним строку 4 для n=20 и затем строкой 5 найдем максимальную относительную ошибку me=0.0073, так что теперь для всех корней верны только 2 знака, но результат пока еще остается вещественным, поскольку после строки 6 получим iwn=0. Сравним точные и вычисленные корни графически: график

показывает, что погрешность для некоторых корней уже видна на глаз – для корней 10:17 желтая и фиолетовая линии слегка различаются.

Теперь приступим к самому интересному в данном примере. При n=20 pn(2)= -210 (это коэффициент при x 19 ). Прибавим к нему 1e-7, т.е. внесем в него малое возмущение примерно в 10-м знаке, и повторим расчет с отредактированной строкой 4:

8;n=20; vn=1:n; pn=poly(vn’); pn(2)=pn(2)+1e-7; wn=roots(pn); R=[vn’,wn], plot(R), grid

Несмотря на такое малое возмущение в коэффициенте pn(2), некоторые корни стали комплексными. Это видно, во-первых, из выдачи на экране (их мнимые части достигают по модулю 2.7), во-вторых, из того, что теперь строкой 6 получим iwn=18.67, и из графика. Если построить график

9; plot ( R ,’.’), grid

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

Выясним, почему так сильно изменились результаты при внесении столь малого возмущения. Обозначим через p(x) наш невозмущенный полином pn при n=20 и через a его второй коэффициент:

p(x)=prod(x-k),k=1:20, или p(x)=x 20 +ax 19 + . +20! , a=-210.

Тогда для корней x=1:20 по теореме о производной неявной функции будем иметь

¶ p/ ¶ x*dx/da + ¶ p/ ¶ a = 0,

dx / da = — ¶ p / ¶ a / ¶ p / ¶ x .

У нас ¶ p/ ¶ a =x 19 , а полином ¶ p/ ¶ x находится как polyder(pn) (см. начало этой темы). Поэтому для вычисления dxda на множестве vn наших корней сначала выполним отредактированную строку 4 с n=20

10;n=20; vn=1:n; pn=poly(vn’);

а затем строку (на графике значения функции определены только для x=1:20 )

11;dpn=polyder(pn); dxda=-(vn.^19)./polyval(dpn,vn); plot(log10(abs(dxda)),’.’), grid

и увидим, что уже при x=8 dx/da=10 5 и будет еще больше с ростом x. Поэтому внесение в коэффициент a возмущения 10 -7 должно в обязательном порядке заметно сказаться на значениях некоторых корней, каким бы методом они ни находились. Более того, если эти необходимые изменения никак не проявились, метод следует забраковать.

11. Задайте полином p ( x )= x 3 — 3.55 x 2 + 5.1 x — 3.1 и найдите графически его единственный вещественный корень. Сколько знаков вам удастся получить, уменьшая интервал около корня?

Тема 7. Итерации

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

x k+1 =F(x k ), k=0, 1, 2, . , x 0 задано,

где F – заданное преобразование y=F(x), x 0 – как-то выбранное начальное приближение, x k – значение переменной x на k-й итерации, а сама переменная x может быть любой – числом, вектором или матрицей. Предел итераций, если он существует, будем обозначать через X , и тогда уравнение

должно обязательно выполняться для итерационного преобразования F. Это обстоятельство помогает выбирать различные варианты для F. Все решения X этого уравнения называются неподвижными точками преобразования F(x). Все такие x 0 , для которых последовательность x k сходится, образуют область сходимости итерационного преобразования F. Cкорость сходимости итераций x k характеризуется поведением числовой последовательности

v k =norm(x k+1 -x k )/norm(x k -x k-1 ) ,

где норма может выбираться по-разному. Для сходимости x k уже не обязательно, чтобы существовал предел V последовательности v k , но очень часто для сходящихся итераций он существует, и если это так, то пусть a=abs( V ). Тогда при a=1 сходимость x k будет крайне медленной, при 0V , а при a=0 последовательность x k будет сходиться быстрее любой геометрической прогрессии. Покажем теперь на простейших примерах, как все это выглядит на деле. Чтобы иметь возможность разнообразия вариантов, задачу возьмем нелинейной. Рвссмотрим уравнение

(x-2)(x-3)=0 или f(x) º x 2 -5x+6=0 c корнями x 1 =2, x 2 =3 , (2)

построим для нахождения его решений x 1 =2, x 2 =3 несколько итерационных преобразований или схем F и проанализируем их работу.

1.Пусть для уравнения (2)

x=F(x), где y=F(x)=(x 2 +6)/5 .

Обязательное условие (1) для преобразования F выполнено, однако при этом переходе появилось дополнительное решение x=inf ( µ ). Потеря некоторых или приобретение новых решений часто случается при переходе от исходного уравнения к его итерационной форме. Переходя к нужной нам индексной записи, будем иметь

x ( k +1)= F ( x ( k )), k =1: n ,

где начальное приближение x(1) и число итераций n должны быть заданы. Будем накапливать значения x(k) в переменной x, а текущее значение x(k) обозначим через xt. Нужные вычисления реализует строка

1; xt =0; n =100; x = xt ; TF ='( xt ^2+6)/5′; for k =1: n , xt = eval ( TF ); x =[ x , xt ]; end , plot ( x ), grid

Здесь записаны текстовая переменная TF и команда eval (она интерпретирует TF как выражение xt^2+6)/5 и выполняет его). После выполнения строки 1 на графике отобразится 101 значение x(k), включая начальное приближение. Итерации сошлись к px=2. Строка

2; xt =0; n =100; x = xt ; TF =’ xt =( xt ^2+6)/5;’; for k =1: n , eval ( TF ), x =[ x , xt ]; end , plot ( x ), grid

произведет те же вычисления, но обратите внимание на то, как в ней записаны TF и eval.

Хотя внешне сходимость x(k) к x 1 =2 не вызывает сомнений, это в действительности всегда нужно проверять более тщательно. Так как y’=F'(x)=2x/5, то F'(2)=0.8 1, но итерации, как известно, могут сойтись только к такой неподвижной точке X преобразования F, для которой |F'( X )| £ 1. Отсюда ясно, почему X =2. Однако далеко не всегда можно найти F'(x) аналитически, и поэтому в общем случае приходится использовать вычислительный подход. При известных уже x(k) его реализует строка

3; w =2: n ; v =( x ( w +1)- x ( w ))./( x ( w )- x ( w -1)); plot ( v ), grid

Из графика видно, что v(k) действительно сходятся к a =0.8, как и должно быть согласно теории, которая здесь выглядит очевидной.

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

(a) xt=1.5, 1.9, 1.99, 1.9999. При последних двух значениях xt на графике из строки 3 появятся осцилляции справа, так как здесь разности x(k+1)-x(k) и тем самым значения v(k) теряют точность: x(k) уже сошлись со многими знаками.

(a’) xt=2 . График из строки 2 вообще пуст, потому что тогда все v(k)=0/0=NaN.

(b) xt=2.01, 2.5, 2.9, 2.99, 2.9999. В последнем случае x(k) вначале довольно долго (до k=20) задерживаются в районе неподвижной точки x 2 =3 (они все время уходят от нее, но на графике этого не видно), а затем примерно за 60 итераций монотонно движутся к x 1 =2.

(b’) xt=3 . Все x(k)=3, а график из строки 3 пуст. Это произошло потому, что при xt=3 F(xt)=15/5=3 получается без ошибок округления.

(b») xt=3.01 . Пределами для x(k) и v(k) будет inf, так что x 2 =3 является неустойчивой неподвижной точкой преобразования F: при малейшем сдвиге x 0 с x 2 в пределе итераций получится либо устойчивая неподвижная точка x 1 , либо inf – приобретенная неподвижная точка. Проварьируем этот сдвиг:

(с) xt=3+1e-15, 3+1e-14, 3+1e-8 . В 1-м варианте ухода xt не происходит, во 2-м тенденция ухода уже зародилась и он неизбежно произойдет с увеличением числа итераций, в 3-м уход проявился в полной мере уже на 100 итерациях.

(с’) xt=-2.5, -2.9, -2.99, -3, -3.01, -100, 100 . При xt=-3 снова получим x 2 за одну итерацию, а при xt= -3.01 и далее получим inf. Таким образом, при вещественном x 0 итерации сходятся к устойчивой неподвижной точке x 1 =2 при -3 0 0 |>3. Просчитаем тот случай, когда |x 0 |=3. Этот расчет выполняется строкой (редактируем строку 1)

4;n=100; fi=-pi:pi/20:pi; xt=3*exp(i*fi); TF='(xt.^2+6)/5′; for k=1:n,xt=eval(TF);end, plot(xt,’.’)

На графике (он комплекснозначный) видны 4 точки: точка z=3, точки z=3 ± s *i с малым s >0 и точка z=2. Чтобы разобраться в результате, выполним строку 4 с n=1000 и, сделав окно MATLAB’а полным, выдадим

Образы первой и последней точки начальной окружности слегка отличаются от z=2, а ее 21-я точка (она соответствует fi=0) есть z=3. Это получилось потому, что sin(pi) и sin(-pi) не равны нулю в точности. Снова сделаем окно MATLAB’а небольшим и выполним строку 4 с радиусом 3.01, а затем строки

и получим, что точки первоначальной xt с номерами 1, 21, 41 обращаются в inf (здесь nan=inf/inf). Для радиуса 5 их будет 21, для радиуса 5.6 их будет 41, т.е. все.

Границу области сходимости обычно трудно исследовать аналитически, даже в таком простом примере, как этот, и сама она не определяется из условия |F'(x)|=1 или |x|=2.5. Условие |F'( X )| X преобразования F(x), условие |F'( X )|>1 является достаточным для ее неустойчивости, а в случае |F'( X )|=1 она может быть как устойчивой, так и неустойчивой. Неустойчивые неподвижные точки сравнительно редки в вычислительных задачах, но их полезно иметь в виду при исследовании численных алгоритмов. В нашем случае мы установили только, что множество |x| £ 3 принадлежит области сходимости итераций F, но вовсе не описали границу этой области. Мы установили также, что при |x| ³ 5.6 итерации сходятся к inf , и поэтому inf является устойчивой неподвижной точкой F. Чтобы получить представление о границе области сходимости, выполним строки

8;r=3:.1:5.6; z=[];n=100; for kr=r,xt=kr*exp(i*fi); for k=1:n,xt=eval(TF); end,z=[z;xt]; end

9;zn=isnan(z); Z=r’*exp(i*fi); plot(Z(zn)), axis equal

и увидим приближенный график границы – это вовсе не окружность. Комагнда axis e qual выбирает по осям одинаковый масштаб (это действует только на текущий plot; у команды axis много других опций). Чтобы построить границу аккуратнее, выполним строку 4 с шагом по fi , равным pi /180, затем строку 8 с r =3:.02:5.6 и строку 9. Получим график границы, выполнив строки

10; zn = isnan ([ z ; z ( end ,:)]); zn = diff ( zn )

=0; plot ( Z ( zn )), hold on

11;y=3*exp(i*fi); plot(y,’m’), axis equal, hold off

и увидим отличие области сходимости от круга | z | £ 3.

Найдем те точки, которые перейдут в z =3 на первых 10 итерациях. Для этого придется рассмотреть обратное к F преобразование x = ± (5 y -6)^.5 и сделать с ним 10 итераций, задав начальное значение y =3. Строка

12;n=10; yt=3; for k=1:n,yt=(5*yt-6).^.5; yt=[yt,-yt];end, plot(yt,’.’)

показывает, что при этом получится практически та же линия, что и в строке 10. Удивительно, что это верно и для других точек z из области сходимости преобразования F , но с некоторыми вкраплениями внутрь области сходимости. Брать n большим нельзя, так как в конце длина вектора yt равна 2 n .

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

2.Теперь представим (2) в виде

x=F(x), где y=F(x)=5-6/x, так что F'(x)=6/x 2 , F'(3)=2/3 2.45 .

Следовательно, устойчивая неподвижная точка – это x 0 =3. Получим резултат сразу для «всех» вещественных x 0 =xt:

1;n=100; xt=-5:.5:5; x=xt; TF=’5-6./xt’; for k=1:n,xt=eval(TF);end, plot(x,xt,’.’)

Все пределы равны 3, выпадает только неустойчивая точка xt=2, для которой итерации опять идут без ошибок округления. Возникает предположение, что вся комплексная плоскость с выколотой точкой x 1 =2 стягивается итерациями в точку x 2 =3, хотя не везде |F'(x)|

2; n =4; fi =- pi : pi /20: pi ; xt =4* exp ( i * fi ); TF =’5-6./ xt ‘; z = xt ;

3;for k=1:n, xt=eval(TF); z=[z;xt];end, plot(z’,’.’), axis equal

Начальное приближение (окружность радиуса 4 с центром в нуле) итерируется 4 раза и все результаты выдаются на график. Окружности (на графике их 5) довольно быстро стягиваются в точку x 2 =3. Применим zoom, чтобы посмотреть малые окружности.

Сделаем разрезы на начальной окружности:

4;n=4; fi=-pi:pi/20:pi*.75; fi(end-4)=[]; xt=4*exp(i*fi); TF=’5-6./xt’; z=xt;

и снова выполним строку 3. Мы увидим, что 1-я итерация меняет направление обхода окружности на противоположное, остальные – нет. Выполним строку 4 с n=20 и затем строку 3. С помощью zoom дойдем до самой малой окружности (она белого цвета) и убедимся, что она лежит правее точки z=3 примерно в полосе от 3.0001 до 3.0004.

Потерь и приобретений других неподвижных точек здесь нет.

13. Считая итерации сошедшимися, запишем (2) в виде x(k+1)*x(k)-5*x(k+1)+6=0, откуда

x(k+1)= -6/(x(k)-5) или y=F(x), где F(x)= -6/(x-5), так что y'(x)=F'(x)=6/(x-5) 2 .

Поэтому x 1 =2 – устойчивая неподвижная точка, в которую итерациями стягивается вся комплексная плоскость с выколотой неустойчивой неподвижной точкой x 2 =3. Других неподвижных точек F не имеет и снова не везде |F'(x)|

3. Решим нашу задачу методом Ньютона. Если x» удовлетворяет уравнению f(x»)=0, а x’ находится вблизи x» и используется для приближенной аппроксимации f(x»), то

0=f(x»)=f (x’)+f'(x’)(x»-x’) или x»=x’-f(x’)/f'(x’) при условии, что f'(x») ¹ 0 и тем самым f'(x’) ¹ 0.

Это и есть итерации по Ньютону для уравнения f(x)=0. При переходе к индексной форме записи для f(x)=x 2 -5x+6 и f'(x)=2x-5 из (2) получим

Так как f'(x 1,2 ) ¹ 0, можно использовать эти итерации по Ньютону (часто их называют методом касательной), а поскольку F'(x 1,2 )=0, следует ожидать их быстрой сходимости и того, что теперь оба решения x 1,2 будут устойчивыми неподвижными точками итерационного преобразования F. Неподвижной точкой будет и inf, но она «не наша», и природа ее, как мы увидим ниже, гораздо сложнее.

Выделим TF в отдельную строку и проведем наши стандартные вычисления

2;xt=0; n=100; x=xt; for k=1:n,xt=eval(TF); x=[x,xt];end, plot(x), grid

Предел итераций при x 0 =0 равен 2, а сходимость имеет порядок выше первого, поскольку v(k) до потери ими точности успели подойти к нулю. Чтобы определить порядок сходимости, отредактируем строку 2 на предмет оценки квадратичной сходимости:

Теперь до потери точности v(k) успевают подойти к 1 (у v(7) точность уже потеряна), так что сходимость итераций здесь квадратичная. Напомним, что точность теряется у v(k), но не у x(k). Чтобы увидеть потерю точности у v(k), выполним строку 4, выдавая в plot 7 точек.

При x 0 =4 предел итераций равен 3, а v(k) успевают подойти к -1 (у v(6) точность уже потеряна). Таким образом, в зависимости от начального приближения x 0 =xt итерации могут сходиться к обоим решениям задачи.

Так как теперь преобразование y=F(x) уже не является дробно-линейным, рассмотрим трансформацию комплексной прямоугольной области в процессе итераций. Создадим такую область xt из 41 2 =1681 комплексных точек и проитерируем ее (при этом в командном окне будет много сообщений о делении на нуль):

5;x=-10:.5:10; [X,Y]=meshgrid(x); xt=X+i*Y; n=100; for k=1:n,xt=eval(TF);end, plot(xt,’.’)

На графике будут оба решения задачи и некоторое множество точек на прямой Re(z)=2.5. Сделаем только 10 итераций и вставим выдачу графика на каждой итерации:

6;x=-10:.5:10; [X,Y]=meshgrid(x); xt=X+i*Y;n=10; for k=1:n,xt=eval(TF); plot(xt,’.’), pause(0), end

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

Полуплоскость Re(z) 1 =2, а полуплоскость Re(z)>2.5 — в точку x 2 =3: прямая Re(z)=2.5 переходит сама в себя. Точка x 1 =2 имеет красный цвет потому, что в нее перешли первые 25 столбцов матрицы xt, а остаток rem(25,7)=4, но 4-й цвет – красный. Далее идут зеленые точки (26-й столбец) и синяя x 2 =3, поскольку rem(41,7)=6 и 6-й цвет – синий. Но всегда лучше проверить такие выводы численно: найдем

7; z = xt (:); [ sum ( abs ( z -2) sum ( abs ( z -3) sum ( abs ( real ( z )-2.5)

(=1025=41*25), (=615=41*15), (=38 на 3 ) .

Так как потерь в матрице-таблице xt MATLAB не допускает, выясним, во что перешли эти 3 точки — в inf или NaN:

8;z=xt( :,26); [sum(isinf(z)), sum(isnan(z)) ]

Индексы этих трех точек из 26-го столбца находятся командой

и это есть точки

z 1 =2.5-0.5 i , z 2 =2.5, z 3 =2.5+0.5 i .

Теперь разберемся, как преобразуется итерациями F прямая Re(z)=2.5. Так как прямая Re(z)=2.5 переходит в себя, ее можно параметризовать с помощью переменной y=Im(z), и пусть y k =Im(F k (Re(z)=2.5), k=1, 2. , т.е. после k итераций y переходит в y k (y). Ясно, что на k-й итерации в inf перейдут только те точки из всего множества y k-1 , которые равны нулю. Поскольку -inf 1 =2.5 (для нее y=0). Выдадим на график y 1 после 1-й итерации:

10; xt =2.5+(-10:.1:10)’* i ; y = imag ( xt ); n =1; for k =1: n , xt = eval ( TF ); end , plot ( y , imag ( xt )), grid

и увидим, что функция y 1 (y) пересекает ось абсцисс только два раза (при этом y 1 дважды непрерывно пробегает от -inf до inf), так что на 2-й итерации в inf перейдут только две точки (это уже известные нам z 1 =2.5-0.5i, и z 3 =2.5+0.5i). Выполним строку 10 с n=2 и снимем с графика строкой

11; q = ginput ; q (:,1)’

четыре точки пересечения кривой y 2 (y) с осью абсцисс: приближенно это -1.2079 -0.2056 0.2055 1.2079, тогда как для y 1 (y) это были значения -0.5 и 0.5. Каждая переходящая в inf на k-й итерации точка порождает слева и справа от себя две такие точки, которые перейдут в inf на (k+1)-й итерации. Поэтому с ростом k точки y k (y)=0, с одной стороны, уходят в обе стороны от нуля, а с другой — все чаще появляются в тех местах, где они однажды уже появились. Всего на k-й итерации в inf перейдет 2 k-1 точек. В действительности с ростом k они всюду плотно заполняют прямую Re(z)=2.5, а между ними y k (y) непрерывно пробегает все значения от -inf до inf. Чтобы быть в этом уверенными, выполним последнюю программу

12; hy =1.0033 e -4; xt =2.5+(-1: hy :1)’* i ; w =2: length ( xt ); n =100; for k =1: n , xt = eval ( TF ); end

которая зафиксирует 674 перемены знака (pzn) у функции y 100 (y) для -1 £ y £ 1 с hy=1.0033e-4 (из-за недостаточной малости hy далеко не все они учтены). Для -10 £ y £ -8 с hy=1.0033e-4 pzn=675. Для симметричного относительно точки y=0 отрезка 8 £ y £ 10 с тем же hy получим pzn=702. Ошибки при последовательном вычислении F k (z) на прямой Re(z)=2.5 будут ничтожными, так что значения y k (y) вычисляются с высокой точностью, но от шага hy число найденных перемен знака в y k (y), конечно, зависит: при k=100 число всех нулей функции y k (y) равно 2 100-1 =6.3383e29.

Сделаем краткое резюме относительно неподвижной точки inf преобразования F. Ее следует рассматривать как неустойчивую, поскольку любая ее окрестность с разрезом Re(z)=2.5 в комплексной плоскости с ростом k «уходит» от нее, а из этого разреза все больше точек попадает в нее, и эти ее дискретные прообразы все плотнее (в пределе всюду плотно) заполняют этот разрез, но все их множество, поскольку оно счетно, имеет меру нуль. Отсюда следует, что на прямой Re(z)=2.5 почти всюду не существует теоретического предела итераций. Из-за ошибок округления, хотя они и малы, прообразы inf почти никогда не попадают в inf при вычислениях и потому ведут себя так же (т.е. хаотически), как и не прообразы.

Заметим теперь, что порядок действий в F можно переставить:

F(x)=x/2+1.25+0.25/(2x-5) и F(x)=(x 2 -6)/(2x-5)

– это две другие математически эквивалентные записи F. Выполним строку 14; TF =’ xt /2+1.25+.25./(2* xt -5)’;

а затем строки 5 и 7 и получим тот же результат, что и выше. Но строка

15;TF='(xt.^2-6)./(2*xt-5)’; и строки 5, 8 дадут только устойчивые неподвижные точки преобразования F и, как и раньше, три точки NaN, так что с такой TF мы не увидели бы рассмотренной выше картины. Выполним строку 6 с n =100 и увидим, как все происходит до конца. Пример 3 показывает, что, пользуясь довольно простыми командами MATLAB’а и руководствуясь здравым смыслом, можно проанализировать достаточно тонкие математические детали задачи.

Тема 8. Системы линейных алгебраических уравнений

В MATLAB’e имеется несколько команд для решения таких задач. Рассмотрим здесь наиболее употребительную из них – оператор \ (обратный слэш или деление слева). Для чисел a\b=a -1 b в отличие от того, что a/b=ab -1 . Для невырожденной квадратной матрицы A и вектора-столбца f вектор-стобец u=A\f есть решение системы линейных уравнений Au=f, т.е. в записи по аналогии с числами u=A -1 f, но матрица A -1 в действительности не вычисляется, а система Au=f решается методом исключения Гаусса (это значительно дешевле), с которым каждый из нас как-то знаком еще со школы. Правая часть f может быть и матрицей, и тогда каждый столбец матрицы u=A\f есть решение системы для соответствующего столбца из f, т.е. командой A\f можно сразу решить много систем, и поступать так всегда выгодно, ибо тогда матрица A будет разлагаться на множители по методу Гаусса только один раз. Если матрица A не квадратная, вектор u=A\f есть решение системы Au=f в смысле метода наименьших квадратов, но мы не будем здесь разбирать этот вариант оператора \ , поскольку не должны сколько-нибудь заметно вдаваться в детали численных методов. Таким образом, оператор \ – одна из самых мощных команд системы. А поскольку решение систем Au=f с квадратными матрицами – наиболее часто встречающаяся в вычислительной практике задача, необходимо иметь представление хотя бы об одном из методов ее реализации.

1.Решим и проанализируем на точность систему Au=f, выполнив следующую строку:

1;x=1:.1:5; m=length(x); A=toeplitz(exp(x)); ut=sin(x)’; f=A*ut; u=A\f;

Здесь задается вектор-строка x=1:.1:5 из 41 элемента, затем по вектору exp(x) командой toeplitz вычисляется квадратная матрица A размеров 41*41, далее в виде вектора-столбца задается точное решение ut, по нему строится правая часть f и, наконец, находится численное решение системы Au=f. Выясним вид A, построив графики

2;mesh(A) plot(A(1, : )) plot(A(20, : )) plot(A(41, : ))

Теперь выполним команды

3;plot(ut) plot(f) plot([ut,u])

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

4; plot ([ u / max ( abs ( u )), f / max ( abs ( f ))])

позволяет изобразить динамику изменения кривых u и f относительно друг друга.

2.Команда det вычисляет определитель. Найдем

1; max ( abs ( u — ut )) (=9.7167 e -13) det ( A ) (=4.1058 e -9)

откуда видно, что u и ut совпадают примерно в 12 знаках, хотя определитель det(A) системы на первый взгляд очень мал. Тем не менее попробуем решить нашу систему по правилу Крамера, обозначив такое решение через uc:

2;d=det(A); uc=zeros(m,1); for k=1:m,uc(k)=det([A(:,1:k-1),f,A(:,k+1:m)])/d; end, plot([ut,uc])

Здесь при k=1 A(:,1:k-1)=[], а при k=m A(:,k+1:m), поскольку 1:0=[] и m+1:m=[], так что все матрицы C k =[A(:,1:k-1),f,A(:,k+1:m)], k=1:m, сформированы правильно. Из графика видно, что так найденное uc снова совпадает с точным решением ut. Теперь

3; max ( abs ( uc — ut )) (=9.6934 e -13)

т.е.погрешность практически не изменилась. Длительное время считали, что при малых d систему решать численно нельзя.

3.В действительности трудности численного решения системы связаны с возможной близостью к нулю собственных значений матрицы A, которые определяются как все решения l 1 , . l m характеристического уравнения det(A- l E)=0, где E=eye(m) – единичная (с нулями вне главной диагонали) матрица порядка m. За последние 10 лет были созданы достаточно хорошие программы для нахождения собственных значений. В MATLAB’е это делает команда eig, которую мы и применим сейчас:

1;sp=eig(A); plot(sp), [y,yi]=min(abs(sp)), [z,zi]=max(abs(sp)), c=z/y

Из графика видно, что все собственные значения вещественны (по оси абсцисс отложены значения индекса) и никак не упорядочены. Ближе всего к нулю (=0.136) третье из чисел l k , дальше всего (=898) – 41-е, а модуль их отношения c(A) º c=6.6040e+3 называется числом обусловленности (condition number) матрицы A и отражает гораздо более глубокие ее свойства, чем величина ее определителя (которая по существу вообще ничего не отражает ни в практическом, ни в теоретическом плане). При обращении [V,D]=eig(A) в диагональной матрице D расположены l k (раньше они были в векторе-столбце sp), а в матрице V в виде столбцов – соответствующие им собственные векторы v k с единичной среднеквадратичной нормой

sum ( v k 2 )) 1/2 =1, k =1: m .

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

2;ssp=sort(sp); v=1:m-1; di=diff(ssp); min(abs([di./ssp(v);di./ssp(v+1)]))

(нормировка разностей делается на каждый член пары) и получим 0.0044, т.е. есть такая пара, у которой совпадает более двух знаков, так что наш пример в спектральном плане не совсем тривиальный. Теперь сделаем матрицу A вырожденной путем дублирования ее строк и посмотрим, как это отразится на результатах eig:

3;r=zeros(1,m-1); for k=1:m-1, v=[1:k,k,k+2:m]; C=A(v,:); r(k)=min(abs(eig(C))); end, plot(r)

Результаты следует признать неплохими – max(r)=1e-13 и есть даже несколько чистых нулей.

Чтобы получить представление о собственных векторах преобразования A, выполним строку

и получим mcv=7.5460e-16. Это означает, что собственные векторы с высокой степенью точности ортогональны, как и должно быть для симметричной матрицы A.

4.Теоретическая оценка погрешности при решении линейных систем. Объясним смысл числа обусловленности c(A), который имеет фундаментальное значение для вычислительных методов линейной алгебры. Пусть

A*u=f ¹ 0, A*du=df ¹ 0, re(f)=max(abs(df))/max(abs(f)) .

Тогда u ¹ 0 и du ¹ 0 ввиду невырожденности A. Будем рассматривать df как ошибку в f (ввиду линейности задачи это не приводит к потере общности – считать вектор df малым не нужно). Оценим величину

re(u)=max(abs(du))/max(abs(u)) для всех допустимых f и df,

т.е. возникающую при решении нашей системы относительную ошибку, которая является весьма общей характеристикой матрицы A. Если y, z и c – числа, определенные в строке

1;sp=eig(A); plot(sp), [y,yi]=min(abs(sp)), [z,zi]=max(abs(sp)), c=z/y

(это строка 1 из предыдущего примера), то

max(abs(du)) £ z -1 max(abs(df)),

поскольку du=A -1 u и z -1 – максимальное по модулю собственное значение для A -1 , причем равенство для max(abs(du)) теоретически возможно. Аналогично

max(abs(u)) ³ y -1 max(abs(f)),

поскольку y -1 — минимальное по модулю собственное значение для A -1 , и знак равенства здесь также возможен. Объединяя оценки для числителя и знаменателя re(u), будем иметь

re(u) £ z -1 /y -1 (max(abs(df))/max(abs(f))) или re(u) £ (y/z) re(f), т.е. re(u) £ c*re(f),

причем равенство обязательно достигается хотя бы для одной пары f и df. Другими словами, число обусловленности c(A) есть точная верхняя граница роста относительной ошибки при решении нашей системы : если относительная ошибка правой части равна re(f), то относительная ошибка решения re(u) не превзойдет ее более чем в c(A) раз.

Ввиду важности этого результата полезно понимать его и на пальцах: df переходит в du с возрастанием компонент не более чем в z -1 раз, а f переходит в u с уменьшением компонент не более чем в y -1 раз, так что

re ( u ) £ ( z -1 / y -1 ) re ( f ).

Мы установили смысл числа c(A), исходя из максимум-нормы векторов f, когда norm(f)=max(abs(f)), но более точное рассмотрение показывает, что это верно и для среднеквадратичной нормы

Команда cond(A) вычисляет значение c(A) для квадратной невырожденной матрицы A, но в cond спектр sp ищется не для A, а для B=A’A, ибо тогда вся спектральная задача для B становится заведомо вещественной и, более того, все ее собственные векторы взаимно ортогональны (последнее обстоятельство существенно уменьшает среднеквадратичную ошибку при этих сложных вычислениях). Для получения наших y и z нужно лишь извлечь квадратный корень из y(B) и z(B) – это также делается в команде cond(A). Для нашего примера c(A)=

2; cond ( A ) (=6.6040 e +3)

и совпадает со значением c из строки 1, поскольку A — симметричная матрица.

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

5.Практическая оценка погрешности. Число обусловленности может быть не всегда подходящим для оценки погрешности. Это так при большом n – тогда решение спектральной задачи в команде cond будет слишком дорогим. Это так и в том случае, когда ошибка df специфически неравномерна и имеет характерный профиль – тогда желательно иметь и профиль для поточечных ошибок du(k), чего, конечно, никак не может дать cond(A). В таких случаях приходится прибегать к непосредственному моделированию ошибок, которое состоит в задании некоторого множества случайных возмущений правой части и решении всех таких систем с последующим поточечным описанием границ получившихся решений. Проиллюстрируем этот способ оценки ошибки на нашем примере.

Восстановим этот пример:

1;hx=.1; x=1:hx:5; m=length(x); A=toeplitz(exp(x)); ut=sin(x)’; f=A*ut; u=A\f;

(здесь введен шаг hx). Пусть ошибка

df(x) в f(x) есть равномерно распределенная случайная величина,

по модулю не превосходящая значения g(x)=1e-4* ò f(t)dt в пределах от 1 до x.

2;g=1e-4*hx*abs(cumsum(f)); rand(‘state’,0); n=30; V=(1:m)’*ones(1,n); plot([f/max(abs(f)),g/max(g)]), grid

задается профиль g=g(x) максимально допустимой ошибки в точке x, приводится в исходное состояние счетчик случайных чисел rand, задается число n=30 возмущений правой части f и матрица V размеров m*n из продублированного n раз столбца (1:m)’. График показывает, что самые большие ошибки там, где abs(f) мало. В строке

3;F=f(V)+g(V).*(2*rand(m,n)-1); U=A\F;plot(U), pause, plot([g(V).*(2*rand(m,n)-1),g])

создается матрица F возмущенных правых частей из m строк и n столбцов путем прибавления к размноженному n раз вектору f возмущений в нужных границах, решаются все системы AU=F и выводятся на график все решения U и все возмущения вместе с их границей. Из последнего графика видно, что возмущения заданы правильно. В строке

4; ua = max ( U ,[],2); ui = min ( U ,[],2); plot ([ ui , ut , ua ])

путем обработки U вдоль строк находятся поточечные границы решений (ua – верхняя, ui – нижняя) и строится график точного решения и этих границ.

Результат кажется нам плохим потому, что на графике

возмущений просто не видно (масштаб f забил их), а в U они отразились слишком сильно. Но формально он не противоречит оценке, связанной с числом обусловленности c(A). Действительно, без учета профиля df максимальная ошибка me вычисляется как

6; sp = eig ( A ); me = min ( abs ( sp ))^(-1)* max ( g )

и равна 0.6064, тогда как

7; max ([ ua — ut ; ut — ui ]) (=0.5180)

и лишь немного подрастет с увеличением n (при n=100 это 0.5540), т.е. не превзойдет значения me, что и свидетельствует о формальной согласованности обоих методов оценки погрешности. Чтобы окончательно избавиться от ощущения какой-то несогласованности наших методов, применим критерий cond(A) для среднеквадратичной нормы. Для этогог нам нужно пройтись по всем столбцам k=1:n (сейчас n=30) матриц U и F и вычислить

max( (norm(du)/norm(u)) / (norm(df)/norm(f)) ) .

Запишем это в виде (максимально используйте карман при наборе строк)

и получим 3.6484e+3, что меньше c(A)=6.6040e+3, так что и здесь мы не обнаружили противоречия.

Если подойти к оценке погрешности упрощенно, построив график

то все три линии на нем практически совпадут. Таким способом можно моделировать ошибку, если преобразование A -1 монотонно, т.е. если при f 1 2 обязательно u 1 2 или, наоборот, обязательно u 1 >u 2 . Но у нас это не так: на графике (эта строка получается из строки 9)

желтая линия (она соответствует решению для правой части f-gm -1 получается такой заметный разброс в U. С помощью этого приема можно быстро выяснить монотонность преобразования y=Q(x) (не обязательно линейного), что далеко не всегда удается определить теоретически: если все отклики Y=Q(X), x-a 0, лежат между Q(x-a) и Q(x+a), то преобразование Q монотонно, и нужно лишь взять значение a таким, чтобы результат был виден на графике (для этого нам пришлось увеличить max(g) в 100 раз).

6.Посмотрим, как изменятся результаты нашего примера при увеличении m — порядка матрицы A. Выполним, не меняя смысла задачи, отредактированную строку 1 предыдущего примера

1;clear all, hx=.01; x=1:hx:5; A=toeplitz(exp(x)); ut=sin(x)’; f=A*ut;u=A\f; plot([ut,u]), c=cond(A)

Здесь шаг hx уменьшен в 10 раз, так что теперь порядок m=401 – довольно высокий; c(A)= 6.0804e5 возросло почти в 100 раз, т.е. обусловленность A заметно ухудшилась (примерно в 10 2 раз), но

еще достаточно мал, хотя и возрос примерно в 10 3 раз, т.е. больше, чем c(A). Такое расхождение с теорией как бы предупреждает о том, что даже при сохранении смысла задачи увеличение ее размерности не позволяет автоматически применять критерий числа обусловленности к оценке ошибок округления. К выбору числа m нужно всегда относиться с повышенным вниманием.

Чтобы получить представление о собственных векторах преобразования A, выполним строку

3;[V,D]=eig(A); D=V’*V; m=length(x); D(1:m+1:m^2)=0; mcv=max(abs(D(:)))

и получим mcv=2.2985e-15, т.е. степень ортогональности остается удивительно высокой. Жордановы клетки порядка выше первого могут быть тогда, когда mcv(A)>0.99.

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

1. Using MATLAB. Version 5.2. The Mathworks, Inc., 1997. 531 p. MATLAB 5.2 Product Family New Features. Version 5.2. The Mathworks, Inc., 1998. 202 p.

2. Using MATLAB Graphics. Version5.2. The Mathworks, Inc., 1997. 372 p.

3. MATLAB Functions Reference (Volumes 1 and 2 ). Version 5. The Mathworks, Inc., 1998. 819 p., 586 p.

4. Дьяконов В.П. Справочник по применению системы PC MatLab. М., Физматлит, 1993 112 с.

5. Потемкин В.Г. Система MATLAB. Справочное пособие. М., «Диалог-МИФИ», 1997. 350 с.

6. Гультяев А. MATLAB 5.2. Имитационное моделирование в среде Windows . СПб, «Коронс-принт», 1999, 288 с.

7. Дьяконов В.П., Абраменкова К.В. MATLAB 5. Система символьной математики. М., Нолидж, 1999, 633 с.

8. Лазарев Ю.Ф. MATLAB 5.х. Киев, Изд. группа BHV , 2000, 384 с. («Б-ка студента»).

9. Медведев В . С ., Потёмкин В . Г . Control System Toolbox. MATLAB 5 для студентов. М., «Диалог-МИФИ», 1997, 287 с.

10. Потёмкин, В.Г. Введение в MATLAB . М., «Диалог-МИФИ», 2000, 350 с.

11. Потёмкин, В.Г. Система инженерных расчетов MATLAB 5.х. В 2-х томах. М., «Диалог-МИФИ», 1999, 366 с., 304 с.

12. Рудаков П.И., Сафонов В.И. Обработка сигналов и изображений. MATLAB 5 x . М., Диалог-МИФИ», 2000, 413 с. («Пакеты прикладных программ»).

Лучшие платформы для бинарных опционов, дающие бонусы за регистрацию счета:
  • БИНАРИУМ
    БИНАРИУМ

    Лидер среди всех брокеров бинарных опционов! Бесплатное обучение и демо-счет! Идеально для начинающих и средне-опытных трейдеров.
    Получите свой бонус за регистрацию:

Добавить комментарий