
- •Раздел 10. Основы анализа экспериментальных данных
- •29.2. Классификация погрешностей
- •30. Обзор программного обеспечения для выполнения анализа, обработки и представления экспериментальных данных
- •30.1. Математические (символьные) вычисления
- •30.2. Расчеты и статистическая обработка результатов
- •30.2.1. MathCad
- •30.2.2. Matlab - Scilab - Octave
- •30.3. Построение графиков
- •30.3.1. Sigma Plot
- •30.3.2. Origin
- •30.3.3. Gnuplot
- •30.4. Работа с текстом
- •30.4.1. Ms Word
- •30.4.2. OpenOffice.Org
- •31. Анализ результатов измерений случайной величины.
- •31.1. Гистограмма. Эмпирическое распределение результатов наблюдений
- •31.2. Результат измерения. Доверительный интервал
- •31.3. Нормальное или гауссово распределение
- •31.4. Выборочные дисперсия и среднеквадратичное отклонение
- •31.5. Среднеквадратичная ошибка среднего.
- •31.6. Приборная погрешность. Класс точности прибора.
- •31.7. Сложение случайной и приборной погрешностей. Полная погрешность измерения
- •31.8. Запись и округление результата измерения
- •32. Ошибки косвенных измерений
- •32.1. Функция одной переменной
- •32.2. Функция нескольких переменных
- •32.3. Ошибки и методика эксперимента
- •33. Анализ результатов совместных измерений
- •33.1. Цель и особенности эксперимента по определению функциональной зависимости
- •33.2. Некоторые определения
- •33.3. Интерполяция
- •33.3.1. Глобальная интерполяция
- •33.3.2. Локальная интерполяция
- •33.3.2.1. Кусочно-линейная интерполяция
- •33.3.2.2. Интерполяция кубическими сплайнами
- •33.3.2.3. Интерполирование b-сплайнами
- •33.4. Экстраполяция
- •33.5. Сглаживание данных
- •33.6. Регрессия
- •33.6.1. Выбор вида математической модели
- •33.6.2. Метод наименьших квадратов.
- •33.6.2.1. Линейная зависимость.
- •33.6.2.2. Линеаризация
- •33.6.2.3. Полиномиальная регрессия
- •33.6.2.4. Регрессия линейной комбинацией функций
- •33.6.2.5. Регрессия общего вида.
33.3.2.3. Интерполирование b-сплайнами
Трудно спорить с тем, что интерполирование экспериментальной зависимости кубическими сплайнами является наиболее эффективным и в то же время простым методом соединения точек гладкой кривой. Однако в некоторых случаях традиционный алгоритм построения сплайна с помощью фрагментов кубических парабол со сшивкой в точках опытных данных может быть непригодным для решения поставленных задач.
Если обычный кубический сплайн по тем или иным причинам будет не очень хорошо, как вам покажется, интерполировать данные, то попробуйте использовать возможности приближения B-сплайнами Mathcad.
Для построения кривой B-сплайна в программе Mathcad имеется специальная функция bspline(x,y,u,n). В общем, она предназначена для того же, что и остальные функции семейства *spline, а именно: для вычисления матрицы коэффициентов создаваемого сплайна.
Основным принципиальным отличием этого типа приближения от простой кубической сплайн-интерполяции является то, что вы самостоятельно можете определить, из фрагментов графиков полиномов какого порядка будет составлена ваша интерполирующая кривая. Сделать это можно, задав соответствующим образом величину параметра n функции bspline(x,y,u,n). Так, если вы хотите приблизить опытную зависимость ломаной линией, то определите n как 1. Если вы считаете, что опытный закон скорее параболический, положите n=2. И, наконец, если вы хотите провести через точки данных кубический сплайн, то n должно быть задано как 3.
Вторым отличием, существенно расширяющим возможности B-сплайнов по сравнению с обычными кубическими, является то, что вы самостоятельно произвольным образом можете определять точки, в которых будет произведена сшивка различных фрагментов кривой. Как вы помните, при построении простого кубического сплайна, фрагменты кривых сшивались в самих экспериментальных точках. А это не всегда оправданно, хотя бы в связи с тем, что при этом точки данных очень часто оказываются точками перегиба интерполирующей кривой, что значительно снижает ее корректность в случае использования сплайна в качестве функции прогноза. Иногда бывает гораздо эффективнее сшить элементарные сплайны где-нибудь между экспериментальными точками: при этом результирующая кривая куда лучше отображает реальные процессы (что очень важно в том же моделировании).
Чтобы провести сплайн со сшивками в точках, отличных от опытных, вам нужно будет задать вектор, содержащий их координаты по оси X. При этом точки сшивки должны быть рассортированы в порядке возрастания, и значение первой из них должно быть меньше либо равно величине соответствующей координаты левой крайней точки экспериментальной выборки (и соответственно последняя сшивка должна быть расположена правее ее крайней правой точки (или совпадать с нею)). Если вам нужно построить линейный B-сплайн, то сшивок должно быть задано столько же, сколько имеется точек в векторах данных. При приближении зависимости фрагментами парабол, в векторе координат сшивок их должно быть на одну меньше, чем имеется экспериментальных точек. И на целых две точки меньше, чем имеется элементов в выборке, придется определить в рассматриваемом векторе сшивок в том случае, если используемые сплайны - кубические. Кстати, продолжением кубического B-сплайна за пределы области приближаемых данных будет именно кубическая парабола (как вы помните, в зависимости от задания краевых условий, экстраполяция за пределами экспериментальных точек может быть проведена, в общем случае, полиномами 1-3 й степеней).
Так как интерполирование с помощью B-сплайнов является технически более непростой задачей, чем построение кривой приближения с использованием обычных функций кубического сплайна, то рассмотрим его более обстоятельно.
1. Сначала нужно организовать опытные данные в виде двух векторов (элементы вектора с координатами по X должны быть отсортированы по возрастанию). Чтобы существовала возможность сравнения, используем для построения сплайна те же данные, что и в предыдущем разделе.
2. Задаем вектор сшивок элементарных сплайнов. Как было указано выше, это следует сделать с учетом порядков приближающих полиномов. Мы же попробуем определить векторы сшивки для сплайнов всех трех типов (сравните количество элементов векторов).
3. Задаем параметры сплайн-кривой с помощью bspline(x,y,u,n), где x и y - векторы опытных данных, u - вектор сшивок, n - порядок используемых полиномов.
4. Задаем функции сплайнов с помощью функции interp(s,x,y,t)
5. Строим графики полученных интерполирующих сплайнов (рис. 33.7).
При использовании метода B-сплайнов, для большей корректности на графике стоит отобразить не только экспериментальные точки, но и точки, в которых была произведена сшивка фрагментов приближающих полиномов. Сделать это можно очень просто, внеся в нижний маркер графической области имя вектора сшивок, а в правый - результат вычисления для этого вектора значений функции сплайна.
Понять принципиальное различие при использовании B-сплайнов и более простых методов интерполирования можно, сравнив график рис. 5 с рис. 33.7. С первого взгляда в обоих случаях вы, наверное, не заметите особой разницы в ломаных, построенных по двум различным методикам. Однако, изучив их более внимательно, вы увидите, что при применении функции linterp переломы совпадают с точками данных, а при приближении линейным B-сплайном они располагаются в точках сшивок. Аналогичная ситуация наблюдается и при интерполяции гладкими кривыми, правда, при этом нужно говорить не о переломах, а о перегибах.
Какой тип интерполяции лучше использовать - на этот вопрос вы должны ответить исходя из собственного опыта и типа решаемой задачи. Однако наиболее общий совет все же можно дать: сначала попробуйте применить функции простого кубического сплайна. В том же случае, если результат его работы вас не устроит, попытайтесь поэкспериментировать с порядком используемых полиномов и точками их сшивок с помощью соответствующих функций B-сплайна.
Рис. 33.7. Решение задачи интерполяции В-сплайнами в MathCAD