Как сгладить график в маткаде
Перейти к содержимому

Как сгладить график в маткаде

  • автор:

4.10. Сглаживание функций

Задача сглаживания таблично заданных функций часто возникает при обработке экспериментальных данных, поскольку при проведении эксперимента возможны разного рода погрешности, влияние не учитываемых факторов и т.п. Для сглаживания данных в Mathcad есть несколько функций, использующих разные алгоритмы. Одна из них — ksmooth(vx,vy,b) возвращает n- мерный вектор сглаженных значений вектора vy , вычисленных на основе распределения Гаусса. vx и vy — n-мерные векторы действительных чисел. Полоса пропускания b управляет степенью сглаживания.

Задача : Выполнить сглаживание таблично заданной функции (табл. 4.6) и построить графики.

Как сгладить график в маткаде

БлогNot. Сглаживающий сплайн в MathCAD

Сглаживающий сплайн в MathCAD

В отличие от интерполяционного сплайна, проходящего через известные точки i,fi> и уже реализованного в MathCAD с помощью встроенных функций interp и cspline , сглаживающий сплайн через измерения проходить не обязан. Зато он гораздо гибче и способен, при соответствующей настройке, компенсировать «аномальные» измерения или просто «загладить» данные не хуже МНК (точней, лучше — единичный «выброс» fi не «потянет» вверх или вниз весь сглаживающий сплайн, в отличие от полинома МНК со степенным базисом).

Постановка задачи следующая: пусть на сетке x1<x2<. <xN заданы измеренные значения f1, f2, . , fN некоторой функции f(x) . Требуется найти дважды непрерывно дифференцируемую функцию s(x) , которую на каждом интервале [xi,xi+1] можно представить в виде

где h=x-xi — расстояние до ближайшего слева узла сетки, c3,i , c2,i , c1,i , i = 1, 2, . N — 1 — коэффициенты сглаживающего сплайна на i-ом интервале по оси x , а yi — значения сглаживающего сплайна, вычисленные в узлах сетки xi , i = 1, 2, . N .

  • вещественный массив df длины N , dfi>0 , задаёт значения весов в узлах интерполяции, чем больше вес узла, тем сильнее будет заглаживаться функция в его окрестностях. При отсутствии дополнительной априорной информации о восстанавливаемой зависимости можно принять значения dfi одинаковыми, например, равными 1 ;
  • «глобальный» параметр сглаживания — вещественное значение sm (обозначается также α), sm>0 , задаёт общую меру сглаживания данных — с его ростом она увеличивается.

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

В предлагаемом решении построение сглаживаюшего сплайна реализовано с помощью двух функций.

Функция SmoothSpline(x,f,df,sm) возвращает объект, состоящий из матрицы c коэффициентов сглаживающего сплайна размерностью 3*(N-1) и вектора y значений сглаживающего сплайна в узлах сетки (размерностью N ). Код функции здесь не привожу из-за её громоздкости — полторы страницы. Его можно увидеть, скачав приложенный файл, а вызвать функцию можно так:

вызов функции SmoothSpline
вызов функции SmoothSpline

Обратите внимание, что третье измерение «аномально», а остальные представляют собой значения f(xi)=xi 2 . Соответственно, завышен вес df3 (здесь и далее элементы матриц и векторов нумеруются с единицы, поэтому файл MathCAD начинается определением системной переменной ORIGIN:=1 ).

Также показан неплохой (для небольших значений N ) способ выбора значения параметра сглаживания sm .

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

Функция дополнительно использует только служебный вещественный массив r размерностью 7*(N+2) , то есть, достаточно экономична по памяти.

Тест и результат по нему сверен с материалами научно-исследовательского вычислительного центра МГУ, всё совпало 🙂

Вторая функция — GetSmoothSpline(x,dx,y,c) занимается построением сглаживающего сплайна по известной матрице коэффициентов c и значениям сплайна yi в узлах сетки xi , аргумент x внутри функции меняется от x1 до xlength(x) с шагом dx . Функция вернёт матрицу из двух вектор-столбцов — в первом будут содержаться значения аргумента, во втором — вычисленные значения сплайна. Воспользоваться функцией и затем наглядно вывести результаты сглаживания можно, например, так:

вызов функции GetSmoothSpline
вызов функции GetSmoothSpline

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

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

данные с "аномальными" измерениями
данные с "аномальными" измерениями

Вот как справился сглаживающий сплайн с этими двумя геями «выбросами»:

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

Видно, что отклонений он почти не заметил.

Ну а хотите ещё лучше — обоснованно выбирайте веса узлов и параметр сглаживания.

Разумеется, сглаживающий сплайн не всесилен — например, если «перемельчить» сетку и переборщить с количеством «аномалий», он может пойти «вразнос», тогда для обработки таких данных придётся привлекать аппарат, способный учесть качественные априорные ограничения («а вот на этом интервале функция должна возрастать!»). Такой аппарат известен как дескриптивные сплайны, но статей о них я не писал уже давно, может, когда-нибудь 🙂

Построение графиков в MathCad

В статье рассмотрены основные возможности построения графиков в программе mathcad. Для инженерных и студенческих расчетов, как правило, достаточно знать следующие методы построения графиков:

Построение графика по точкам

Чтобы построить график по точкам в декартовой системе координат необходимо задаться исходными данными. Создадим две матрицы-столбца, назовем их X и Y соответственно и заполним их значениями. Для создания матриц-столбцов воспользйтесь панелью Matrix. В панели matrix нажмите на кнопку под названием Matrix and vector. В появившемся окне введите количество строк и столбцов. Для матрицы-столбца количество столбцов будет очевидно ровно одному. Количество строк зависит от количества точек. В нашем случае это 9 точек. После внесения данных нажмите ОК (см. рис. 1)

Рис. 1. Создание матриц-столбцов

В свободном поле mathcad появится пустая матрица-столбец. Поместите курсор в матрицу и с использованием клавиш «стрелка» и «пробел» добейтесь положения курсора, как показано на рисунке 2а ниже. После чего введите с клавитуры символ двоеточия «:«. У вас должна получиться маска как на рисунке 2b. Теперь вы можете присводить содержимое матрицы какой то переменной. Например переменной X (см. рис. 2c). Заполните матрицу в соответсвии с рисунком 2 и затем повторите те же самые действия для создания матрицы-столбца Y.

Рис. 2. Заполнение матриц-столбцов для графика

На панели Graph найдите кнопку X-Y plot и щелкните по ней левой кнопкой мыши. У вас появится маска для построения графика. В черных прямоугольниках можно вводить имена осей абсцисс и ординат, а так же область отображения кривой графика (см. рис. 3)

Рис. 3. Создание заготовки для графика

Введите под осью абсцисс имя матрицы-столбца X, а слева от оси ординат имя матрицы-столбца Y. В окне графика вы увидите ломаную линию, соединящие координаты, указанные в матрицах столбцах (см. рис. 4)

Рис. 4. График по точкам

Оформление кривой графика по умолчанию, как правило, лишено наглядности и читабельности. Средства mathcad позволяют настраивать отображение графиков. Для этого щелкните 2 раза левой кнопкой мыши по изображению графика и в появившемся окне настройте внешний вид кривой, координатных осей и прочих элементов. Возможности mathcad позволяют: изменять цвет линий, их толщину и тип; нанести сетку на поле графика; подписывать оси координат; изменять формат числовых данных; вводить дополнительную (вторичную, второстепенную) ось ординат. После настройки всех элементов нажмите ОК и вы заметите, что ваш график приобрел более привлекательный вид (см. рис. 5)

Рис. 5. Настройка отображения графика

Построение графика функции f(x)

Возможно самой распространенной задачей в студенческой и инженерной практике является построение графика функции f(x). В mathcad это делается в следующем порядке. С помощью клавиатуры и панели calculator вводится функция f(x), как показано на рис. 6. Для создания функции необходимо использовать равно с двоеточием «:=» (опертор присваивания). Далее в панели Graph найдите иконку X-Y Plot, щелкните по ней и создайте заготовку для графика. В черных прямоугольниках-маркерах введите имя функции и название аргумента. После отображения кривой зайдите в свойства графика и настройте отображение вашей кривой

Рис. 6. Построение графика функции f(x)

Чтобы построить два графика и более на одном поле (в тех же осях координат) сделайте следующее: введите вторую функцию, например y(x):=. , поместите курсор мыши в маркер поля графика, где уже указана первая функция f(x) и введите запятую. Таким образом mathcad зоздаст второй маркер для ввода очередной функции. Введите вашу вторую функцию и нажмите enter. Если имя аргумента обеих функций совпадает, то вторая кривая отобразится в поле графика, в противном случае, под осью абсцисс введите через запятую имя аргумента второй функции. Образец можно посмотреть ниже на рис. 7



Рис. 7. Построение двух графиков функции

Построение эпюры в mathcad

Чтобы построить классическую эпюру в mathcad нужно выполнить следующие действия:

— ввести функцию в виде y = f(x), как это показано в примерах выше;
— ввести такназываемую ранжинрованную переменную в виде i = a, a-dt..b с определенным шагом dt;
— создать поле графика и ввести туда функции f(x) и f(i) с соответствующими аргументами
— настроить визуализацию функции f(i) в соответствии с требованиями к оформлению эпюр в вашем ВУЗе или компании

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

Рис. 8. Ввод ранжированной переменной

Ранжированные переменные можно использовать для построения эпюр распределения физических величин. Для этого постройте ваш исходный график одним из методов, описанных выше. Пусть это будет график f(x):=x^2. Затем создайте ранжированную переменную с шагом 0.5 как указано в примере ниже

Рис. 9. Ввод ранжированной переменной

Далее создайте поле для графика и около оси ординат введите две функции: f(x) и f(i). Под осью абсцисс также введите соответсвующие аргументы: x и i. Вы должны увидет обычную параболу как на рисунке ниже

Рис. 10. Построение эпюры. Шаг 1

Для получения эпюры нужно настроить отображение функции f(i) в свойствах графика. Щелкните 2 раза по графику чтобы вызвать меню настройки отображения графика. Перейдите во вкладку traces. В списке Legend Label найдите имя trace 2. В столбце Type для trace 2 из выпадающего списка выберете тип графика stem. В столбце Symbol уберите отображение элементов. Во вкладке X-Y Axes выберете для Axis Style тип Crossed. Нажмите ОК и вы увидете эпюру. Вы можете настроить ее внешний вид по желанию.


Рис. 11. Построение эпюры. Шаг 2

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

Рис. 12. Построение эпюры. Шаг 3

Построение графика в полярных координатах в mathcad

Введите функцию, которую необходимо построить в полярных координатах. Для примера возьмем y(x):=2*sin(3*x+0.5)

Для построения графика в полярных координатах нажмите кнопку Polar Plot из панели Graph

Рис. 13. Создание загатовки для графика в полярных координатах

Вы увидете пустое поле графика. В черном маркере слева введите имя введенной функции y(x). В маркере снизу введите аргумент x и нажмите enter. Вы увидете «трилистник». Внешний вид графика можно настроить щелкнув два раза по графику левой кнопкой мыши. В появившемся окне представлен широкий набор инструментов для настройки отображения.

Рис. 14. Построение графика в полярной системе координат

Donec eget ex magna. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque venenatis dolor imperdiet dolor mattis sagittis. Praesent rutrum sem diam, vitae egestas enim auctor sit amet. Pellentesque leo mauris, consectetur id ipsum sit amet, fergiat. Pellentesque in mi eu massa lacinia malesuada et a elit. Donec urna ex, lacinia in purus ac, pretium pulvinar mauris. Curabitur sapien risus, commodo eget turpis at, elementum convallis elit. Pellentesque enim turpis, hendrerit tristique.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis dapibus rutrum facilisis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam tristique libero eu nibh porttitor fermentum. Nullam venenatis erat id vehicula viverra. Nunc ultrices eros ut ultricies condimentum. Mauris risus lacus, blandit sit amet venenatis non, bibendum vitae dolor. Nunc lorem mauris, fringilla in aliquam at, euismod in lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In non lorem sit amet elit placerat maximus. Pellentesque aliquam maximus risus, vel venenatis mauris vehicula hendrerit.

Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque venenatis dolor imperdiet dolor mattis sagittis. Praesent rutrum sem diam, vitae egestas enim auctor sit amet. Pellentesque leo mauris, consectetur id ipsum sit amet, fersapien risus, commodo eget turpis at, elementum convallis elit. Pellentesque enim turpis, hendrerit tristique lorem ipsum dolor.

Встроенные функции для сглаживания

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

  • medsmooth(y,b) — сглаживание алгоритмом "бегущих медиан";
  • ksmooth(x,y,b) — сглаживание на основе функции Гаусса;
  • supsmooth(x,y) — локальное сглаживание адаптивным алгоритмом, основанное на анализе ближайших соседей каждой пары данных;
    • х — вектор действительных данных аргумента (для supsmooth его элементы должны быть расположены в порядке возрастания);
    • у — вектор действительных значений того же размера, что и х;
    • b — ширина окна сглаживания.

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

    Подробную информацию об алгоритмах, заложенных в функции сглаживания, Вы найдете в справочной системе Mathcad в статье Smoothing (Сглаживание), находящейся в разделе Statistics (Статистика).

    Часто бывает полезным совместить сглаживание с последующей интерполяцией или регрессией. Соответствующий пример приведен в листинге 15.16 для функции supsmooth. Результат работы листинга показан на рис. 15.18 (кружки обозначают исходные данные, крестики — сглаженные, пунктирная кривая — результат сплайн-интерполяции). Сглаживание тех же данных при помощи "бегущих медиан" и функции Гаусса с разным значением ширины окна пропускания показаны на рис. 15.19 и 15.20, соответственно.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *