С.Н. БОЗИЕВ
MATLAB 2006a в примерах
Москва 2006
УДК 519.2 + 622.276.031:53(075.8) Бозиев С.Н. MATLAB 2006a в примера...
359 downloads
535 Views
2MB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
С.Н. БОЗИЕВ
MATLAB 2006a в примерах
Москва 2006
УДК 519.2 + 622.276.031:53(075.8) Бозиев С.Н. MATLAB 2006a в примерах. РГУ нефти и газа им. И.М. Губкина, 2006 – 150 с. Книга основана на примерах, рассматриваемых в рамках версии MATLAB 2006a. Она написана в режиме M-книги. Рекомендуется учащимся и работникам высших технических учебных заведений.
Рецензенты: В.Б. Нагаев, к.ф.-м.н., профессор, заведующий кафедрой физики РГУ нефти и газа им. И.М. Губкина, действительный член РАЕН А.И. Ермолаев, д.т.н., профессор, заведующий кафедрой разработки газовых и газоконденсатных месторождений РГУ нефти и газа им. И.М. Губкина
© РГУ нефти и газа им. И.М. Губкина, 2006 © С.Н. Бозиев, 2006
СОДЕРЖАНИЕ
Введение…..……………………………………………………. ….. 5 Глава 1 1.1. Рабочее окно ……………………………………………………. 7 1.2. MATLAB как научный калькулятор ………………………….. 8 1.3. Использование переменных …………………………………... 10 1.4. Векторы ………………………………………………………… 11 1.5. Построение графиков …………………………………………. 16 1.6. Трехмерные графики ………………………………………….. 34 1.7. Расчет и построение графиков функций ……………………... 37 1.8. Воспроизведение и анализ распределений …………………... 43 1.9. Чтение и запись файлов ……………………………………….. 54 Литература к первой главе ……………………………………. 77 Глава 2 2.1. Проницаемость горных пород и ее распределение ………….. 79 2.2. Графическое представление данных и их характеристики ….. 82 2.3. Вычисление погрешности средней величины………….. 87 2.4. Распределение Стьюдента ……………………………………... 93 2.5. Вычисление погрешности дисперсии …………………………. 99 2.6. Вычисление статистических ошибок для отдельных ячеек гистограммы….…………………………………………………. 102 2.7. Аппроксимация данных по распределению коэффициента проницаемости логнормальным распределением …………..107 2.8. Сравнение с логнормальным распределением по критерию
χ 2 ………………………………………………………………...111 2.9. Критерий Колмогорова – Смирнова …………………………. 122
2 2.10. Сравнение с гамма-распределением по критерию χ …….. 125
2.11. Аппроксимация данных по распределению коэффициента проницаемости полиномом …………………………….……… 129 2.12. Интерполяция кубическим сплайном …………………..... 135 2.13. Метод Монте-Карло …………………………………………... 137 Приложение ………………………………………………………... 141 Биномиальное распределение ……………………………………..... 141 Распределение Пуассона …………………………………………..... 143 Нормальное распределение ………………………………………......145 Литература ко второй главе ……………………………………….... .149
Введение Система MATLAB
(Matrix Laboratory) является продуктом
американской фирмы MathWorks, и создается с 1970 г. Она состоит из большого количества специальных программ, позволяющих решать широкий спектр математических и технических задач из разных областей науки. Главный ее элемент – это ядро системы MATLAB. В дополнение к нему система содержит около 60-ти различных комплектов команд (т.н. "Toolboxes"), соответствующие различным разделам математики, математической физики, проектирования, связи, экономики и т.д. Система постоянно совершенствуется. Новая версия системы выходит примерно каждые год – полтора. Данное пособие выполнено в рамках версии MATLAB R2006a, которая вышла в свет весной 2006 г. Она укомплектованная пакетами Curve Fitting Toolbox, Optimization Toolbox, Partial Differential Equation Toolbox, Statistics Toolbox
и Symbolic Math Toolbox. В нем рассмотрены примеры
составления программ разного уровня сложности, и оно может служить пособием для практических занятий и дополнением к существующим руководствам для пользователей системы (см., например, [1-6]). MATLAB совместима с различными системами и текстовыми редакторами, в том числе, и с Microsoft Word. Он может быть запущен вместе с MATLAB с помощью приложения notebook. В результате
5
программные
файлы
(т.н.
m-файлы),
которые
выполняются
в
директории Work системы, могут быть перенесены в текстовый файл в редакторе Word и, запускаться непосредственно из него, т.е. работа производится в режиме создания т.н. M-книги.
Одним из удобств
работы в режиме M-книги является то, что результат выполнения программы вставляется в текст книги сразу после программы, что позволяет исключить недоразумения, связанные с опечатками в текстах программ. Книга состоит из двух глав. Она основана на семестровом курсе лекций для аспирантов технических факультетов РГУ нефти и газа им. И.М. Губкина. В первой главе приводятся примеры составления программ разного уровня сложности. Вторая
глава основана на
примерах статистического анализа конкретного распределения. Она может также послужить введением в теорию ошибок.
6
Глава 1 1. 1. Рабочее окно MATLAB запускается с помощью иконки
(matlab.exe). При
этом появляется рабочее окно системы.
Рис. 1.1. Рабочее окно системы MATLAB.
7
Строка меню (File, Edit, View и т.д.) во многом схожа с аналогичной строкой редактора Microsoft Word. Расположенный ниже ряд иконок также выполняют те же операции, что и в редакторе Word (за исключением 2-х последних). Поэтому, имея навыки работы в Word, достаточно просто ориентироваться в рабочем окне MATLAB. На рис.1.1
в верхнем окне слева приводится содержимое директория
Current Directory. А так все эти папки содержатся в каталоге Work системы. В нижнем окне приводится последовательность выполненных команд. Форму рабочего окна можно менять с помощью меню View. Размеры окон регулируются перетаскиванием границы с помощью мыши. В командном окне после знака ">>" набирается командная строка, которая выполняется после "Enter".
1.2. MATLAB как научный калькулятор MATLAB позволяет создавать программные файлы, аналогичные другим языкам программирования высокого уровня. Наряду с тем, он обладает
свойствами
мощного
программируемого
калькулятора.
Формат числа задается меню File (рис. 1.1) в разделе Preferences с помощью функции Numeric Format. Наиболее часто используемыми из 12-ти возможных являются форматы Short и Long – краткая и длинная форматы чисел. Основные арифметические операции выполняются с помощью традиционных знаков: "+", "-", "*", "/" (деление слева направо), "\" (деление
справа налево), "^" (возведение в степень). Вычисления
выполняются в командном окне после команды "Enter". Результат присваивается параметру "ans". 8
Пример 1.1 ⎛
Вычислим выражение ln ⎜⎜1 + 5 ⎝
lg 2 100 − 0,2π ⎞ ⎟ . Для этого в командном ⎟ 1 + e3 ⎠
окне набирается следующая программа: log(1+5*((log10(100))^2-0.2*pi)/sqrt(1+2.71828^3)) ans = 1.5414 Примечание:
Исходная формула и ответы заключены в прямые
скобки т.к. вычисление производилось в режиме "notebook", когда система Word интегрирована в
MATLAB, и процедуру вычисления
можно запустить прямо в тексте командой
"Evaluate Cell"
в
"Notebook" из строки меню. В режиме калькулятора MATLAB позволяет работать как с элементарными, так и с тригонометрическими функциями. Пример 1.2 Вычислим sin(π / 3) : sin(pi/3) ans = 0.8660 Пример 1.3 Изменим формат числа: format long sin(pi/3) ans = 0.86602540378444 Пример 1.4 Число π :
9
pi ans = 3.14159265358979
1.3. Использование переменных Пример 1.5 Вычислим массу жидкости с плотностью 800кг / м3 и объемом V = 0,01м3 как m = ρ ⋅ V :
format short rho=800 V=0.01 m=rho*V rho =
800 V =
0.0100
m = 8 Примечание: Видно, что в ответе значения плотности и дублируются.
Чтобы
объем
информация не дублировалась нужно
завершить строку символом ";". Т.к. в MATLAB символ ";" означает конец строки, то предыдущую программу можно записать в одну строчку: Пример 1.6 rho=800; V=0.01; m=rho*V m = 8 Количество переменных не ограничено, что позволяет считать более сложные формулы. Отметим, что для воспроизведения в командном
10
окне уже выполненных команд удобно воспользоваться клавишей "↑" ("NumPad 8"). Каждое ее нажатие воспроизводит строки в обратном порядке, и их можно редактировать. Последовательность выполненных программ также выводится в окне Command History на рис.1.1.
1.4. Векторы Компоненты вектора могут быть заданы как элементы матрицы, разделенные либо пробелом, либо запятым, и заключенные в квадратные скобки. Пример 1.7 Вектор скорости в декартовой системе координат имеет вид →
→
→
→
→
→
v = vx i + vy j + vz k . →
Пусть
заданы
2
→
→
v 2 = 4 i + 5 j + 6 k . Вычислим вектор
вектора
→
→
→
→
→
v1 = 2 i + 3 j + 4 k ,
→
u = v1+ v 2 .
v1=[2 3 4]; v2=[4 5 6 ]; u=v1+v2 u = 6
8
10 →
→
→
→
Мы получили вектор u = 6 i + 8 j + 10 k . Разность векторов вычисляется аналогично. Пример 1.8 →
→
Вычислим скалярное произведение c = v 1 ⋅ v 2 из предыдущего примера. v1*v2 ??? Error using ==> mtimes Inner matrix dimensions must agree.
Примечание: Команда не выполнена.
Система выдает ошибку о
несогласованности размерностей перемножаемых матриц, т.к. правилу умножения матриц
элементы строки первой
по
матрицы
11
умножаются
на
элементы
первого столбца
второй,
и
их
сумма присваивается первому элементу результирующей матрицы и т.д. Для выполнения этого правила нужно транспонировать вторую матрицу. Операция
транспонирования
выполняется с помощью
символа " ' ": v1*v2' ans = 47 Ответ очевиден: с = 2 ⋅ 4 + 3 ⋅ 5 + 4 ⋅ 6 = 47 . Пример 1.9 Вычислим модуль вектора скорости v1 из примера 1.7 по формуле →
→ →
| v |= v1 v 2 :
sqrt(v1*v1') ans = 5.3852 Аналогичный результат получается с помощью команды norm вычисления нормы вектора: norm(v1) ans = 5.3852 r Ответ легко проверить | v1 |= 2 2 + 3 2 + 4 2 = 29 ≈ 5,3852 . Матрицы можно также перемножать поэлементно. Пример 1.10 Вычислим результат поэлементного умножения, деления, сложения и вычитания матриц a и b. Точка после переменной является признаком поэлементного умножения. a=[1 2 3]; b=[2 2 3]; c=a.*b 12
d=a./b e=a-b f=a+b c = 2
4
9
d = 0.5000
1.0000
1.0000
e = -1
0
0
f = 3 4 Примечание: При
6 необходимости
можно
вывести
на
экран
переменные, которые уже заданы. Для этого используется команда "whos". Приводятся переменные, их размерности и занимаемый ими объем памяти: whos Name Class
Size
Bytes
V double a double ans double b double c double m double rho double u double
1x1
8
1x3
24
1x1
8
1x3
24
1x3
24
1x1
8
1x1
8
1x3
24
array array array array array array array array
13
v1 double array v2 double array xqxqxq1234 logical array xqxqxq1235 char array
1x3
24
1x3
24
1x1
1
1x3
6
Grand total is 26 elements using 183 bytes Количество
команд
и
операций,
выполняемых
в
режиме
калькулятора достаточно велико. Рассмотрим некоторые из них. Пример 1.11 Пусть известны округленные среднесуточные значения температуры воздуха в течение недели (в °С). Эти данные заданы в виде матрицы t. Определим минимальную температуру: t=[-1 0 2 3 -5 -7 -4]; min(t) ans = -7 Определим максимальную температуру: max(t) ans = 3 Определим среднюю температуру: mean(t) ans = -1.7143 Пример 1.12 Проверим
полученное
значение
средней
температуры,
воспользовавшись определением средней величины – отношение суммы элементов матрицы к их числу: 14
sum(t)/length(t) ans = -1.7143 Пример 1.13 Расположим элементы матрицы t по возрастанию или убыванию: sort(t) ans = -7
-5
-4
-1
0
2
3
-2
0
1
4
5
7
sort(-t) ans = -3
Рассмотрим пример матриц большего ранга. В MATLAB строки матрицы можно записать в стандартном виде строк и столбцов, или в одну длинную строку, разделив строки знаком ";". Пример 1.14 Найдем корни системы линейных алгебраических уравнений: 2 x1 + 3 x 2 + 4 x3 = 14 2 x1 − x 2 − 5 x3 = −15 x1 − 2 x 2 − 3 x3 = −4
a=[2 3 4; 2 -1 -5; 1 -2 -3]; b=[14; -15; -4]; x=a\b x = 3 -4 5 При вычислении корней применяется операция обратного деления. Можно проверить, что при вычислении по правилу Крамера ответ тот же. 15
1.5. Построение графиков Рассмотрим пример построения гистограмм. Только в данном случае удобнее работать не в режиме калькулятора, а создать программный файл, который называется в MATLAB m-файл. Новый m-файл создается по аналогии с редактором Word посредством первой иконки на панели инструментов рабочего окна системы (рис. 1.1). При этом открывается окно, в котором можно создавать и редактировать программу. Программа запускается иконкой Run или Run and Save. Пример 1.15 Предположим, что охранник фиксирует количество автомобилей, въезжающих во двор университета каждые 10 минут. В результате, за 2,5 часа он набрал статистику по 15-ти десятиминутным интервалам. Представим данные в виде строки матрицы [1 1 2 1 2 3 1 2 3 4 1 2 3 4 5] (через пробел). Построим распределение по числу машин в виде гистограммы.
Для
этого
воспользуемся
командой
hist.
Текст
программы имеет вид: cars=[1 1 2 1 2 3 1 2 3 4 1 2 3 4 5]; hist(cars,5), grid; xlabel('Number of cars'); ylabel('Number of intervals'); title('Cars in yard', 'FontSize',14);
16
Cars in yard
5 4.5 4
Number of intervals
3.5 3 2.5 2 1.5 1 0.5 0 0.5
1
1.5
2
2.5 3 Number of cars
3.5
4
4.5
5
Рис. 1.2. Распределение по числу машин в 15-ти десятиминутных интервалах. Примечание: Цифра 5 в команде
hist
задает количество
ячеек
гистограммы. Команда grid накладывает сетку на график. Последние 3
строки
программы
(xlabel,
ylabel,
title) подписывают
координатные оси и оглавление рисунка. В команде title задан размер шрифта. Аналогично задается размер xlabel
и ylabel.
шрифта
для
команд
Если английский текст заменить русским, то
надписи к рисунку читаться не будут: Пример 1.16 cars=[1 1 2 1 2 3 1 2 3 4 1 2 3 4 5]; hist(cars,5), grid xlabel('Число машин'); ylabel('Число интервалов'); title('Распределение по числу машин', 'FontSize',14);
17
Ðàñïðåäåëåíèå ïî ÷èñëó ìàøèí
5 4.5 4
×èñëî èíòåðâàëîâ
3.5 3 2.5 2 1.5 1 0.5 0 0.5
1
1.5
2
2.5 3 ×èñëî ìàøèí
3.5
4
4.5
5
Рис. 1.3. Кириллица на графике не воспроизводится.
Для того чтобы русский текст воспроизводился необходимо задать код шрифта командой set. Команда gca позволяет выбрать шрифт для координатных осей. Пример 1.17 %% Исходные данные cars=[1 1 2 1 2 3 1 2 3 4 1 2 3 4 5]; hist(cars,5), grid %% Подписи к рисунку set(gca,'FontName','Arial Cyr'); xlabel('Число машин'); ylabel('Число интервалов'); title('Распределение по числу машин','FontSize',14);
18
Распределение по числу машин
5 4.5 4
Число интервалов
3.5 3 2.5 2 1.5 1 0.5 0 0.5
1
1.5
2
2.5 3 Число машин
3.5
4
4.5
5
Рис. 1.4. Программа корректно воспроизводит русский язык. Примечание: В режиме M-книги не реализуется. Текст, набранный после одного знака "%", не выполняется, и может послужить комментарием к строке или фрагменту программы. Опция "%%" введена в версии MATLAB 2006a, и позволяет, как комментировать, так и окрашивать фрагменты программы в разные цвета. На рис. 1.2-1.4 числовая разметка по оси x несколько смещена по отношению к центрам соответствующих ячеек. Откорректировать разметку можно заданием центра ячеек матрицей centers (рис. 1.5): Пример 1.18 cars=[1 1 2 1 2 3 1 2 3 4 1 2 3 4 5]; centers=[1 2 3 4 5]; hist(cars,centers), grid set(gca,'FontName','Arial Cyr'); xlabel('Число машин'); ylabel('Число интервалов'); title('Распределение по числу машин','FontSize',14);
19
Распределение по числу машин
5 4.5 4
Число интервалов
3.5 3 2.5 2 1.5 1 0.5 0
1
2
3 Число машин
4
5
Рис. 1.5. Значения по оси координат задаются по середине ячейки.
Ячейки
гистограммы
можно
объединять.
Приведем
пример
распределения по трем ячейкам на рис. 1.6.
Пример 1.19 cars=[1 1 2 1 2 3 1 2 3 4 1 2 3 4 5]; hist(cars,3), grid set(gca,'FontName','Arial Cyr'); xlabel('Число машин'); ylabel('Число интервалов'); title('Распределение по числу машин','FontSize',14);
20
Распределение по числу машин
9 8
Число интервалов
7 6 5 4 3 2 1 0 0.5
1
1.5
2
2.5 3 Число машин
3.5
4
4.5
5
Рис. 1.6. Укрупнение ячеек. Можно менять цвета колонок гистограмм и их границ. Для этого используются команды findobj и set (третья и четвертая строчки программы). Результат приводится на рис. 1.7. Пример 1.20 cars=[1 1 2 1 2 3 1 2 3 4 1 2 3 4 5]; hist(cars,5), grid h=findobj(gca,'Type','patch'); set(h,'FaceColor','r','EdgeColor','b'); set(gca,'FontName','Arial Cyr'); xlabel('Число машин'); ylabel('Число интервалов'); title('Распределение по числу машин','FontSize',14);
21
Распределение по числу машин
5 4.5 4
Число интервалов
3.5 3 2.5 2 1.5 1 0.5 0 0.5
1
1.5
2
2.5 3 Число машин
3.5
4
4.5
5
Рис. 1.7. Колонки гистограммы красные, их окантовка – синяя. Мы рассмотрели возможность построения гистограмм с помощью команды hist, но в MATLAB имеются и другие возможности построения гистограмм, в частности, с помощью команды bar. Заменим в предыдущем примере hist на bar. Пример 1.21 cars=[1 1 2 1 2 3 1 2 3 4 1 2 3 4 5]; bar(cars), grid %h=findobj(gca,'Type','patch'); %set(h,'FaceColor','r','EdgeColor','b'); set(gca,'FontName','Arial Cyr'); xlabel('Число машин'); ylabel('Число интервалов'); title('Распределение по числу машин','FontSize',14); 22
Распределение по числу машин
5 4.5 4
Число интервалов
3.5 3 2.5 2 1.5 1 0.5 0
1
2
3
4
5
6
7 8 9 10 11 12 13 14 15 Число машин
Рис. 1.8. Распределение по числу машин за последующие 10-ти минутные интервалы. Из рис. 1.8 следует количество машин, въезжающих во двор каждые 10 минут последовательно. Рассмотрим пример воспроизведения результатов на рис. 1.5 с помощью команды bar. Для этого нужно предварительно обработать вектор cars, и задать координаты x,y (рис. 1.9): Пример 1.22 x=1:5; y=[5 4 3 2 1]; bar(x,y), grid set(gca,'FontName','Arial Cyr'); xlabel('Число машин'); ylabel('Число интервалов'); title('Распределение по числу машин','FontSize',14);
23
Распределение по числу машин
5 4.5 4
Число интервалов
3.5 3 2.5 2 1.5 1 0.5 0
1
2
3 Число машин
4
5
Рис. 1.9. Распределение по числу машин в 15-ти десятиминутных интервалах. Примечание: Величина x принимает 5 значений с шагом 1, принимаемым по умолчанию. Если, например, x=1:0.5:5, то шаг равен 0,5, и мы задаем 9 значений переменной x. Ширину колонок на рис. 1.9 можно менять, задавая в команде bar соответствующий параметр – 0,2 в нашем случае (рис. 1.10): Пример 1.23 x=1:5; y=[5 4 3 2 1]; bar(x,y,0.2), grid set(gca,'FontName','Arial Cyr'); xlabel('Число машин'); ylabel('Число интервалов'); title('Распределение по числу машин','FontSize',14);
24
Распределение по числу машин
5 4.5 4
Число интервалов
3.5 3 2.5 2 1.5 1 0.5 0
1
2
3 Число машин
4
5
Рис. 1.10. То же, что на рис. 1.9, но ширина колонок другая. Рассмотрим пример построения нескольких гистограмм на одном рисунке. Пример 1.24 Предположим, что имеются данные по машинам, въезжающим во двор за три дня. Их можно представить в виде матрицы из трех строк, каждая из которых содержит данные за 2,5 часа наблюдения: cars=[1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2]; bar(cars), grid set(gca,'FontName','Arial Cyr'); xlabel('Число машин'); ylabel('Число интервалов');
25
5 4.5 4
Число интервалов
3.5 3 2.5 2 1.5 1 0.5 0
1
2 Число машин
3
Рис. 1.11. Данные за три 2,5 часовых сеанса наблюдения по числу въезжающих во двор автомобилей. Переливание в цвете производится автоматически, а их последовательность соответствует цветам радуги. Данные на рис. 1.11 можно представить иначе с помощью команд barh (рис. 1.12) и stack (рис. 1.13): Пример 1.25 cars=[1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2]; barh(cars), grid set(gca,'FontName','Arial Cyr'); xlabel('Число машин'); ylabel('Число интервалов');
26
Число интервалов
3
2
1
0
1
2 3 Число машин
4
5
Рис. 12. Горизонтальное представление данных на рис. 1.11.
Пример 1.26 cars=[1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2]; bar(cars,'stack'), grid; set(gca,'FontName','Arial Cyr'); xlabel('Число машин'); ylabel('Число интервалов');
27
40 35
Число интервалов
30 25 20 15 10 5 0
1
2 Число машин
3
Рис. 1.13. То же, что и на рис. 1.11. Толщина полоски пропорциональна числу машин.
Представим результаты на рис. 1.11, 1.12 в виде трехмерного графика с помощью команды bar3: Пример 1.27 cars=[1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2]; bar3(cars), grid set(gca,'FontName','Arial Cyr'); xlabel('Число машин'); ylabel('Дни'); zlabel('Число интервалов');
28
Рис. 1.14. Представление данных на рис. 1.11-1.13 в виде трехмерного графика.
Результаты, приведенные на рис. 1.11-1.14, можно скомпоновать в один рисунок с помощью команды subplot, которая содержит три параметра. Первые два задают матрицу расположения рисунков, третий – номер конкретного рисунка (рис. 1.15): Пример 1.28 cars=[1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2]; subplot(2,2,1); bar(cars); set(gca,'FontName','Arial Cyr'); title('Рис.11'); subplot(2,2,2); barh(cars); set(gca,'FontName','Arial Cyr'); title('Рис.12');
29
subplot(2,2,3); bar(cars,'stack');set(gca,'FontName','Arial Cyr'); title('Рис.13'); subplot(2,2,4); bar3(cars); set(gca,'FontName','Arial Cyr'); title('Рис.14');
Рис. 1.15. Представление данных на рис. 1.11-1.14 в одном окне. Обратимся теперь к исходной матрице cars, и вычислим сумму элементов каждой строки. Получим количество машин, в трех сеансах наблюдения – 35, 35 и 36 соответственно (см. рис. 1.13). Представим в виде круговой диаграммы долю машин за сеанс. Она строится с помощью команды pie ( рис. 1.14): Пример 1.29 cars=[1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2]; sm=sum(cars'); pie(sm)
30
33%
34%
33%
Рис. 1.16. Представление данных командой pie. На рис. 1.17. приводится пример выделения сектора "пирога" с помощью команды explode: Пример 1.30 clear cars=[1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2]; sm=sum(cars'); explode=[0
1
0];
%
Выделяется
сектор,
которому
присвоено значение "1" pie(sm,explode)
31
33%
34%
33%
Рис. 1.17. Выделение сектора с помощью команды explode. Рассмотрим пример формирования многогранников с помощью функции patch. Пример 1.31 Программа рисует шестигранник (рис. 1.18). Меняя шаг по переменной t можно нарисовать другие многогранники: % Полный круг делится на 6 равных частей t=0:2*pi/6:2*pi; x=sin(t); y=cos(t); h=patch(x,y,[0 0 1]); axis equal
32
1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1
-1
-0.5
0
0.5
1
Рис. 1.18. Шестигранник. Примечание: Числа в прямых скобках в команде patch принимают значения 0 или 1, и определяют цвет фигуры. Приведем пример построения на экране красного треугольника с катетами, лежащими на осях координат. Для этого нужно задать массивы x(i) и y(i) ( i=1,2,3), элементы которых задают координаты трех точек на плоскости. Пример 1.32 x=[0 1 0]; y=[0 0 1]; patch(x,y,'r')
33
1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Рис. 1.19. Красный треугольник.
1.6. Трехмерные графики MATLAB дает широкие возможности построения трехмерных графиков. Рассмотрим основные команды – mesh, surf, plot3, contour3. Приведем их краткие характеристики: mesh – дает трехмерное изображение в виде сетки; surf – сегменты сетки окрашиваются в разные цвета; plot3 – через точки с координатами x, y, z проводятся линии; contour3 – через точки с координатами x и y проводит линии с постоянным значением z или т.н. изолинии. Каждая из приведенных команд имеет свои модификации, с которыми можно познакомиться в разделе Help системы MATLAB. Пример 1.33 Построим график функции z = x 2 + y 2 для 0 ≤ x ≤ 10 и 0 ≤ y ≤ 10 (рис. 1.20). Для этого плоскость покрывается координатной сеткой, и значение функции определяется в ее узлах. Плотность сетки
34
определяется шагом разбиения координатных осей, равным 2 в рассматриваемом случае. Сама сетка задается командой meshgrid. [X, Y] = meshgrid(0:2:10, 0:2:10); Z=3*X.^2+Y.^2; subplot(2,2,1); mesh(X, Y, Z); title ('mesh'); xlabel('x'); ylabel('y') subplot(2,2,2); plot3(X, Y, Z); title ('plot3'); xlabel('x'); ylabel('y') subplot(2,2,3); surf(X, Y, Z); title ('surf'); xlabel('x'); ylabel('y') subplot(2,2,4); contour3(X, Y, Z); title ('contour'); xlabel('x'); ylabel('y')
mesh
plot3
400
400
200
200
0 10 5 y
0 0
5
10
0 10 5 y
x
surf 400
200
200
0 10 5 0 0
10
x
contour
400
y
0 0
5
5 x
10
0 10 5 y
0 0
5
10
x
Рис. 1.20. Примеры построения трехмерных графиков.
35
Рассмотрим пример построения куба с помощью команды patch. Пример 1.34 Для построения куба нужно задать две матрицы - матрицу координат вершин и матрицу вершин, образующих соответствующие грани (рис. 1.21): % Координаты вершин v=[0 0 0; 1 0 0; 1 0 1; 0 0 1; 0 1 0; 1 1 0; 0 1 1]; % Матрица вершин, образующая соответствующие f=[1 2 3 4; 1 2 6 5; 2 3 7 6; 1 4 8 5; 3 4 8 7 8]; patch('Vertices', v, 'Faces',f, 'FaceColor', 0]) axis equal view(3)
1 1 1; грани 7; 5 6 [1 1
1 0.8 0.6 0.4 0.2 0 1
1 0.5
0.5 0
0
Рис. 1.21. Желтый куб.
36
1.7. Расчет и построение графиков функций Рассмотрим пример построения графиков непрерывных функций на примере распределения Максвелла молекул идеального газа по скоростям. Функция плотности вероятности этого распределения имеет вид 3
⎛ mv 2 ⎞ 4 ⎛ m ⎞2 2 ⎟⎟ , f ( v) = ⎜ ⎟ v ⋅ exp⎜⎜ − π ⎝ 2kT ⎠ ⎝ 2kT ⎠
где v – скорость частицы газа, m – ее масса, T – температура газа, k = 1,38 ⋅ 10 − 23
Дж - постоянная Больцмана. Функция f ( v ) К
является
∞
нормированной: ∫ f ( v ) dv = 1 . 0
Пример 1.35 Построим график функции f ( v ) для газа, состоящего из молекул водорода H 2 с m = 3,32 ⋅ 10 −27 кг при T = 350 K . Для этого используется команда plot, команда grid накладывает сетку на график. % Распределение Максвела молекул по скоростям m=3.32e-27; k=1.38e-23; T=250; % Задаются количество шагов и шаг по оси ординат n=2500; step=2; % Начальные значения скорости и функции распределения v(1)=0; f(1)=0; a=m/(2*k*T); b=4/sqrt(pi); % В цикле создатся массивы скорости и функции распределения for i=2:n v(i)=v(i-1)+step;
37
f(i)=b*a^1.5*v(i)^2*exp(-a*v(i)^2); end plot(v,f), grid set(gca,'FontName','Arial Cyr'); title('Распределение Максвелла','FontSize',14) xlabel('Скорость'); ylabel('Плотность вероятности'); v1=sqrt(8*k*T/pi/m) v2=sum(v.*f)/sum(f) sm=sum(f*step) v1 = 1.6267e+003 v2 = 1.6266e+003 sm = 1.0000
6
x 10
Распределение Максвелла
-4
Плотность вероятности
5
4
3
2
1
0
0
500
1000
1500
2000
2500 Скорость
3000
3500
4000
4500
5000
Рис. 1.22. Распределение Максвелла для молекул водорода.
38
Наряду с графиком функции приводятся результаты расчета трех величин: v1 – средней скорости частиц газа, вычисленной по формуле v =
8kT ; v 2 – та же величина, но определенная путем усреднения πm
скорости
по
расчетной
кривой;
sm
–
площадь
под
кривой
распределения, которая близка к единице. Видно незначительное отличие скоростей v1 и v 2 . При формате Format long величина sm будет отлична от единицы, что связано с погрешностью численных расчетов. Для увеличения точности расчетов нужно увеличить число шагов n и уменьшить их длину step. Примечание: В этой программе используется операция цикла for i=2:n … end Т.е. командные строки, содержащиеся между указанными строками, будут выполнены циклически для
переменной i, меняющейся в
указанных пределах с шагом 1 по умолчанию. Пример 1.36 Построим на одном графике распределение Максвелла для молекул водорода и двух значений температур (300 и 500 K). % Распределение Максвела молекул по скоростям m=3.32e-27; k=1.38e-23; T1=300; T2=500; % Задаются количество шагов и шаг по оси ординат n=3000; step=2; % Начальные значения скорости и функции распределения v(1)=0; f1(1)=0; f2(1)=0; 39
% В цикле создаются массивы скорости и функции распределения for i=2:n v(i)=v(i-1)+step; f1(i)=4/sqrt(pi)*(m/(2*k*T1))^1.5*v(i)^2*exp(m*v(i)^2/(2*k*T1)); f2(i)=4/sqrt(pi)*(m/(2*k*T2))^1.5*v(i)^2*exp(m*v(i)^2/(2*k*T2)); end plot(v,f1,v,f2), grid set(gca,'FontName','Arial Cyr'); title('Распределение Максвелла','FontSize',14) xlabel('Скорость'); ylabel('Плотность вероятности'); hgt=gtext('T=300K'); hgt=gtext('T=500K'); 6
x 10
Распределение Максвелла
-4
5
Плотность вероятности
T=300K
4
3
T=500K
2
1
0
0
1000
2000
3000 Скорость
4000
5000
6000
Рис. 1.23. Распределение Максвелла для молекул водорода. Примечание: Надписи на двумерных графиках делаются с помощью команды gtext.
Нужно указать курсором на место в основном
рисунке. Результат передается на график в тексте m-книги.
40
Распределения на рис. 1.23 отвечают двум значениям температур. По существу они получаются как линии постоянной температуры трехмерного графика зависимости f ( v , T ) . В следующем примере приводятся
зависимости f ( v , T ) для молекул водорода в широком
интервале скоростей и температур: Пример 1.37 m=3.32e-27; k=1.38e-23; p=sqrt(pi); a=4/p; b=m/2/k; [v, t] = meshgrid(30:30:3000, 203:3:500); z3=v.^2; z4=t.^(-1); z1=log(a*b^1.5*z4.^1.5); z2=log(z3); z5=b*z3.*z4; z6=z1+z2-z5; % Исходная фунция логарифмируется, а затем экспонируется z=exp(z6); mesh(v, t, z) set(gca,'FontName','Arial Cyr'); title('Распределение Максвелла','FontSize',14) xlabel('Скорсть (м/с)'); ylabel('T(K)')
Рис. 1.24. Распределение Максвелла для молекул водорода.
41
Пример 1.38 Построим на одном графике трехмерные распределения для водорода и кислорода (рис. 1.25): clear; k=1.38e-23; p=sqrt(pi); a=4/p; % Задается координатная сетка, в узлах которой опредеяется значение функции [v, t] = meshgrid(30:30:3000, 203:3:500); for i=1:2 if i==1; m=3.32e-27; end ; if i==2; m=8*3.32e-27; end ; b=m/2/k; z3=v.^2; z4=t.^(-1); z1=log(a*b^1.5*z4.^1.5); z2=log(z3); z5=b*z3.*z4; z6=z1+z2-z5; z=exp(z6); mesh(v, t, z); hold on; mesh(v, t, z) end set(gca,'FontName','Arial Cyr'); title('Распределение Максвелла','FontSize',14) xlabel('Скорсть (м/с)'); ylabel('T(K)') % Надписи к поверхностям на рисунке text(400,350,1.55e-3,'O_2') text(300,100,1.3e-3,'H_2')
Рис. 1.25. Распределение Максвелла для молекул кислорода и водорода. 42
Примечание: Команда text позволяет подписывать как двумерные, так и трехмерные графики. Числа соответствуют координатам. Команда hold on "удерживает" первую зависимость при построении второй.
1.8. Воспроизведение и анализ распределений На
примере
распределения
Максвелла
рассмотрим
пример
случайной выборки скоростей заданного числа частиц методом МонтеКарло. Напомним сущность метода. Исходная функция f (v ) , по ∞
которой ведется розыгрыш, нормированна, т.е. ∫ f (v )dv = 1 . Случайная 0
выборка производится с помощью команды rand, которая возвращает равновероятно случайные числа в пределах 0 ≤ ξ ≤ 1 . Следовательно, разыгрывая число ξ , мы получаем случайное значение площади. Скорость v , соответствующая значению ξ , определяется из условия v
∫ f (v )dv = ξ . Повторяя процедуру случайной выборки, можно построить 0
распределение молекул по скоростям для заданного количества частиц. Пример 1.39 Проведем розыгрыш скоростей 500 частиц и построим их распределение. В цикле while … end производится вычисление площади под распределением Максвелла, пока она не превысит случайное число rand. В конце программы командой cftool запускается прикладной пакет Curve fitting toolbox – пакет для аппроксимации расчетного распределения. Результат приводится на рис. 1.26.
43
m=3.32e-27; k=1.38e-23; T=250; % Приращение скорости (шаг) step=1; % Число частиц number=500; % Число ячеек гисограммы np=20; d=m/2/k/T; a=4/sqrt(pi)*d^1.5; x=zeros; hz=zeros; nv=zeros; for mv=1:number y=rand(1); s=0;
v=0;
f=0;
while s превышает некоторую критическую величину x 0 . Эта вероятность соответствует затененной части площади под функцией плотности вероятностей на рис. 2.2. Тогда в силу симметрии F ( x ) , величина < k > попадает в интервал m ± x с вероятностью
F ( x ) − (1 − F ( x ) ) = 2F ( x ) − 1 .
(3.10)
Пример 2.3 Построим нормальное распределение с k = 0,783 и Δk = 0,012 . Вычислим вероятность того, что случайная выборка будет иметь значение, превышающее критическую величину 0,8. Расчет и построение графика осуществлется с помощью команды normspec. p=normspec ([0.8 Inf],0.783,0.012) hgt=gtext('F(x)'); hgt=gtext('1-F(x)'); 90
p = 0.0783 Probability Greater than Lower Bound is 0.07829 35
30
Density
25
20
15
F(x)
10
1-F(x)
5
0 0.74
0.75
0.76
0.77
0.78 0.79 Critical Value
0.8
0.81
0.82
0.83
Рис. 2.2. Нормальное распределение. Иллюстрация к формулам (3.9, 3.10).
Перепишем (3.10) используя формулы (3.5, 3.9, 3.10) ⎛ε P ( m− < k > < ε ) = 2Φ⎜ ⎝σ
⎞ ⎟ − 1. ⎠
(3.11)
Приравнивая правые части (2.11) и (3.11) получаем уравнение для границ доверительного интервала ⎛ε ⎞ α = 2Φ ⎜ ⎟ − 1 , ⎝σ ⎠
откуда ⎛1 + α ⎞ ⎟ , ⎝ 2 ⎠
ε = σ ⋅ arg Φ⎜
(3.12)
где arg Φ ( x ) – обратное выражение функции Φ ( x ) . Выше отмечалось, что истинное значение σ нам не известно, и поэтому в (3.12) подставляют ее
приближенное значение σ = D~ ,
определяемое из опыта. Вычисляя по (3.12) величину ε можно
91
определить доверительный интервал (3.5). При вычислении ε , как ⎛1 + α ⎞ ⎟ в правило, используют табличные данные функции t = arg Φ⎜ ⎝ 2 ⎠
зависимости от α . Величина t , приведенная в табл. 2.2, определяет для нормального закона число среднеквадратических отклонений от средней величины, чтобы вероятность попадания в полученный участок была равна α :
I α = (< k > −t ⋅ Δk ; < k > +t ⋅ Δk ) ,
(3.13)
где Δk вычисляется по формуле (3.2). Используя результаты, приведенные в табл. 2.2 можно сказать, что средняя проницаемость горных пород, определяемая по данным табл. 2.1, с доверительной вероятностью α = 95%
попадает в интервал с доверительными
границами k1 = 0,783 + 1,96 ⋅ 0,012 = 0,807 , k 2 = 0,783 − 1,96 ⋅ 0,012 = 0,759 . Из табл. 2.2 следует, что чем больше доверительная вероятность α , тем больше величина t , и тем сильнее отличаются границы доверительного интервала. Таблица 2.2 α
t
α
t
α
t
0,8
1,282
0,86
1,475
0,92
1,750
0,81
1,310
0,87
1,513
0,93
1,810
0,82
1,340
0,88
1,554
0,94
1,880
0,83
1,371
0,89
1,597
0,95
1,960
0,84
1,404
0,90
1,643
0,96
2,053
0,85
1,439
0,91
1,694
0,997
3,000
Рассмотренный метод построения доверительного интервала является приближенным,
т.к.
истинная
зависимость
f ( k)
исходного
распределения не известна. В случае, когда функция f ( k ) известна, 92
задача построения доверительного интервала решается точно, т.к. при вычислении дисперсии, вместо (2.6) можно воспользоваться точной формулой 10
D =
∑(k
i
i =1
− m) 2 ⋅ N i
N0 − 1
,
(3.14)
где m – математическое ожидание, вычисляемое как первый момент распределения f ( k ) : ∞
m=
∫ k ⋅ f ( k) dk 0
∞
∫ f ( k) dk
.
(3.15)
0
Например, если бы распределение проницаемостей k горных пород описывалось нормальным распределением, то задача построения точного доверительного интервала для средней проницаемости < k > свелась бы к соответствующему анализу распределения Стьюдента.
2.4. Распределение Стьюдента В случае если распределение горных пород по проницаемости описывалось нормальным распределением, то оно было бы симметрично относительно наиболее вероятной величины. Но из рис.1 следует, что это не так. Тем не менее, допуская такую неточность, определим доверительный
интервал
для
средней
проницаемости
с
использованием распределения Стьюдента (псевдоним английского математика В. Госсета). Независимой переменной в этом распределении является величина
t =
< k > −m , Δk
(4.1)
где m - математическое ожидание (3.15) Δk - среднеквадратичное отклонение (3.2). Видно, что величина t является безразмерной и 93
характеризует степень отклонения экспериментальной величины < k > от m в единицах среднеквадратичного отклонения Δk . Функция плотности вероятности распределения Стьюдента по переменной t имеет вид:
S( t , n) =
⎛n⎞ Γ⎜ ⎟ ⎝2⎠
−
n
⎛ t2 ⎞ 2 ⎜1 + ⎟ n − 1 ⎟⎠ , ⎛ n − 1 ⎞ ⎜⎝ ( n − 1) π ⋅ Γ⎜ ⎟ ⎝ 2 ⎠
(4.2)
где +∞
∫ S(t , n )dt
= 1,
(4.3)
−∞
∞
Γ( x ) = ∫ u x −1e−u du – гамма-функция, n - целое положительное число, 0
которое отождествляют с числом измерений. Величину r = n − 1 называют числом степеней свободы распределения (4.2).
Вычислим
теперь вероятность того, что значение < k >= 0,783 попадет в интервал
t = ±1 . Для этого в (4.1) положим m = 0,771 . Тогда t =
0,783 − 0,771 = 1. 0,012
Вероятность того, что < k > дает значение t , лежащее в интервале
(1,+∞) выражается через (4.2): +∞
p1 ( n) =
∫ S( t , n) dt .
(4.4)
1
На рис. 2.3 приводится вид функции S( t , n) для двух значений n . Пример 2.4.
Программа построения распределения Стьюдента на (рис.2.3): tmax=7; t=-tmax:tmax/300:tmax; x=0:0.1:200; for i=1:2 94
if i==1,n=8; end; if i==2,n=3; end % Вычисление гамма-функции y1=(n-1)/2; y2=n/2; G1=gamma(y1); G2=gamma(y2); s1=-n/2; t1=t.^2; t2=1+t1/(n-1); f1=t2.^s1; f2=sqrt((n-1)*pi); if i==1, St1=G2*f1/G1/f2; end if i==2, St2=G2*f1/G1/f2; end end plot(t,St1,t,St2),grid set(gca,'FontName','Arial Cyr'); xlabel('t','FontSize',12) ylabel('Плотность вероятности','FontSize',12) title('Рис.3. Распределение Стьюдента','FontSize',14) hgt=gtext('n=8'); hgt=gtext('n=3');
Рис.3. Распределение Стьюдента
0.4 0.35
Плотность вероятности
n=8
0.3 0.25 0.2 n=3
0.15 0.1 0.05 0 -8
-6
-4
-2
0
2
4
6
8
t
Рис. 2.3. Распределение Стьюдента для двух значений степеней свободы.
Видно, что оно, как и нормальное распределение, симметрично относительно вертикальной оси, проходящей через наиболее вероятное значение. Используя это сходство распределений, можно провести рассуждения, аналогичные тем, которые проделаны при получении
95
формулы
(3.10).
Следовательно,
искомая
вероятность
попадания
случайной величины в интервал t = ±1 равна
p(n) = 1 − 2 ⋅ p1 (n) ,
(4.5)
где p1 определяется по (4.4). Попадание параметра t в интервал ± 1 соответствует попаданию средней величины в одной серии измерения в интервал
[( 0,783 − 0,012)
÷ ( 0,783 + 0,012) ] ,
определяемый
из
опыта.
Рассмотрим программу, которая позволяет вычислять доверительную вероятность для заданного числа степеней свободы: Пример 2.5.
По нормальному распределению с средним 0,783 и стандарта 0,38 разыгрываются 1000 значений k . По ним определяется средняя величина ~ 0,783 − k ~ k и соответственно t = . Таких повторных сеансов 0,012
проводится
10 4 , в каждой из которых определяется значение t . Получаемое таким
образом распределение и есть распределение Стьюдента для 1000 − 1 степеней свободы. % Число степеней свободы. Почти то же, что и число испытуемых образцов в одном опыте n=1000-1; % Число опытов numb=10000; st1=0; st2=0; % Критическое значение параметра t tkr=1.96; for i=1:numb % Генерируется матрица столбец с данными средним и сигма n2 = normrnd(0.783,0.38,[1 n]); % Определятся средняя величина m=mean(n2); t(i)=(.783-m)/0.012; if t(i)>tkr; st1=st1+1; end 96
if t(i) . Ее вывод не приводится по следующим причинам. Во-первых, анализируя эмпирические распределения, исследователи, как правило, интересуются его средней величиной, а дисперсия, в основном, вычисляется для оценки погрешности среднего. Во-вторых, вывод формулы для σ D требует громоздких математических выкладок (см., например, [2]). Здесь отметим, что для вычисления σ D нужно сделать предположение о нормальном распределении дисперсий D i , каждая из которых вычисляется по результатам отдельной совокупности опытов. Это утверждение следует из центральной предельной теоремы теории вероятностей. По-существу, мы вычисляем дисперсию распределения по дисперсии. Такая величина выражается через четвертый центральный момент μ 4 распределения исследуемой величины, а в нашем случае – результатов табл. 2.1 ( рис. 2.1):
D [D i ] =
μ4 N0
−
N0 − 3 ~ D2, N 0 ( N 0 − 1)
(5.1)
где 10
μ4 =
∑ (k − < k > ) i =1
i
N0 − 1
4
⋅ Ni
,
99
~ < k >= 0,783мкм2 , а дисперсия D = 0,144мкм4 и вычисляется по
формуле (2.6).
Вычислим значение μ4 :
Пример 2.8.
Вычислим четвертый центральный момент распределения коэффициента проницаемости двумя способами: 1. По формуле μ 4 =
4
10
∑ (k − < k > ) N i =1
i
i
по данным табл. 2.1;
2. С помощью команды moment(x,4). sm=(.1-.783)^4*4+(.3-.783)^4*126+(.5.783)^4*230+(.7-.783)^4*260+(.9-.783)^4*130+(1.1.783)^4*120+(1.3-.783)^4*50+(1.5-.783)^4*30+(1.7.783)^4*30+(1.9-.783)^4*20; m4=m1/999 for for for for for for for for for for m =
i=1:4; x(i)=0.1; end i=5:130; x(i)=0.3; end i=131:360; x(i)=0.5; end i=361:620; x(i)=0.7; end i=621:750; x(i)=0.9; end i=751:870; x(i)=1.1; end i=871:920; x(i)=1.3; end i=921:950; x(i)=1.5; end i=951:980; x(i)=1.7; end i=981:1000; x(i)=1.9; end moment(x,4)
m4 = 0.0744 m = 0.0743 Видно, что результаты в обоих случаях одинаковые и равны μ 4 ≈ 0,0744мкм4 . Примечание: Значения m4 и m совпадают, если в программе m4 =
m1 . 1000
Тогда искомая погрешность σ D вычисляется по формуле (5.1):
100
σ D = D [ D i ] ≈ 0,0073мкм4 .
Мы
получили
оценку
стандарта
(5.2)
дисперсии.
Ее
относительная
погрешность равна
σD
~ ⋅ 100% ≈ 5,07% . D
(5.3)
Из сравнения относительных погрешностей (2.10) и (5.3) следует, что для дисперсии она вычисляется с меньшей точностью, чем для средней проницаемости. Это объясняется тем, что «хвост» распределения по проницаемости на рис. 2.1 дает больший вклад в дисперсию по сравнению со средней, а он, как следует из табл. 2.1, статистически менее обеспечен. 2.6. Вычисление статистических ошибок для отдельных ячеек гистограммы
Гистограмма на рис. 2.1 состоит из десяти колонок, высоты которых соответствуют числу образцов, проницаемости которых попадают в интервал, соответствующий ширине основания колонки по оси абсцисс. Как
уже
отмечалось,
эта
гистограмма
отражает
данные
по
проницаемостям N 0 = 1000 образцов. Если проделать аналогичные измерения для другой совокупности такого же количества образцов, то для них мы получим гистограмму, которая будет подобна приведенной на рис. 2.1, но не будет с
ней совпадать. Это означает, что число
образцов пород, проницаемости которых лежат в интервале, скажем, от 0,2 до 0,4, будет различна для данных по разным совокупностям пород из
N 0 = 1000
образцов.
Если
ширина
выбранного
интервала
существенно уже полного интервала измеряемых проницаемостей (на рис. 2.1, примерно, от 0 до 2 мкм 2 ), то вероятность того, что проницаемость одной породы из тысячи, попадет в выделенный узкий
101
интервал, будет мала. В этом случае, флуктуации числа попадающих в узкий интервал Δk проницаемостей пород описывается распределением Пуассона (см. Приложение) e−N ⋅ N N Π (N , N ) = . N!
(6.1)
Распределение Пуассона позволяет вычислить вероятность попадания
N образцов пород в интервал проницаемостей Δk при
ожидаемом
среднем N . В отличие от нормального распределения (6.1) относится к классу так называемых дискретных распределений, т.е. переменная N принимает только положительные целочисленные значения. Важным свойством распределения Пуассона является то, что оно определяется одним параметром N , который по величине совпадает с дисперсией: N = D N . Такое равенство возможно в силу того, что величина N
является безразмерной. В том случае, когда среднее число образцов превышает значение N ≈ 10 распределение (6.1) является нормальным со стандартом σ = N (см. Приложение). Следовательно, отобрав в процессе измерения проницаемостей N образцов, можно утверждать, что с вероятностью p ≈ 0,68 (см. Приложение) математическое ожидание попадает в интервал N ± N . Правда, величина N не известна. Поэтому за стандарт измеряемой величины принимают
σ= N.
N:
(6.2)
Таким образом, по одному измерению статистической величины определяется и экспериментальная средняя величина N и ее стандарт N . Как правило, рисуя гистограмму, аналогичную рис. 2.1, многие
авторы указывают статистические ошибки для каждой из колонок в виде вертикальной палочки, середина которой совпадает с вершиной колонки
N , а ее длина совпадает с интервалом N ± N . Было бы целесообразно 102
привести
эти ошибки на рис. 2.1, но команда hist не располагает
соответствующей функцией. Данные табл. 2.1 по распределению пород по их проницаемостям с указанием статистических ошибок приводится на рис. 2.5, построенной с помощью команды errorbar. Оно подобно распределению на рис. 2.1, и является из кусочно-гладкой кривой, а именно, состоит из отрезков, соединяющих середины вершин колонок на рис. 2.1. Пример 2.9.
Программа
построения
экспериментального
распределения
с
указанием статистических ошибок в отдельных ячейках. x=0.1:0.2:1.9; y=[4 126 230 260 130 120 50 30 30 20]; e=sqrt(y); errorbar(x,y,e) set(gca,'FontName','Arial Cyr'); xlabel('Проницаемость, мкм^2') ylabel('Число образцов') title('Данные с указанием статистических ошибок','FontSize',14)
103
Данные с указанием статистических ошибок
300
Число образцов
250
200
150
100
50
0
0
0.5
1 Проницаемость, мкм 2
1.5
2
Рис. 2.5. Приводятся статистические ошибки в отдельных ячейках распределения. Пример 2.10.
Можно сравнить распределение на рис.2.5 с гистограммой, построенной по команде bar: x=0.1:0.2:1.9; y=[4 126 230 260 130 120 50 30 30 20]; e=sqrt(y); errorbar(x,y,e) hold on bar(x,y) set(gca,'FontName','Arial Cyr'); xlabel('Проницаемость, мкм^2') ylabel('Число образцов') title('Данные с указанием статистических ошибок','FontSize',14)
104
Данные с указанием статистических ошибок
300
Число образцов
250
200
150
100
50
0
0
0.5
1 Проницаемость, мкм 2
1.5
2
Рис. 2.6. Сравнение графиков, построенных командами bar и errorbar. Первая точка на рис. 2.5, 2.6 соответствует первой строчке табл. 2.1. Следовательно, в первый интервал ( 0 ≤ k ≤ 0,2 ) попало N1 = 4 образцов горных пород из общего числа N 0 = 1000 . Если мы проведем повторные измерения проницаемости другой совокупности такого же количества пород, то для них мы получим значение N1 , с вероятностью 68% попадающий в интервал N 1 ± N 1 = 4 ± 2 . Аналогично определены стандартные ошибки для остальных девяти точек на рис. 2.5, 2.6. Рассмотрим теперь другой способ представления данных табл. 2.1. На рис.2.5 приводится зависимость абсолютного числа горных пород в зависимости от их проницаемости. Часто для
графической
иллюстрации данных делают нормировку на общее число испытаний. Значения pi = удобный
Ni N0
способ
приводятся в четвертой колонке табл. 2.1. Это представления
данных,
т.
к.
он
показывает
относительную долю образцов, проницаемости которых лежат в данном интервале проницаемостей. В этом случае требуется определить
105
стандартную
ошибку
частного
pi =
Ni N0
.
Проблема
вычисления
погрешности Δp i величины pi является сложной задачей, несмотря на кажущуюся ее простоту. Мы рассмотрим два частных случая: 1. Число N 0 = const , т. е. не является случайной величиной. Тогда в формуле ⎛N Δpi = Δ⎜⎜ i ⎝ N0
т.е. pi ± Δpi =
Ni Ni ± , где ΔN i = N0 N0
⎞ ΔN i ⎟⎟ = ⎠ N0 N i . Для
(6.3) первой строчки табл.
2.1 имеем
p1 ± Δp1 = 0,004 ± 0,002 .
(6.4)
2. Случайное число N 0 распределено по закону Пуассона и N 0 . В этом случае знаменатель
определяется с погрешностью
(6.3) не является постоянной и для вычисления Δp i пользуются теоремой сложения дисперсий, согласно которой, наложение двух случайно распределенных величин X и Y дает третье с распределением случайной величины Z, дисперсия которой есть DZ = D X + DY + 2 K X Y .
(6.5)
Величина K XY называется коэффициентом корреляции. Если X и Y являются независимыми, то K XY равен нулю. Предположим, что случайные числа N i и N 0 независимы. Тогда для дисперсии p i имеем D pi = D N i + D N 0 . Аналогичное равенство справедливо и для квадратов относительных дисперсий:
δ p 2 = δN 2 +δN 2, i
i
0
(6.6)
106
⎛ Δp ⎞
δ p = ⎜⎜ i ⎟⎟ , ⎝ pi ⎠
где
i
ΔN i = N i ,
⎛ ΔN ⎞
⎛ ΔN ⎞
δ N = ⎜⎜ i ⎟⎟ , δ N = ⎜⎜ 0 ⎟⎟ , ⎝ Ni ⎠ ⎝ N0 ⎠ i
(6.7)
0
ΔN 0 = N 0 ,
pi =
Ni . No
(6.8)
Подставляя (6.6) и (6.7) в (6.5) получим формулу для погрешности частного Δpi =
Ni N0
1 1 + . Ni N0
(6.9)
По (6.9) для первой строчки табл. 2.1 получим:
Δp1 =
1 4 1 1 + ≈ 0,004 ⋅ = 0,002 . 2 1000 4 1000
Мы получили значение Δp1 , близкое к (6.4). Как видно из (6.9), такое совпадение возможно только для значений N 0 >> N i . 2.7. Аппроксимация данных по распределению коэффициента проницаемости логнормальным распределением
Для совокупности опытных данных, аналогичных приведенным в табл. 2.1, можно подобрать аппроксимационную функцию. Часто наряду с термином аппроксимация (approximation – аппроксимация, приближение) используются такие его синонимы, как интерполяция (interpolation – интерполяция, вставка) и фитирование (fit – приспосабливать, соответствующий). Очевидно, что выбор аппроксимационной формулы зависит от формы
распределений
анализируемых
данных.
При
этом
исследователи, как правило, пытаются описывать свои данные стандартными,
хорошо
распределениями.
В
случаях,
изученными когда
статистическими
стандартные
функции
распределения дают неудовлетворительное согласие, проводится
107
аппроксимация
данных
полиномами
различных
степеней,
или
другими формулами. В нашем случае, в качестве аппроксимационной зависимости, описывающей данные на рис. 2.1, авторы работы [1] выбрали логнормальное распределение. Здесь отметим, что выбор этого распределения не случаен, и исторически восходит к работе А.Н. Колмогорова [3]. В ней
впервые была указана общая
математическая схема, в рамках которой распределения логарифмов размеров частиц (золотин в золотоносных россыпях, частиц горных пород при их дроблении) подчиняются приближенно закону Гаусса. Функция плотности вероятности этого распределения задается в системе MATLAB командой lognpdf и имеет вид ⎛ (ln x − m )2 L( x) = exp⎜⎜ − 2σ 2 xσ 2π ⎝ 1
⎞ ⎟, ⎟ ⎠
(7.1)
где x > 0 , а ее математическое ожидание и дисперсия определяются формулами
⎛σ 2 ⎞ m = exp⎜⎜ + m ⎟⎟ , ⎝ 2 ⎠
D = eσ
и Для
2
+2m
(e
σ2
(7.2)
)
−1 .
функции L( x ) выполняется условие нормировки:
(7.3) ∞
∫ L(x )dx = 1 . 0
Поэтому, для сравнения L ( x ) с экспериментальным распределением на рис. 2.1 нужно помножить L ( x ) на N 0 . Такое сравнение делается рис. 5. Параметры m и σ распределения (7.1) можно выразить через m и
D , решая совместно (7.2) и (7.3): ⎞ ⎛ m2 ⎟, m = ln⎜⎜ ⎟ 2 ⎝ m +D⎠
(7.4)
108
⎛ ⎝
σ = ln⎜1 +
D ⎞ ⎟. m2 ⎠
(7.5)
Заменим в формулах (7.4) и (7.5) математическое ожидание m и дисперсию
D экспериментальным средним < k >= 0,783 мкм 2 и
~ экспериментальной дисперсией D = 0,144 мкм 4 (см. (2.2, 2.5)), и
подставим полученные значения параметров m и σ в (7.1): ⎛ ⎞ 0,783 2 ⎜ ⎟ ≈ −0,350 , m = ln ⎜ 0,783 2 + 0,144 ⎟ ⎝ ⎠
⎛
0,144 ⎞
⎝
⎠
σ = ln⎜⎜1 + ⎟ ≈ 0,459 . 0,783 2 ⎟
Таким образом, мы получим распределение (7.1), которое имеет те же значения средней проницаемости и дисперсии, что и опытные данные на рис. 2.1, 2.5. Следовательно, мы можем, отождествляя в (7.1) переменную x с проницаемостью k , наложить аппроксимационное распределение (7.1) на один из этих рисунков. К сожалению, команда errorbar системы MATLAB, по которой нарисован рис. 2.5 не
допускает построение двух кривых на одном рисунке, а другая команда
plot, которая имеет
такую возможность, не рисует
статистические ошибки на экспериментальных точках. Совместить результаты этих команд можно с помощью команды hold on, использованной в примере (2.10). Пример 2.11. clear; for i=1:4, x(i)=0.1;end for i=5:130, x(i)=0.3;end for i=131:360, x(i)=0.5;end for i=361:620, x(i)=0.7;end for i=621:750, x(i)=0.9;end for i=751:870, x(i)=1.1;end for i=871:920, x(i)=1.3;end for i=921:950, x(i)=1.5;end for i=951:980, x(i)=1.7;end
109
for i=981:1000, x(i)=1.9;end %Вычисление среднего и дисперсии mx=mean(x); v=var(x); x=0.1:0.2:1.9; y=[4 126 230 260 130 120 50 30 30 20]; e=sqrt(y); errorbar(x,y,e) hold on %Построение графика логнормального распределения и опытного распределения проницаемостей. m2=mx^2; m1=log(m2/(m2+v)^.5); s1=sqrt(log((v+m2)/m2)); f=lognpdf(x,m1,s1)*.2*1000; plot(x,f),grid set(gca,'FontName','Arial Cyr'); xlabel('Проницаемость, мкм^2','FontSize',12) ylabel('Число образцов','FontSize',12) title('Аппроксимация данных логнормальным распределением','FontSize',14)
Аппроксимация данных 300
логнормальным распределением
Число образцов
250
200
150
100
50
0
0
0.5
1
Проницаемость, мкм
1.5
2
2
Рис. 2.7. Сравнение экспериментального распределения с логнормальным.
110
На
рис.
2.7
делается
сравнение
экспериментальной
и
аппроксимационной распределений по проницаемости горных пород. Их визуальное сравнение позволяет сделать вывод об их достаточно удовлетворительном согласии. Такой же вывод о справедливости применения логнормального распределения для описания данных табл. 2.1 делается в монографии [1]. Правда в ней сравниваются не сами исходные распределения, а рассматривается
диаграмма
квантилей этих распределений. Очевидно, что наш вывод о согласии данных на рис. 2.7, так же как и вывод авторов [1] является качественным, т. к. не определены количественные характеристики, являющиеся критерием согласия сравниваемых распределений. Для этих целей часто пользуются критериями согласия, наиболее популярным из которых является критерий Пирсона или критерий
χ 2 (хи-квадрат).
2.8. Сравнение с логнормальным распределением по критерию
χ2 Cлучайные
величины,
подчиняющиеся
нормальному
распределению, часто сопряжены с другими распределениями. В первую очередь это распределение Стьюдента, рассмотренное в п. 2.4, 2 2 и распределение χ . χ - распределение с r степенями свободы
определяется распределением квадратов r независимых случайных величин, каждая из которых подчинена нормальному закону с математическим ожиданием, равным нулю, и дисперсией, равной единице. Функция плотности вероятности распределения имеет вид
111
Pχ 2 (u, r ) =
∞
1 r 2
⎛r⎞ 2 Γ⎜ ⎟ ⎝2⎠
u
r u −1 − 2 2
e
,
(8.1)
r
−1 ⎛r⎞ −x где u > 0 , Γ⎜ ⎟ = ∫ x 2 e dx - гамма-функция, r = n − 2 . ⎝2⎠ 0
Математическое ожидание и дисперсия этого распределения равны r и 2r соответственно. Для
того
чтобы
сравнить
опытное
распределение
по
проницаемостям пород с логнормальным распределением (рис. 2.7) введем величину U , которая характеризует их относительное отклонение в каждой из десяти точек: 10
(N i − N 0 Li )2
i =1
N 0 Li
U ≡χ =∑ 2
где
,
(8.2)
N i - ордината экспериментального распределения на рис. 2.7,
приведенные в табл. 2.1; N 0 = 1000 - общее число исследованных горных пород; Li - функция плотности вероятности логнормального распределения
(7.1),
отвечающие
значениям
аргумента
x ,
отождествляемого с проницаемостью пород k . Отметим, что число степеней свободы r в (8.1) определяется через число
экспериментальных
гистограмма).
В
(8.1)
n (или колонок, если это
точек r =n−2
,
т.к.
подстановка
в
(8.2)
экспериментальной средней и дисперсии накладывает на исходные данные два условия связи, и число независимых данных уменьшается. 2 Из тождественной замены величины U на χ в (8.2) следует, что
правая часть (8.2) является случайным числом, подчиняющимся распределению (8.1). Величина
N i − N 0 Li в формуле (8.2) является
искомой мерой отклонения теоретического и экспериментального распределений,
но
она
является
знакопеременной,
и
при 112
суммировании по всем значениям компенсируются отчасти. Поэтому эта разность возводится в квадрат. Произведение
N 0 Li
дает
теоретическое значение числа горных пород, проницаемости которых лежат в i - том интервале (см. табл. 2.1). В (8.2) разность квадратов 2 сравниваемых величин относится к N 0 Li , чтобы величина χ 2 отражала реальный масштаб величин. По-существу, χ определяется
как сумма относительных дисперсий. В силу громоздкости вычислений мы не будем прослеживать все 2 этапы вычисления χ по формуле (8.2), Приведем первое слагаемое
χ : 2
U1
(4 − 10 =
⋅ 2,109 ⋅ 10 −4 10 3 ⋅ 2,109 ⋅ 10 − 4 3
)
2
≈ 68,09 . В табл. 2.3 приводятся
значения U i для каждой из десяти точек рис. 2.7. Таблица 2.3
1
i
68,09
Ui
2
3
4
5
5,07 4,08
0,59
8,33
6
7
4,61 0,45
8 0
9
10
11,51 13,79
Просуммируем эти данные по всем ячейкам: 10
χ = ∑ U i = 68,09 + 5,071 + 4,077 + 0,594 + 8,333 + 4,607 + 0,451 + 0 + 2
i =1
+ 11,51 + 13,79 ≈ 116 ,51 .
Величина
χ 2 = 116,51
характеризует
(8.3) степень
отклонения
экспериментального и теоретического распределений. Очевидно, что чем она больше, тем больше расхождение между сравниваемыми распределениями. Но достаточно ли она мала, чтобы принять утверждение о совпадении сравниваемых распределений? Для ответа 2 на вопрос вычислим, используя (8.1), критическую величину χ кр ,
вероятность превышения которой составляет всего 0,1%:
113
χ 2 кр
0,001 = 1 −
∫ Pχ (u, r )du ,
(8.4)
2
0
где r = 10 − 2 = 8 . Такое вычисление легко проделать с использованием команды chi2cdf. Пример 2.12.
Определим критическую величину
χ 2 кр , вероятность превышения
которой составляет 1 − 0,999 = 0,001 . Число степеней свободы r = 8 . x = chi2inv(0.999,8) x = 26.1245 Пример 2.13.
Решим задачу, обратную 2.12. Определим вероятность превышения заданной критической величины: p1=chi2cdf(26.1,8); p=1-p1 p = 0.0010
Следовательно, для распределений на рис. 2.7 критическое значение составляет
χ 2 кр = 26,124 .
(8.5)
Из сравнения (8.3) и (8.5) следует, что величина χ 2 = 116,51 существенно превышает критическую величину, и мы не можем утверждать, что распределение числа образцов горных пород по проницаемости Соответствующая
описывается величине
логнормальным
χ 2 = 116,51
распределением.
значение
вероятности
настолько мала, что команда chi2cdf выдает нулевое значение. 2 Отметим, что для χ кр = 80 вероятность составляет всего 4,9 ⋅ 10 −14 :
114
Пример 2.14. format long p1=chi2cdf(80,8); p=1-p1 p =
На
4.884981308350689e-014 первый взгляд низкий уровень
согласия
распределений
представляется неправдоподобным, т.к. из рис. 2.7 визуально следует удовлетворительное согласие эксперимента и аппроксимационной функции. Если проанализировать вклад каждой из десяти точек на рис. 2.7 в величину χ 2 = 116,51 , то из (8.3) видно, что существенный вклад в нее вносят первая и две последние точки. Здесь отметим следующую особенность представления данных рис. 2.7. Они представлены в линейном масштабе и в силу малости их абсолютной разности значения ординат в первой точке кажутся совпадающими: 4 − 0,211 = 3,789
.
Если
представить
те
же
данные
в
полулогарифмическом масштабе (см. рис. 2.8), то мы увидим сравнительно большое относительное отклонение данных в первой и 2 двух последних точках. Это значит, что в критерии χ на степень
согласия данных влияют их относительные отклонения друг от друга, что также следует из (8.2). Пример 2.15. clear; mx=0.783; v=0.144; x=0.1:0.2:1.9; y=[4 126 230 260 130 120 50 30 30 20]; %Построение графика логнормального распределения и опытного распределения проницаемостей в полулогарифмическом масштабе. m2=mx^2; m1=log(m2/(m2+v)^.5); s1=sqrt(log((v+m2)/m2)); f=lognpdf(x,m1,s1)*.2*1000; 115
plot(x,log(f),x,log(y)),grid set(gca,'FontName','Arial Cyr'); xlabel('Проницаемость, мкм^2','FontSize',12) ylabel('Число образцов','FontSize',12) title('Аппроксимация данных логнормальным распределением','FontSize',14) Аппроксимация данных 6
логнормальным распределением
5
Число образцов
4 3 2 1 0 -1 -2
0
0.5
1
Проницаемость, мкм
1.5
2
2
Рис. 2.8. Сравнение экспериментального распределения с логнормальным в полулогарифмическом масштабе. 2 Говоря о критерии χ , хотелось бы отметить одну ее особенность.
Для вычисления искомых вероятностей он предполагает наличие специальных таблиц, которые с разной степенью полноты приводятся в специальных справочниках. Или же, как в нашем случае, нужно иметь соответствующее математическое обеспечение на компьютере. В случае, когда такие источники информации отсутствуют, но 2 значение χ и число степеней свободы r известны, критерием
хорошего согласия распределений может служить приближенное 2 2 равенство χ ≈ r . Если же χ > r полином (11.2) дает плохое согласие с экспериментом. Степень согласия уменьшается для полиномов более высокого порядка, например, n = 7 : Пример 2.22. x=0.1:0.2:1.9; y1=1000*[.004 .126 .23 .26 .13 .12 .05 .03 .03 .02]; d=polyfit(x,y1,7) f=polyval(d,x) plot(x,f,x,y1) set(gca,'FontName','Arial Cyr'); title('Аппроксимация данных полиномом степени n','FontSize',14) xlabel('Проницаемость, мкм^2','FontSize',12) 131
ylabel('Число образцов','FontSize',12) d = 1.0e+004 * Columns 1 through 5 -0.1443
1.0983
-3.4062
5.4788
-4.7614
244.7775
232.3594
161.2008
29.8799
29.2972
20.1595
Columns 6 through 8 2.0582
-0.3276
0.0169
f = Columns 1 through 5 4.5733
121.5728
Columns 6 through 10 99.0593
57.1204
Аппроксимация данных полиномом степени n
300
Число образцов
250
200
150
100
50
0
0
0.5
1
Проницаемость, мкм
1.5
2
2
Рис. 2.17. Аппроксимация экспериментальных данных полиномом седьмой степени. В этом случае имеем
P7 ( x ) = −1,443 ⋅ 10 3 x 7 + 1,098 ⋅ 10 4 x 6 − 3,406 ⋅ 10 4 x 5 + 5,479 ⋅ 10 4 x 4 −
− 4,761 ⋅ 10 4 x 3 + 2,058 ⋅ 10 4 x 2 − 3,276 ⋅ 103 x + 169 .
(11.3) 132
Визуальная оценка расчетной и экспериментальной кривых на рисунках 2.16 и 2.17 показывает, что согласие в 2.17 лучше. 2 Количественный анализ согласия данных на рис. 2.17 по критерию χ
дает
χ 2 ≈ 15,8
величину
правдоподобности
гипотезы
.
Соответствующая описания
вероятность
экспериментального
распределения полиномом (11.3) вычисляется аналогично (10.5): χ2
1 − ∫ Pχ 2 (u , r )du ≈ 0,045 ,
(11.4)
0
где r = 8 . Таким образом, мы получили, что гипотеза о совпадении данных таблицы 1 с полиномом (11.3) выполняется с вероятностью ≈ 4,5% . Это достаточно хорошее совпадение, по крайней мере, если сравнивать с соответствующими оценками для логнормального и гамма-распределений, рассмотренными выше. Мы привели результаты аппроксимации данных полиномами третьей и седьмой степени. Анализ полиномов с другими степенями показывает, что с ростом n , имеется тенденция к лучшему описанию опыта полиномом. Такое утверждение следует из таблицы 2.7, где 2 приведены результаты сравнения по χ , полученные для различных 2 значений n . Из таблицы 2.7 также следует, что величины χ падают 2 не монотонно с ростом n . Например, из сравнения величин χ для
n = 2 и n = 3 следует, что полином меньшей степени как бы лучше согласуется с опытом, хотя из сравнения
χ 2 с числом степеней
свободы r = 8 следует, что оба полинома дают низкую степень согласия. Хотелось бы также указать на отрицательное значение
χ 2 = −127,1 , полученное для n = 5 , чего на самом деле быть не должно, т.к. при этом вероятностная интерпретация данного теста 133
теряет смысл. Как выяснилось, такая ситуация связана с тем, что полином P5 ( x) принимает в одной из десяти фитируемых точек отрицательное значение, малое по абсолютной величине. Повидимому, это связано с тем, что команда polyfit возвращает приближенные результаты, так же, как и любая компьютерная программа. Из таблицы 2.7 также следует, что в случае n ≥ 9 полиномы
практически
сливаются
с
экспериментальным
распределением, и их невозможно различить на графике. Таблица 2.7 4 5
n
1
2
3
χ2
455,4
178,9
400,5
21,1
-127,1
n
6
7
8
9
10
χ2
22,3
15,8
20,2
1,87 ⋅ 10 −15
4,47 ⋅ 10 −17
Аппроксимация данных полиномами, или как иначе говорят, полиномальная интерполяция является глобальной задачей. Это значит, что одна полиномальная функция должна проходить через все заданные точки на графике. Если количество точек сравнительно мало, то такой метод достаточно эффективен, но с увеличением числа точек возникает необходимость введения полиномов более высоких степеней. Из таблицы 7 следует, что начиная примерно с n = 4 и выше, полиномы начинают повторять форму экспериментальной кривой и вплоть до n = 8 степень согласия существенно не меняется. Вообще говоря, специалисты по численному анализу предостерегают от идеи использования интерполянтов степени выше 4 или 5. Альтернативным методом аппроксимации экспериментальных данных является метод так называемых сплайн функций.
134
Примечание: В
возможность
Curve
Fitting
фитирования
Toolbox
данных
предусмотрена
полиномами
с
n≤9
.
Коэффициенты полиномов определяются в окне Fitting →Results. 2.12. Интерполяция кубическим сплайном
Введение сплайнов в методику анализа экспериментальных данных явилось развитием так называемого метода кусочно-линейной интерполяции данных. Название этого метода удачно настолько, что поясняет суть метода: данные интерполируются отрезками, которые соединят между собой исходные точки. Иллюстрацией кусочнолинейной интерполяции является, например, рис. 2.17, на которой десять экспериментальных точек соединены между собой отрезками прямой. В результате получается ломаная линия, производная которой терпит разрыв в точках излома, или, как их иначе называют, в узлах. Следующий
шаг
интерполяции
в
развитии
состоит
во
методики введении
кусочно-линейной кусочно-кубических
интерполянтов, т. е. экспериментальные точки соединяются не отрезками, а полиномами третьей степени. Кубическим сплайном называется кусочно-кубический интерполянт с непрерывными первым и вторым производными. Под термином сплайн в научной литературе подразумевается, как правило, кубический сплайн, если это не оговаривается. На практике встречаются сплайны как низких, так и более
высоких
степеней.
Система
MATLAB
позволяет
интерполировать данные, которые задаются в виде численного массива данных кубическим сплайном с помощью команды spline. На рис. 2.18 приводится результат интерполяции данных таблицы 1 по этой
команде.
иллюстрацию
Команда и
не
сплайн
позволяет
выдает
только
получить
графическую
коэффициенты
в
аппроксимационной функции, которую можно было бы использовать 135
в
дальнейшем.
Но
система
MATLAB
располагает
такими
возможностями. В частности коэффициенты можно получить с помощью вспомогательной функции unmkpp. В рассматриваемом нами случае число интерполируемых точек равно десяти, и они соединяются девятью полиномами третьей степени. Для каждого из них нужно вычислить три коэффициента (без свободного члена). Таким образом, для аналитического описания сплайна на рис. 2.18 требуется
27
коэффициентов,
которые
можно
привести
при
необходимости. Пример 2.23. x=[0.1 .3 .5 .7 .9 1.1 1.3 1.5 1.7 1.9]; y=[.004 .126 .23 .26 .13 .12 .05 .03 .03 .02]; xi=0.1:.001:1.9; f=1000.*spline(x,y,xi); plot(x,1000*y,'o',xi,f,'g'),grid set(gca,'FontName','Arial Cyr'); title('Интерполирование данных кубическим сплайном','FontSize',14) xlabel('Проницаемость, мкм^2','FontSize',12) ylabel('Число образцов','FontSize',12) Интерполирование данных кубическим сплайном
300
Число образцов
250
200
150
100
50
0
0
0.5
1
Проницаемость, мкм
1.5
2
2
Рис. 2.18. Аппроксимация экспериментальных данных сплайном.
136
Примечания:
1.
Параметр xi задает количество точек, через которые
проводится интерполяционная функция; 2.
В
Curve Fitting Toolbox
предусмотрена
возможность
фитирования сплайном с помощь опции Smoothing Spline. 2.13. Метод Монте-Карло
В первой части мы уже пользовались методом Монте-Карло, когда производили розыгрыш скоростей молекул идеального газа. В силу важности метода вернемся к ней еще раз. Математическая статистика рассматривает обобщенные алгоритмы, позволяющие количественно прогнозировать динамический исход различных
математических
моделей. При этом часто оперируют моментами соответствующих статистических
распределений.
Такие
методы
являются
аналитическими. Наряду с ними существует более реалистичный статистический метод. Он позволяет получать не только моменты распределений, но и воспроизводить искомые
распределения для
ограниченной выборки. Это метод Монте-Карло, и по существу является
одним
из
самых
мощных
статистических
методов
исследования статистических распределений. В его основе лежит программа – генератор случайного числа. При обращении к ней она равновероятно выдает случайное число ξ из интервала ξ = [0 ÷ 1] . Случайные
числа
могут
также
подчиняться
различным
статистическим распределениям. В системе MATLAB практически для всех известных распределений имеется генератор случайного числа.
Рассмотрим
равновероятное
распределение
ξ .
Если
распределение f ( x ) задано, то
137
x
∫ f ( x)dx
0 ∞
∫ f ( x)dx
=ξ
.
(13.1)
0
∞
Пусть C = ∫ f ( x)dx , F ( x) = 0
f ( x) . C
Перепишем (13.1) в виде
x
∫ F ( x)dx = ξ .
(13.2)
0
∞
Для F ( x ) является условие нормировки
∫ F ( x)dx = 1 .
Из (13.2)
0
следует, что случайное число ξ равна площади под F ( x ) в пределах
[0 ÷ x ] . Величина x , получаемое из (13.2), и есть случайная величина. Пример 2.24
Формула
(7.1)
описывает
функцию
плотности
вероятности
логнормального распределения. Его параметры , полученные по данным таблицы 1, равны m = −0,350 и σ = 0,459 . Обращение к команде k = lognrnd(-0.35, 0.459) k = 0.5778
возвращает значение k=0,5778. При последующих обращениях мы получим
другие
значения.
Из
их
сравнения
со
средней
2 проницаемостью < k >= 0,783 мкм (см. (2.2)) следует, что полученные
значения k концентрируются в окрестности наиболее вероятного значения. Отметим также, что в системе MATLAB имеется набор генераторов случайных чисел, с которыми можно познакомиться в разделе Help системы MATLAB. По-существу они имеются для всех стандартных статистических распределений. Например – randn – для 138
нормального распределения, gamrnd – для гамма-распределения, chi2rnd – для χ 2 и т.д. Интересно также познакомиться с
приложением randtool, которое запускается в командном окне системы. Оно воспроизводит график для случайной выборки конкретного распределения с заданными параметрами (см. рис. 2.19).
Рис. 2.19. Приложение randtool. Розыгрыш по нормальному распределению со средним 0 и стандартом 1 для 100 событий.
139
Говоря о генераторах случайных чисел, отметим команду, которая не вошла в Statistics Toolbox, а содержится в Communications Toolbox, почему-то.
Это
команда
randint(a,b,[c,d]),
которая
генерирует
случайную матрицу размерностью (a,b), а элементы матрицы принимают значения x в пределах a ≤ x ≤ b . Команда randint(a,b,[c,d]) была бы полезной в примере 1.42 при розыгрыше номеров вопросов в исходных файлах. Но поскольку в нашей комплектации системы Communications Toolbox не содержится, то и не было возможности
воспользоваться командой randint(a,b,[c,d]), и пришлось написать соответствующий блок в программе розыгрыша экзаменационных билетов.
140
ПРИЛОЖЕНИЕ
В этом разделе обсуждаются вопросы, связанные с распределением Пуассона и нормальным распределением (его часто называют также распределением
Гаусса).
Эти
распределения
имеют
общее
происхождение, хотя применяются для анализа явлений, которые могут отличаться принципиально: - Распределение Пуассона – для описания распределения дискретных величин. Примером дискретной величины является, например, число скважин в одном кусте нефтегазового месторождения. - Распределение Гаусса
–
для
описания
непрерывных
статистически независимых величин. Примером непрерывной величины является коэффициент проницаемости пористой среды. В основе обоих двух распределений лежит следующий
закон
распределения результатов опыта. Биномиальное распределение
Пусть производится n независимых испытаний, в каждом из которых событие
A
наступления
может появиться, либо не появиться. Вероятность события
во
всех
испытаниях
постоянна
и
равна
p (следовательно, вероятность не появления q = 1 − p ). Рассмотрим в качестве случайной дискретной величины X число появлений события
A в этих испытаниях. Найдем закон распределения величины X . В n испытаниях, событие A может либо не появиться, появиться 1 раз, либо 2 раза, …, либо
n раз. Вероятности таких исходов вычисляются с
помощью формулы Бернулли:
141
P (n, k ) = Cnk p k ( 1 − p) n − k , k где Cn =
(П 1.1)
n! - число сочетаний из n по k элементов. k! (n − k )!
Распределение называют
вероятностей,
биномиальным
определяемой
формулой
Бернулли
распределением.
Приведем
значения
математического ожидания и дисперсии биномиального распределения:
m = np ,
D = np (1 − p ) . Для иллюстрации на рис. 2.20
приводится
пример биномиального распределения для значений p = 0,2 и n = 300 . Отметим, что степень информативности графика сильно подавлена для значений m ≥ 14 . Поэтому целесообразно такие данные представлять в полулогарифмическом масштабе. Данные на рис. 2.20
получены с
помощью команды binopdf . Пример П.1
Программа построения биномиального распределения (рис. 2.20): x=0:1:19; y=binopdf([0:19],300,0.02); plot(x,y,'b+'),grid set(gca,'FontName','Arial Cyr'); xlabel('Число успешных исходов','FontSize',12) ylabel('Вероятность','FontSize',12) title('Биномиальное распределение','FontSize',14)
142
Биномиальное распределение
0.18 0.16 0.14
Вероятность
0.12 0.1 0.08 0.06 0.04 0.02 0
0
5
10
15
20
Число успешных исходов
Рис. 2.20. Биномиальное распределение.
Распределение Пуассона
Распределение
Пуассона
является
предельным
случаем
распределения Бернулли. Покажем это. Пусть производится n независимых
исследований
образцов
с
целью
измерения
коэффициента проницаемости. Обозначим через m число образцов, проницаемости
которых
лежат
в
заданном
Δk
интервале
проницаемостей. При малых Δk нужно исследовать большое число образцов, чтобы некоторое количество из них имели значения проницаемости в интервале k ÷ k + Δk . Вероятность отбора m образцов
из
n
обозначим
через
p=
m n
.
Далее
сделаем
предположение, что среднее число отборов нужного образца остается неизменным для различных произведение
n⋅p = λ
значений n . Это означает, что сохраняет
постоянное
значение.
Воспользуемся формулой Бернулли для вычисления вероятности:
P (n, m) =
n(n − 1)(n − 2 )... (n − (m − 1)) m n−m p (1 − p ) = m!
143
λ⎞ n(n − 1)(n − 2)... (n − (m − 1)) ⎛ λ ⎞ ⎛ = ⎜ ⎟ ⎜1 − ⎟ m! n⎠ ⎝n⎠ ⎝ m
n−m
.
Далее вычислим предел Π (m) = lim n→∞
=
λm m!
⋅ lim n→∞
λ⎞ n(n − 1)(n − 2 )... (n − (m − 1)) ⎛ λ ⎞ ⎛ P (n, m) = ⎜ ⎟ ⎜1 − ⎟ m! n⎠ ⎝n⎠ ⎝ m
n−m
=
n−m ⎡ ⎛ λ⎞ ⎤ m − 1⎞ ⎛ 1⎞ ⎛ 2⎞ ⎛ ⎟ ⋅ ⎜1 − ⎟ ⎥ = ⎢1 ⋅ ⎜1 − ⎟ ⋅ ⎜1 − ⎟ ⋅ ... ⋅ ⎜1 − n⎠ ⎝ n⎠ n ⎠ ⎝ n ⎠ ⎥⎦ ⎝ ⎢⎣ ⎝
=
n
λm
m! lim n→∞
λ⎞ λ⎞ ⎛ ⎛ ⎜1 − ⎟ ⋅ lim ⎜1 − ⎟ n⎠ n⎠ ⎝ n→∞ ⎝
−m
=
λm m!
⋅ e− λ ⋅ 1 .
Мы получили распределение Пуассона
Π(λ , m) =
λm e− λ m!
.
(П.1.2)
Полученная формула позволяет вычислить вероятность получения m образцов
горных пород,
проницаемости которых попадают в узкий
интервал Δk , если среднее число m таких образцов равно λ . В силу сделанных при получении этого распределения предположений, его часто называют законом редких событий. На рис. 2.21 приводится распределение Пуассона для двух значений
m , полученное с
помощью команды poisspdf. Пример П.3 x=0:20; y1=poisspdf([0:20],2.5); y2=poisspdf([0:20],7.5); plot(x,y1,'b+',x,y2,'b*'),grid set(gca,'FontName','Arial Cyr'); xlabel('Число успешных исходов','FontSize',12) ylabel('Вероятность','FontSize',12) title('Распределение Пуассона','FontSize',14) hgt=gtext('+ - <m>=2,5'); hgt=gtext('* - <m>=7,5'); 144
Распределение Пуассона
0.35 0.3
+ - <m>=2,5 * - <m>=7,5
Вероятность
0.25 0.2 0.15 0.1 0.05 0
0
5
10
15
20
Число успешных исходов
Рис. 2.21. Распределение Пуассона для двух значений средней величины. Нормальное распределение
Нормальное распределение является непрерывным распределением и, в частности, получается из распределения Пуассона при больших значениях m . В этом случае дискретные величины можно рассматривать как непрерывный набор чисел. Для перехода от распределения воспользуемся
Пуассона формулой
к
нормальному
Стирлинга,
распределению
позволяющей
вычислять
факториалы больших чисел:
m! =
2πm ⋅mm e− m ( 1 +
1 1 1 + + + ...) . 2 12m 288m 51840m3
( П.1.3)
Для m > 10 можно ограничиться первым членом ряда. Так в случае
m = 10 относительная погрешность вычислений составляет около 0,8%. Заменим в (П.1.2) m! по формуле Стирлинга (П.1.3): m
p( m) ≈
1 ⎛ λ ⎞ m− λ ⎜ ⎟ e . 2πm ⎝ m ⎠
(П.1.4)
145
Из
приведенных
Стирлинга
выше
следует,
что
рассуждений
относительно
распределение
Пуассона
формулы становится
симметричным примерно при m ≥ 10 . Тогда случайные значения m , которые следуют из этого распределения концентрируются с большей вероятностью в окрестности средней величины λ . С ростом λ относительная ширина области значений m сужается, и при больших λ имеет место соотношение
m−λ
λ