Как сделать интерполяцию в маткаде
Перейти к содержимому

Как сделать интерполяцию в маткаде

  • автор:

Линейная интерполяция

Для построения линейной интерполяции служит встроенная функция linterp(х, у, t), которая аппроксимирует данные векторов х и у кусочно-линейной зависимостью. Здесь х – вектор действительных данных аргумента; у – вектор действительных данных значений того же размера; t – значение аргумента, при котором вычисляется интерполирующая функция.

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

Чтобы осуществить линейную интерполяцию с помощью MathCAD , выполняют следующие действия.

В главном меню необходимо выбрать «Вид – Панели инструментов – Матрица», после чего в появившейся панели « Matrix » выбрать «Создать матрицу» на 1 строку и 7 столбцов (по числу экспериментальных точек) и ввести координаты по оси x . Далее с помощью элемента «Транспонирование матрицы» той же панели транспонировать матрицу данных

х := (0 1 2 3 4 5 6) Т .

Аналогичную операцию проводим с координатами по оси у

у := (4,7 2,6 3,5 4,4 3,3 5,2 5,1) Т .

Далее записываем функцию линейной интерполяции

A (t) := linterp(x, y, t).

Чтобы построить график, необходимо выбрать в главном меню «Вид – Панели инструментов – График», далее на появившейся панели « Graph » выбрать элемент «Декартов график», после чего на рабочей области программы MathCAD появится область построения графика. По оси ординат области построения графика необходимо ввести « A ( t ), y », а по оси абсцисс – « t , x ». Далее двойным щелчком левой кнопки мыши по области построения графика необходимо вызвать панель его форматирования, на которой выбрать закладку «Трассировки», выделить мышью « trace 2» и в поле «Символ» выбрать « dmnd ». Кроме того, для удобства можно установить диапазон значений по оси абсцисс путём ввода соответствующих значений в области на оси x графика. Поскольку значения по оси х изменяются от 0 до 6, их и введём.

Встроенная функция l interp позволяет вычислить значения функции в требуемых точках. Например, для точки с аргументом x = 1,5 расчёт значения функции интерполяции A ( t ) будет выглядеть следующим образом: linterp ( x , y , 1,5) = 3,05.

Как сделать интерполяцию в маткаде

БлогNot. MathCAD: интерполяция одной формулой

MathCAD: интерполяция одной формулой

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

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

Возьмём 2 любых вектора одинаковой размерности, содержащих значения Xi и Y(Xi) соответственно:

Нумерация элементов векторов и матриц для удобства установлена со значения 1 вместо стандартного 0 .

Для N точек на плоскости построить регрессию порядка M , 0<M<N , можно, создав простую функцию вида

Функция считает значение полинома степенной регрессии в заданной точке x малое.

Если вместо 4 поставить 1 — получится МНК первого порядка (сглаживание точек прямой линией), при значении 2 построится кусочек параболы, а при максимально допустимом для 5 точек значении порядка регрессии 4 мы построили кривую, совпадающую и с каноническим степенным полиномом, и с полиномом Лагранжа.

В последних версиях MathCAD значение интерполяционного полинома степени N-1 в точке x малое можно вычислить и функцией

Неудобство лишь в том, что p(x) будет возвращать вектор из двух элементов (обратите внимание, что выводится на график значение p(x)1 ). Зато во втором элементе сразу будет «лежать» погрешность в точке вычисления.

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

На каждом интервале [Xi,Xi+1] такой сплайн представляется функцией от третьей степени x и является гладкой дважды дифференцируемой кривой.

Вот реализация всех трёх формул и график:

Далее показан скриншот соответствующего расчёта в Mathcad Prime 7 и прикреплён документ этой линейки Mathcad.

Интерполяционный полином, Кубический интерполяционный сплайн, МНК в Mathcad Prime 7
Интерполяционный полином, Кубический интерполяционный сплайн, МНК в Mathcad Prime 7

8. ИНТЕРПОЛЯЦИЯ И РЕГРЕССИЯ В СРЕДЕ MATHCAD

Основным объектом исследования, как правило, является выборка экспериментальных данных, которая, чаще всего, представляется в виде массива, состоящего из пар чисел (xi,yi). В связи с этим возникает задача аппроксимации конкретной зависимости y(xi) непрерывной функцией f(х). Функция f(х), в зависимости от специфики задачи, может отвечать различным требованиям:

— f(х) должна проходить через точки (xi,yi), т.е. f(xi) = yi, i = 1…n. В этом случае говорят об интерполяции данных функцией f(х) во внутренних точках между xi или экстраполяции за пределами интервала, содержащего все хi;

— f(х) должна некоторым образом (например, в виде определенной аналитической зависимости) приближать y(xi), не обязательно проходя через точки (xi,yi).

Для построения интерполяции-экстраполяции в MathCAD имеется несколько встроенных функций, позволяющих "соединять" точки выборки данных (xi,yi) кривой разной степени гладкости. По определению интерполяция означает построение функции А(х), аппроксимирующей зависимость у(х) в промежуточных точках (между xi). Поэтому интерполяцию еще по-другому называют аппроксимацией. В точках xi значения интерполяционной функции должны совпадать с исходными данными, т.е. A(xi) = y (хi).

Рис. 8.1. Линейная интерполяция

Самый простой вид интерполяции – линейная, которая представляет искомую зависимость А(х) в виде ломаной линии. Интерполирующая функции А(х) состоит из отрезков прямых, соединяющих точки.

Для построения линейной интерполяции служит встроенная функция linterp (рис. 49) – функция, аппроксимирующая данные векторов х и у кусочно-линейной зависимостью linterp (х, у, t), где х – вектор действительных данных аргумента; у – вектор действительных данных значений того же размера; t – значение аргумента, при котором вычисляется интерполирующая функция.

Элементы вектора х должны быть определены в порядке возрастания, т.е. x1<x2<xj<…<xN.

Чтобы осуществить линейную интерполяцию, надо выполнить следующие действия:

1) ввести векторы данных х и у (первые две строки листинга);

2) определить функцию linterp(x,y,t);

3) вычислить значения этой функции в требуемых точках, например:

linterp(x, y, 2.4) = 3.52;

linterp(х, у, 6) = 5.9,

или построить ее график.

Функция A(t) на графике имеет аргумент t, а не х. Это означает, что функция A(t) вычисляется не только при значениях аргумента (т.е. в семи точках), а при го

раздо большем числе аргументов в интервале (0, 6), что автоматически обеспечивает MathCAD. Просто в данном случае эти различия незаметны, т.к. при обычном построении графика функции от векторного аргумента х MathCAD по умолчанию соединяет точки графика прямыми линиями (т.е. скрытым образом осуществляет их линейную интерполяцию), как показано на рис. 49.

В большинстве практических приложений желательно соединить экспериментальные точки не ломаной линией, а гладкой кривой. Лучше всего для этих целей подходит интерполяция кубическими сплайнами, т.е. отрезками кубических парабол interp(s, x, y, t) – функция, аппроксимирующая данные векторов х и у кубическими сплайнами:

s – вектор вторых производных, созданный одной из сопутствующих функций cspline, pspline или lspline;

х – вектор действительных данных аргумента, элементы которого расположены в порядке возрастания;

у – вектор действительных данных значений того же размера;

t – значение аргумента, при котором вычисляется интерполирующая функция.

Сплайн-интерполяция в MathCAD реализована чуть сложнее линейной. Перед применением функции interp необходимо предварительно определить первый из ее аргументов – векторную переменную s. Делается это при помощи одной из трех встроенных функций тех же аргументов (х,у):

lspline(x, y) – вектор значений коэффициентов линейного сплайна;

pspline(х, у) – вектор значений коэффициентов квадратичного сплайна;

cspline (х, у) – вектор значений коэффициентов кубического сплайна:

х, у – векторы данных.

Выбор конкретной функции сплайновых коэффициентов влияет на интерполяцию вблизи конечных точек интервала.

Смысл сплайн-интерполяции заключается в том, что в промежутках между точками осуществляется аппроксимация в виде зависимости

A(t) = at 3 + bt 2 + ct + d.

Коэффициенты а, b, с, d рассчитываются независимо для каждого промежутка исходя из значений yi в соседних точках. Этот процесс скрыт от пользователя, поскольку смысл задачи интерполяции состоит в выдаче значения A(t) в любом точке t (рис. 50). Выбор вспомогательных функций cspline, pspline, lspiine существенно влияет на поведение А(t) вблизи граничных точек рассматриваемого интервала (0, 6) и особенно разительно меняет результат экстраполяции данных за его пределами.

Если на графике задать построение функции А(х) вместо A(t), то будет получено просто соединение исходных точек ломаной. Так происходит потому, что в промежутках между точками вычисления интерполирующей функции не производятся.

Более сложный тип интерполяции – так называемая интерполяция В-сплайнами (рис. 51). В отличие от обычной сплайн-интерполяции сшивка элементарных В-сплайнов производится не в точках xi, а в других точках ui, координаты которых предлагается ввести пользователю. Сплайны могут быть полиномами 1, 2 или 3 степени (линейные, квадратичные или кубические). Применяется интерполяция В-сплайнами точно так же, как и обычная сплайн-интерполяция, различие со

стоит только в определении вспомогательной функции коэффициентов сплайна.

interp (s, х, у, t) – функция, аппроксимирующая данные векторов х с помощью В-сплайнов.

bspline(x, y, u, n) – вектор значений коэффициентов В-сплайна:

s – вектор вторых производных, созданный функцией bspiine;

х– вектор действительных данных аргумента, элементы которого расположены в порядке возрастания;

у – вектор действительных данных значений того же размера;

t – значение аргумента, при котором вычисляется интерполирующая функция;

u – вектор значений аргумента, в которых производится сшивка В- сплайнов;

n – порядок полиномов сплайновой интерполяции (1, 2 или 3).

Размерность вектора u должна быть на 1, 2 или 3 меньше размерности векторов х и у.

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

этой точки зрения разницы в применении в MathCAD между интерполяцией и экстраполяцией нет.

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

Стандартные функции интерполяции-экстраполяции стоит применять только в непосредственной близости границ интервала данных. В MathCAD имеется более развитый инструмент экстраполяции, который учитывает распределение данных вдоль всего интервала. В функцию predict встроен линейный алгоритм предсказания поведения функции, основанный на анализе, в том числе осцилляции:

predict (у, m, n) – функция предсказания вектора, экстраполирующего выборку данных:

у – вектор значений, взятых через равные промежутки значений аргумента;

m – количество последовательных элементов вектора у, согласно которым строится экстраполяция;

n – количество элементов вектора предсказаний.

Рис. 8.4. Функция предсказания

Пример использования функции предсказания на примере экстраполяции осциллирующих данных yj с меняющейся амплитудой приведен на рис. 52. Аргументы и принцип действия функции predict отличаются от рассмотренных выше встроен

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

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

Задачи математической регрессии имеют смысл приближения выборки данных (xi, yi) некоторой функцией f(x), определенным образом минимизирующей совокупность ошибок |f(хi) – yi|. Регрессия сводится к подбору неизвестных коэффициентов, определяющих аналитическую зависимость f(х). В силу производимого действия большинство задач регрессии являются частным случаем более общей проблемы сглаживания данных. Как правило, регрессия очень эффективна, когда заранее известен (или, по крайней мере, хорошо угадывается) закон распределения данных (xi, yi).

Самый простой и наиболее часто используемый вид регрессии – линейная. Приближение данных (xi, yi) осуществляется линейной функцией у(х) = b + а · х. На координатной плоскости (х, у) линейная функция, как известно, представляется прямой линией. Еще линейную регрессию часто называют методом наименьших квадратов, поскольку коэффициенты а и b вычисляются из условия минимизации суммы квадратов ошибок |b+ a·xi – yi|.

Для расчета линейной регрессии в MathCAD имеется несколько способов. Выполняемые при этом действия дублируются, а результат получается одинаковым. Линейная регрессия по методу наименьших квадратов определяется функциями:

line(х, у) – вектор из двух элементов (b, а) коэффициентов линейной регрессии b + a · x (рис. 53);

intercept(х, у) – коэффициент b линейной регрессии;

slope(x,y) – коэффициент а линейной регрессии:

х – вектор действительных данных аргумента;

у – вектор действительных данных значений того же размера.

В MathCAD имеется альтернативный алгоритм, реализующий не минимизацию суммы квадратов ошибок, а медиан-медианную линейную регрессию для расчета коэффициентов а и b:

medfit(x, y) – вектор из двух элементов (b, а) коэффициентов линейном медиан-медианной регрессии b + а · х, где х, у – векторы действительных данных одинакового размера.

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

Полиномиальная регрессия означает приближение данных (xi,yi) полиномом k-й степени a(x) = a + bx+cx 2 +dx 3 +…+h·x k при k = 1 полином является прямой линией, при k = 2 – параболой, при k = 3 – кубической параболой и т.д. Как правило, на практике применяются k < 5.

Для построения регрессии полиномом k-ой степени необходимо наличие, по крайней мере, (k + 1) точек данных.

В MathCAD полиномиальная регрессия осуществляется комбинацией встроенной функции reqress и полиномиальной интерполяции:

regress (x, у, к) – вектор коэффициентов для построения полиномиальной регрессии;

interp(s, x, y, t) – результат полиномиальной регрессии:

s = regress(x, y, k);

х – вектор действительных данных аргумента, элементы которого расположены в порядке возрастания;

у – вектор действительных данных значений того же размера;

k – степень полинома регрессии (целое положительное число);

t – значение аргумента полинома регрессии.

Рис. 8.6. Ломаная 2

Для построения полиномиальной регрессии после функции regress вы обязаны использовать функцию interp (рис. 8,6).

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

loess (х, у, span) – вектор коэффициентов для построения регрессии данных отрезками полиномов;

interp(s, x, y, t) – результат полиномиальной регрессии:

s = loess(x, y, span);

х – вектор действительных данных аргумента, элементы которого расположены в порядке возрастания;

у – вектор действительных данных значений того же размера;

span – параметр, определяющий размер отрезков полиномов (положительное число, хорошие результаты дает значение порядка span = 0,75).

Параметр span задает степень сглаженности данных. При больших значениях span регрессия практически не отличается от регрессии одним полиномом (например, span=2 дает почти тот же результат, что и приближение точек параболой).

Регрессия одним полиномом эффективна, когда множество точек выглядит как полином, а регрессия отрезками полиномов оказывается полезной в противоположном случае.

Решение задач аппроксимации и интерполяции в среде MathCAD

Аппроксимация – это замена исходной функции f(x) функцией φ(x) так, чтобы отклонение f(x) от φ(x) в заданной области было наименьшим. Функция φ(x) называется аппроксимирующей.

Если исходная функция f(x) задана таблично (дискретным набором точек), то аппроксимация называется дискретной. Если исходная функция f(x) задана аналитически (на отрезке), то аппроксимация называется непрерывной или интегральной.

Интерполяция – это замена исходной функции f(x) функцией φ(x) так, чтобы φ(x) точно проходила через точки исходной функции f(x).

Интерполяция еще называется точечной аппроксимацией.

Точки исходной функции f(x) называются узлами интерполяции.

Для интерполирующей функции справедливо .

Экстраполяцией называется аппроксимация вне заданной области определения исходной функции, т.е. x<x0 и х>xn.

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

Основной мерой отклонения функции y(x) от функции f(x) при аппроксимации является величина, равная сумме квадратов разностей между значениями аппроксимирующей и исходной функций .

Простейшими видами интерполяции является линейная и квадратичная.

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

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

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

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

Интерполяция может выполняться с помощью многочленов Ньютона, Эрмита, Лагранжа и т.д.

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

При решении задач аппроксимации часто используются функции регрессии.

Регрессия – представление совокупности данных некоторой функцией f(x).

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

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

Аппроксимация и интерполяция данных в MathCad

Линейная интерполяция осуществляется с помощью встроенной функции linterp, имеющей следующий общий вид:linterp(VX,VY,x), где VX, VY – векторы координат узловых точек;

x – значение аргумента, для которого будет получено интерполяционное значение функции y.

В MathCAD для проведения кубической сплайн-интерполяции предлагается три встроенные функции (VX, VY – вектора узловых точек):

cspline(VX, VY) – возвращает вектор вторых производных (VK) при приближении в опорных точках к кубическому полиному;

pspline(VX, VY) – возвращает вектор вторых производных (VK) при приближении в опорных точках к параболической кривой;

lspline(VX, VY) – возвращает вектор вторых производных (VK) при приближении в опорных точках к прямой.

Интерполирующая функция строится с помощью стандартной функции interp, имеющей следующий общий вид:

interp(VK,VX, VY,x), где

VK – вектор вторых производных сплайна в опорных точках;

x – произвольная точка, в которой вычисляется значение интерполирующей функции.

Последовательность кубической сплайн-интерполяции такова:

— создаются вектора VX и VY, содержащие координаты точек, через которые нужно провести кубический сплайн;

— вычисляется вектор VK с использованием одной из перечисленных функций;

— вычисляется множество произвольных значений интерполирующей функции в нужном количестве точек с помощью стандартной функции interp.

MathCAD позволяет проводить линейную регрессию общего вида, в которой аппроксимирующая функция задается линейной комбинацией функций, причем сами функции fi(x) могут быть нелинейными:

Линейная регрессия общего вида реализуется с помощью функции linfit:

linfit(VX, VY,F), где VX, VY – координаты исходных точек;

F — вектор, содержащий функции fi(x), записанные в символьном виде.

Функция linfit еще называется функцией аппроксимации по методу наименьших квадратов.

Результатом работы функции linfit является вектор коэффициентов К, при котором среднеквадратичная погрешность приближения исходных точек с координатами VX, VY, минимальна.

Вектор VX должен быть возрастающим.

Аппроксимация по методу наименьших квадратов

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

Вычисление коэффициентов полинома осуществляется с помощью встроенной функции regress, которая имеет следующий общий вид:

regress(VX, VY, n), где VX, VY – вектора с координатами исходных данных,

n – порядок полинома (первые три возвращаемые коэффициенты служебные, а далее искомые значения, расположенные по возрастанию степени полинома).

Для построения аппроксимирующей зависимости можно воспользоваться встроенной функцией

где VK – вектор коэффициентов, рассчитанных функцией regress;

x – рассчитываемая точка.

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

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

Для этого используется встроенная функция genfit, имеющая следующий общий вид:

VS — вектор, который задает начальные приближения элементов вектора K, рассчитываемых итерационным способом;

F — вектор, который содержит искомую функцию и ее частные производные по параметрам Ki в аналитическом виде:

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

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