
- •Операции со степенными полиномами
- •Аппроксимация табличных функций Общие понятия об аппроксимации и интерполяции
- •Аппроксимация табличных функций
- •Интерполирование табличных функций с помощью степенных полиномов
- •Численное интегрирование
- •Тригонометрическая интерполяция периодических функций. Гармонический анализ и синтез периодических функций
- •Нелинейный парный регрессионный анализ
- •Численное решение обыкновенных дифференциальных уравнений Общие понятия
- •Обзор численных методов решения ду
- •Методы Рунге-Кутта
- •Алгоритмы решения систем ду
- •Непосредственное численное решение систем ду с помощью стандартных функций программного пакета Matlab
- •Численное решение систем ду с помощью приложения Simulink
Интерполирование табличных функций с помощью степенных полиномов
Общие замечания
Пусть дана табличная функция:
,
. (1)
Интерполирующая функция представляет собой степенной полином -го порядка:
. (2)
Условие интерполяции имеет вид:
,
, (3)
таким образом, для определения вектора коэффициентов
степенного
полинома (2) необходимо решить линейную
систему
уравнений относительно коэффициентов
:
(4)
Единственность решения системы (4) может быть показана геометрически: через 2 точки можно провести только одну прямую, через 3 точки – только одну параболу, …, через точек – только одну кривую -го порядка.
Однако можно обойтись и без решения системы (4), если использовать специальные формы записи интерполирующих полиномов, выведенные известными учеными (например, формулы Ньютона, Гаусса, Стирлинга, Бесселя, Лагранжа и др.). При использовании этих форм коэффициенты степенного полинома (2) остаются неизвестными.
Интерполирование методом Лагранжа
Достоинства
метода: 1) применим для неравноотстоящих
узлов; 2) координаты точек –
,
– входят в формулу в явном виде; 3)
известны удобные схемы расчета полинома
-го
порядка на основании полинома
-го
порядка.
Интерполяционная формула Лагранжа -го порядка имеет вид:
(5)
Формула (5) с математической точки зрения представляет собой уравнение кривой -го порядка, проходящей через заданные точки табличной функции (1).
Частные выражения для интерполирующих полиномов 1-го и 2-го порядков имеют вид:
;
.
Полином
описывает прямую (кривую 1-го порядка),
проходящую через два последовательно
расположенных узла
и
.
Полином
описывает параболу (кривую 2-го порядка),
проходящую через три последовательно
расположенных узла
,
и
.
Интерполирующая функция (5), проходящая через все точки табличной функции (1), называется глобальным интерполянтом (англ. global fit). Узел называется начальным узлом интерполяции.
При большом количестве табличных точек вычисление глобального интерполянта является трудоемкой задачей. Кроме того, эти трудозатраты оказываются не всегда оправданными, так как равенство интерполирующей и табличной функции в узлах не гарантирует плавного ее изменения между узлами. Поэтому при решении инженерных задач обычно используют интерполяцию движущимися полиномами невысокого порядка (ее называют еще кусочной или локальной, или кусочно-полиномиальной).
Опасности, связанные с глобальной полиномиальной интерполяцией впервые обнаружил Рунге в 1901 г. Он пытался интерполировать на интервале [–1; 1] простую функцию
при равномерном разбиении интервала интерполирования. В результате оказалось, что при повышении порядка глобального интерполирующего полинома увеличивается погрешность интерполирования между отдельными узловыми точками. Обычно примерно такой вид имеют резонансные кривые колебательных систем, на "крыльях" которых возникает явление так наз. "волнистости", которая возрастает с повышением степени интерполирующего полинома.
Расхождение можно устранить, распределяя абсциссы таблицы не равномерно, а специальным образом (в данном случае, помещая их в корни полинома Чебышева). Однако универсальной схемы распределения узлов таблицы все же нет. Отсюда и возникла идея кусочно-полиномиальной интерполяции.
Интерполирование движущимися полиномами
Смысл такой интерполяции рассмотрим на примере интерполяции движущимися полиномами 1-го порядка, которая обеспечивает кусочно-линейную аппроксимацию табличной функции.
Здесь
при поиске
всякий раз достаточно использовать
уравнение полинома 1-го порядка (уравнение
прямой, проходящей через два соседних
узла), но сами коэффициенты этого полинома
будут изменяться в зависимости от того,
между какими узлами находится точка
,
значение функции в которой требуется
найти.
При
интерполяции движущимися полиномами
интерполирующая кривая
-го
порядка должна проходить через
последовательно расположенных точек
табличной функции
,
,
…,
,
где узел
выполняет функцию начального узла
интерполяции, являясь ближайшим к точке
слева2.
При этом интерполяционная формула имеет
наибольшую точность вблизи начального
узла интерполяции.
Для определения начального узла интерполяции должно выполняться условие
. (6)
В
интерполяционных формулах вида (5) при
этом необходимо все индексы увеличить
на
ввиду изменившегося адреса начального
узла интерполяции. Так, формула Лагранжа
при интерполяции движущимися полиномами
имеет вид:
(7)
Выражения для движущихся полиномов 1-го и 2-го порядков будут иметь вид:
;
Блок-схема функции интерполирования движущимися полиномами
Однако прежде, чем использовать формулу (7), необходимо организовать поиск начального узла интерполяции в соответствии с условием (6).
Недостатком локальной интерполяции является наличие изломов в узловых точках.
Алгоритм вычисления движущегося интерполирующего полинома -го порядка имеет вид, представленный на рисунке. Листинг соответствующей Matlab-функции может иметь вид:
function y=lagrange(xt,yt,x,k)
% y=lagrange(xt,yt,x,k)
% Интерполяция по формуле Лагранжа движущимися полиномами
% xt,yt - векторы табличных точек
% k - порядок интерполирующего полинома
% x - задан. вектор точек, в которых необх. вычислить значения ф-ции
% Анализ исходных данных:
% 1. Проверка количества исходных данных
if nargin==3, k=1; end % По умолчанию использовать лин. интерполяцию
if nargin<3, error('Неверное количество входных аргументов'); end
% 2. Проверка правильности задания размерности аргументов
n=length(xt); N=length(x);
if n==1, error(‘Первый аргумент должен быть вектором, а не скаляром’); end
if length(k)~=1, error(‘Неверное задание порядка полинома’); end
if length(yt)~=n, error('Неверное задание табличной функции'); end
% 3. Проверка массива xt на монотонность
dxt=xt(2:n)-xt(1:n-1); sig=sign(dxt);
if sum(dxt)~=n, error(‘Вектор xt должен монотонно возрастать’); end
for q=1:N
% Поиск начального узла интерполяции
for i=1:n-k, if x(q)<xt(i+1) break; end; end
% Другие варианты поиска начального узла интерполяции
% i=max(find(xt<=x(q)));
% ii=find(xt>x(q)); i=ii(1)-1;
if x(q)~=xt(i)
y(q)=0;
for m=i:i+k
P=1;
for j=i:i+k
if j~=m, P=P*(x(q)-xt(j))/(xt(m)-xt(j)); end
end
y(q)=y(q)+P*yt(m);
end
else y(q)=yt(i);
end
end
Анализ исходных данных помогает предусмотреть все возможные ошибки обращения к функции для выдачи сообщений о таких ошибках с их последующим исправлением. Практикуется особенно в тех случаях, когда функция разрабатывается на профессиональном уровне с целью ее массового использования специалистами.
Пример использования приведенной функции:
» xt=0:10; yt=[0 4.5 2.5 3.2 4 4.5 5 6 7 8 8.5]; % Задание табличной функции
» x=linspace(min(xt)-d,max(xt)+d,1000); % Задание точек для интерполирования
» y=lagrange(xt,yt,5,x); % Интерполирование полиномом 5-го порядка
» figure, plot(xt,yt,'*',x,y), grid on % Построение графиков
Результаты работы функции представлены на рисунках ниже. На рисунке слева параметр d=0, на рисунке справа – d=2 (экстраполирование на участках [-2; 0] и [10; 12]).
Анализ результатов показывает, что экстраполирование является менее точной операцией, чем интерполирование, причем точность, как правило, будет тем ниже, чем выше порядок интерполирующего полинома.
При моделировании нелинейностей объекта регулирования вполне достаточно использовать параболическую или кубическую интерполяцию. При моделировании нелинейных регуляторов, корректирующих звеньев и т.п., которые в аналоговых системах реализуются на функциональных преобразователях, реализующих кусочно-линейную аппроксимацию желаемых нелинейных функций, необходимо применять линейную интерполяцию. Количество табличных точек здесь зависит от элементной базы (количества диодных цепочек с регулируемыми резисторами), и не может быть очень большим (как правило, 5 – 6).
При отладке программ и моделей можно пробовать сначала параболическую интерполяцию (желаемое), а потом оценить, к чему приводит замена ее линейной.
Понятие об интерполяции сплайн-функциями
Наиболее гладкую интерполяцию обеспечивает интерполяция сплайнами (англ. spline – рейка, линейка).
Для проведения гладких кривых через узловые точки чертежники издавна используют гибкие рейки (лекала) из какого-нибудь упругого материала (металла, пластика). Механические сплайны закрепляют, подвешивая грузила в узлах интерполяции. Через некоторое время гибкая линейка принимает форму кубического сплайна, при которой обеспечивается минимум потенциальной энергии упругого материала.
Математическая теория подобной интерполяции начала развиваться в конце 1960-х годов, и называется теорией сплайн-функций.
С использованием теории балок доказано, что форма, которую принимает механический сплайн между каждой парой соседних узлов, описывается кубическим полиномом, и что соседние полиномы, а также их первые и вторые производные соединяются между собой непрерывно.
При решении задачи интерполяции кубическими сплайнами табличной функции, состоящей из n узлов, необходимо решить n–1 систему четырех линейных уравнений с четырьмя неизвестными, в результате чего определяются 4(n–1) параметров сплайнов; вычисление интерполируемых значений выполняют по схеме Горнера.
Этот процесс требует значительных затрат машинного времени, поэтому при моделировании систем ЭП чаще всего используют интерполяцию движущимися полиномами 1-го и 2-го порядков.
Интерполирование функций в программном пакете Matlab
1. Интерполяция данных движущимися полиномами
yi=interp1(x,y,xi)
yi=interp1(x,y,xi,method)
x, y – векторы координат узлов исходной табличной функции (x может быть как монотонно изменяющимся, так и не монотонно);
xi – вектор абсцисс точек, в которых производится интерполяция;
yi – возвращаемый вектор значений функции;
method – одна из четырех символьных строк:
'linear' – линейная интерполяция (по умолчанию);
'spline' – интерполяция кубическими сплайнами;
'cubic' – кубическая интерполяция;
'nearest' – ступенчатая (движущимися полиномами 0-го порядка).
Если
,
для более быстрой интерполяции для
параметра method
следует использовать значения '*linear',
'*cubic',
'*nearest'.
Для
быстрой интерполяции при монотонно
возрастающем x
и
используется функция
yi=interp1q(x,y,xi)
2. Интерполяция периодических функций
y=interpft(x,n)
y=interpft(x,n,dim)
– возвращает вектор y размерности n, представляющий собой интерполяцию значений вектора x посредством преобразования Фурье.
Если x – матрица, интерполяция производится по размерности dim (по умолчанию dim=1).
3. Двухмерная интерполяция
zi=interp2(x,y,z,xi,yi)
zi=interp2(x,y,z,xi,yi,method)
4. Трехмерная интерполяция
vi=interp3(x,y,z,v,xi,yi,zi)
vi=interp3(x,y,z,v,xi,yi,zi,method)
Назначение и содержание параметров функций interp2 и interp3 аналогично таковым для функции interp1.
Пример.
» clear all, xt=0:.2:2*pi; yt=sin(xt); x=linspace(xt(1),xt(end),100);
» y=interp1(xt,yt,x,'linear'); figure, plot(xt,yt,'o',x,y), grid on