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

Как воссоздать функцию построенную сплайном матлаб

  • автор:

сплайн

s = spline( x , y , xq ) возвращает вектор интерполированных значений s , соответствующий точкам запроса в xq . Значения s определяются интерполяцией кубическим сплайном x и y .

pp = spline( x , y ) возвращает структуру кусочного полинома для использования ppval и утилитой сплайна unmkpp .

Примеры

Интерполяция сплайна данных синуса

Используйте spline , чтобы интерполировать синусоиду по неравномерно распределенным точкам выборки.

x = [0 1 2.5 3.6 5 7 8.1 10]; y = sin(x); xx = 0:.25:10; yy = spline(x,y,xx); plot(x,y,'o',xx,yy)

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

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

x = -4:4; y = [0 .15 1.12 2.36 2.36 1.46 .49 .06 0]; cs = spline(x,[0 y 0]); xx = linspace(-4,4,101); plot(x,y,'o',xx,ppval(cs,xx),'-');

Экстраполяция Используя кубический сплайн

Экстраполируйте набор данных, чтобы предсказать прирост населения.

Создайте два вектора, чтобы представлять годы переписи от 1 900 до 1990 ( t ) и соответствующая генеральная совокупность Соединенных Штатов у миллионов людей ( p ).

t = 1900:10:1990; p = [ 75.995 91.972 105.711 123.203 131.669 . 150.697 179.323 203.212 226.505 249.633 ];

Экстраполируйте и предскажите генеральную совокупность в году 2 000 использований кубического сплайна.

spline(t,p,2000)
ans = 270.6060

Интерполяция сплайна угловых координат

Сгенерируйте график круга с этими пятью точками данных y(:,2). y(:,6) , отмеченный o’s. Матричный y содержит еще два столбца, чем делает x . Поэтому spline использует y(:,1) и y(:,end) как endslopes. Круг запускается и заканчивается в точке (1,0), так, чтобы точка была построена дважды.

x = pi*[0:.5:2]; y = [0 1 0 -1 0 1 0; 1 0 1 0 -1 0 1]; pp = spline(x,y); yy = ppval(pp, linspace(0,2*pi,101)); plot(yy(1,:),yy(2,:),'-b',y(1,2:5),y(2,2:5),'or') axis equal

Интерполяция сплайна данных синуса и косинуса

Используйте сплайн, чтобы выбрать функцию по более прекрасной mesh.

Сгенерируйте синусоиды и косинусоиды для нескольких значений между 0 и 1. Используйте интерполяцию сплайна, чтобы выбрать функции по более прекрасной mesh.

x = 0:.25:1; Y = [sin(x); cos(x)]; xx = 0:.1:1; YY = spline(x,Y,xx); plot(x,Y(1,:),'o',xx,YY(1,:),'-') hold on plot(x,Y(2,:),'o',xx,YY(2,:),':') hold off

Интерполяция данных Используя сплайн и pchip

Сравните результаты интерполяции , приведенные spline и pchip для двух различных функций.

Создайте векторы значений x , значений функции в тех точках y и точки запроса xq . Вычислите интерполяции в точках запроса с помощью и spline и pchip . Постройте интерполированные значения функции в точках запроса для сравнения.

x = -3:3; y = [-1 -1 -1 0 1 1 1]; xq1 = -3:.01:3; p = pchip(x,y,xq1); s = spline(x,y,xq1); plot(x,y,'o',xq1,p,'-',xq1,s,'-.') legend('Sample Points','pchip','spline','Location','SouthEast')

В этом случае pchip благоприятен, поскольку он не колеблется как свободно между точками выборки.

Выполните второе сравнение с помощью колебательной демонстрационной функции.

x = 0:25; y = besselj(1,x); xq2 = 0:0.01:25; p = pchip(x,y,xq2); s = spline(x,y,xq2); plot(x,y,'o',xq2,p,'-',xq2,s,'-.') legend('Sample Points','pchip','spline')

Когда базовая функция является колебательной, spline получает перемещение между точками лучше, чем pchip .

Входные параметры

x — x — координаты
вектор

x-, заданные как вектор. Векторный x задает точки, в которых данные дан y . Элементы x должны быть уникальными.

Типы данных: single | double

y — Значения функции в x — координаты
вектор | матрица | массив

Значения функции в x — координаты, заданные как числовой вектор, матрица или массив. x и y обычно имеют ту же длину, но y также может иметь точно еще два элемента, чем x , чтобы задать endslopes.

Если y является матрицей или массивом, то значения в последней размерности, y(. j) , приняты как значения, чтобы соответствовать с x . В этом случае последняя размерность y должна быть той же длиной как x или иметь точно еще два элемента.

endslopes кубического сплайна следуют этим правилам:

  • Если x и y являются векторами, одного размера, то граничные условия не-узла используются.
  • Если x или y являются скаляром, то это расширено, чтобы иметь ту же длину как другой, и граничные условия не-узла используются.
  • Если y является вектором, который содержит еще два значения, чем x имеет записи, то spline использует первые и последние значения в y как endslopes для кубического сплайна. Например, если y является вектором, то:
  • y(2:end-1) дает значения функции в каждой точке в x
  • y(1) дает наклон в начале интервала, расположенного в min(x)
  • y(end) дает наклон в конце интервала, расположенного в max(x)
  • y(. j+1) дает значения функции в каждой точке в x для j = 1:length(x)
  • y(. 1) дает наклоны в начале интервалов, расположенных в min(x)
  • y(. end) дает наклоны в конце интервалов, расположенных в max(x)

Типы данных: single | double

xq Точки запроса
вектор

Точки запроса, заданные как вектор. Точками, заданными в xq , является x — координирует для интерполированных значений функции s , который вычисляет spline .

Типы данных: single | double

Выходные аргументы

s Интерполированные значения в точках запроса
вектор | матрица | массив

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

Размер s связан с размерами y и xq :

  • Если y является вектором, то s имеет тот же размер как xq .
  • Если y является массивом размера Ny = size(y) , то эти условия применяются:
  • Если xq является скаляром или вектором, то size(s) возвращает [Ny(1:end-1) length(xq)] .
  • Если xq является массивом, то size(s) возвращает [Ny(1:end-1) size(xq)] .

pp — Кусочный полином
структура

Кусочный полином, возвращенный как структура. Используйте эту структуру с функцией ppval , чтобы оценить кусочный полином в одной или нескольких точках запроса. Структура имеет эти поля.

‘pp’ для кусочного полинома

Вектор длины L+1 со строго увеличивающимися элементами, которые представляют запуск и конец каждого of L интервалы

L -by- k матрица с каждой строкой coefs(i,:) , содержащий локальные коэффициенты порядка полином k на i th интервал, [breaks(i),breaks(i+1)]

Количество частей, L

Поскольку полиномиальные коэффициенты в coefs являются локальными коэффициентами для каждого интервала, необходимо вычесть более низкую конечную точку соответствующего интервала узла, чтобы использовать коэффициенты в обычном полиномиальном уравнении. Другими словами, для коэффициентов [a,b,c,d] на интервале [x1,x2] , соответствующий полином

f ( x ) = a ( x − x 1 ) 3 + b ( x − x 1 ) 2 + c ( x − x 1 ) + d .

Советы

  • Также можно выполнить интерполяцию сплайна с помощью функции interp1 с командой interp1(x,y,xq,’spline’) . В то время как spline выполняет интерполяцию на строках входной матрицы, interp1 выполняет интерполяцию на столбцах входной матрицы.

Алгоритмы

Трехдиагональная линейная система (возможно с несколькими правыми сторонами) решена для получения информации, должен был описать коэффициенты различных кубических полиномов, которые составляют сплайн интерполяции. spline использует функции ppval , mkpp и unmkpp . Эти стандартные программы формируют маленький комплект из функций для работы с кусочными полиномами. Для доступа к большему количеству расширенных функций смотрите , что interp1 или Curve Fitting Toolbox™ шлицуют функции.

Ссылки

[1] де Бор, Карл. Практическое Руководство по Сплайнам. Спрингер-Верлэг, Нью-Йорк: 1978.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Указания и ограничения по применению:

  • Вход x должен строго увеличиваться.
  • Генерация кода не удаляет записи y со значениями NaN .
  • Генерация кода не сообщает об ошибке для бесконечного endslopes в y .
  • Если вы генерируете код для синтаксиса pp = spline(x,y) , то вы не можете вход pp к функции ppval в MATLAB ® . Создать структуру pp MATLAB из структуры pp , созданной генератором кода:
  • В генерации кода используйте unmkpp , чтобы возвратить полиномиальные детали в MATLAB.
  • В MATLAB используйте mkpp , чтобы создать структуру pp .

Смотрите также

Представлено до R2006a
Документация MATLAB
Поддержка
  • MATLAB Answers
  • Помощь в установке
  • Отчеты об ошибках
  • Требования к продукту
  • Загрузка программного обеспечения

© 1994-2019 The MathWorks, Inc.

  • Условия использования
  • Патенты
  • Торговые марки
  • Список благодарностей

Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика

1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.

2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.

3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.

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

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

spline

s = spline( x , y , xq ) возвращает вектор из интерполированных значений s соответствие точкам запроса в xq . Значения s определяются интерполяцией кубическим сплайном x и y .

pp = spline( x , y ) возвращает структуру кусочного полинома для использования ppval и утилита сплайна unmkpp .

Примеры

Интерполяция сплайна данных синуса

Используйте spline интерполировать синусоиду по неравномерно распределенным точкам выборки.

x = [0 1 2.5 3.6 5 7 8.1 10]; y = sin(x); xx = 0:.25:10; yy = spline(x,y,xx); plot(x,y,'o',xx,yy)

Figure contains an axes object. The axes object contains 2 objects of type line.

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

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

Создайте вектор из данных y и другой вектор с x — координаты данных.

x = -4:4; y = [0 .15 1.12 2.36 2.36 1.46 .49 .06 0];

Интерполируйте данные с помощью spline и постройте результаты. Задайте второй вход с двумя дополнительными значениями [0 y 0] показать, что наклоны конечной точки равны нулю. Используйте ppval чтобы оценить сплайн соответствуют более чем 101 точке в интервале интерполяции.

cs = spline(x,[0 y 0]); xx = linspace(-4,4,101); plot(x,y,'o',xx,ppval(cs,xx),'-');

Figure contains an axes object. The axes object contains 2 objects of type line.

Экстраполяция Используя кубический сплайн

Экстраполируйте набор данных, чтобы предсказать прирост населения.

Создайте два вектора, чтобы представлять годы переписи от 1 900 до 1990 ( t ) и соответствующее население Соединенных Штатов у миллионов людей ( p ).

t = 1900:10:1990; p = [ 75.995 91.972 105.711 123.203 131.669 . 150.697 179.323 203.212 226.505 249.633 ];

Экстраполируйте и предскажите население в году 2 000 использований кубического сплайна.

spline(t,p,2000)
ans = 270.6060

Интерполяция сплайна угловых координат

Сгенерируйте график круга с этими пятью точками данных y(:,2). y(:,6) отмеченный o’s. Матричный y содержит еще два столбца, чем делает x . Поэтому spline использование y(:,1) и y(:,end) как endslopes. Круговые начала и концы в точке (1,0), так, чтобы точка была построена дважды.

x = pi*[0:.5:2]; y = [0 1 0 -1 0 1 0; 1 0 1 0 -1 0 1]; pp = spline(x,y); yy = ppval(pp, linspace(0,2*pi,101)); plot(yy(1,:),yy(2,:),'-b',y(1,2:5),y(2,2:5),'or') axis equal

Figure contains an axes object. The axes object contains 2 objects of type line.

Интерполяция сплайна данных синуса и косинуса

Используйте сплайн, чтобы произвести функцию по более прекрасной mesh.

Сгенерируйте синусоиды и косинусоиды для нескольких значений между 0 и 1. Используйте интерполяцию сплайна, чтобы произвести функции по более прекрасной mesh.

x = 0:.25:1; Y = [sin(x); cos(x)]; xx = 0:.1:1; YY = spline(x,Y,xx); plot(x,Y(1,:),'o',xx,YY(1,:),'-') hold on plot(x,Y(2,:),'o',xx,YY(2,:),':') hold off

Figure contains an axes object. The axes object contains 4 objects of type line.

Интерполяция данных с spline pchip , и makima

Сравните результаты интерполяции , приведенные spline pchip , и makima для двух различных наборов данных. Эти функции все выполняют различные формы кусочной кубической интерполяции Эрмита. Каждая функция отличается по тому, как она вычисляет наклоны interpolant, ведя к различным поведениям, когда базовые данные имеют плоские области или волнистости.

Сравните результаты интерполяции на выборочных данных, которые соединяют плоские области. Создайте векторы из x значения, значения функции в тех точках y , и точки запроса xq . Вычислите интерполяции в точках запроса с помощью spline pchip , и makima . Постройте интерполированные значения функции в точках запроса для сравнения.

x = -3:3; y = [-1 -1 -1 0 1 1 1]; xq1 = -3:.01:3; p = pchip(x,y,xq1); s = spline(x,y,xq1); m = makima(x,y,xq1); plot(x,y,'o',xq1,p,'-',xq1,s,'-.',xq1,m,'--') legend('Sample Points','pchip','spline','makima','Location','SouthEast')

Figure contains an axes object. The axes object contains 4 objects of type line. These objects represent Sample Points, pchip, spline, makima.

В этом случае, pchip и makima имейте подобное поведение, в котором они избегают перерегулирований и могут точно соединить плоские области.

Выполните второе сравнение с помощью колебательной демонстрационной функции.

x = 0:15; y = besselj(1,x); xq2 = 0:0.01:15; p = pchip(x,y,xq2); s = spline(x,y,xq2); m = makima(x,y,xq2); plot(x,y,'o',xq2,p,'-',xq2,s,'-.',xq2,m,'--') legend('Sample Points','pchip','spline','makima')

Figure contains an axes object. The axes object contains 4 objects of type line. These objects represent Sample Points, pchip, spline, makima.

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

Входные параметры

x — x — координаты
вектор

x- в виде вектора. Векторный x задает точки в который данные y дан. Элементы x должно быть уникальным.

Типы данных: single | double

y — Значения функции в x — координаты
вектор | матрица | массив

Значения функции в x — координируют в виде числового вектора, матрицы или массива. x и y обычно имейте ту же длину, но y также может иметь точно еще два элемента, чем x задавать endslopes.

Если y матрица или массив, затем значения в последней размерности, y(. j) , взяты в качестве значений, чтобы соответствовать с x . В этом случае, последняя размерность y должна быть та же длина как x или имейте точно еще два элемента.

endslopes кубического сплайна следуют этим правилам:

  • Если x и y вектора одного размера, затем граничные условия и условия отсутствия узла используются.
  • Если x или y скаляр, затем он расширен, чтобы иметь ту же длину как другой, и граничные условия и условия отсутствия узла используются.
  • Если y вектор, который содержит еще два значения, чем x имеет записи, затем spline использует первые и последние значения в y как endslopes для кубического сплайна. Например, если y вектор, затем:
  • y(2:end-1) дает значения функции в каждой точке в x
  • y(1) дает наклон в начале интервала, расположенного в min(x)
  • y(end) дает наклон в конце интервала, расположенного в max(x)
  • y(. j+1) дает значения функции в каждой точке в x для j = 1:length(x)
  • y(. 1) дает наклоны в начале интервалов, расположенных в min(x)
  • y(. end) дает наклоны в конце интервалов, расположенных в max(x)

Типы данных: single | double

xq — Точки запроса
скаляр | вектор | матрица | массив

Точки запроса в виде скаляра, вектора, матрицы или массива. Точки заданы в xq x — координирует для интерполированных значений функции yq вычисленный spline .

Типы данных: single | double

Выходные аргументы

s — Интерполированные значения в точках запроса
скаляр | вектор | матрица | массив

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

Размер s связан с размерами y и xq :

  • Если y вектор, затем s имеет тот же размер как xq .
  • Если y массив размера Ny = size(y) , затем эти условия применяются:
  • Если xq скаляр или вектор, затем size(s) возвращает [Ny(1:end-1) length(xq)] .
  • Если xq массив, затем size(s) возвращает [Ny(1:end-1) size(xq)] .

pp — Кусочный полином
структура

Кусочный полином, возвращенный как структура. Используйте эту структуру с ppval функция, чтобы оценить кусочный полином в одной или нескольких точках запроса. Структура имеет эти поля.

‘pp’ для кусочного полинома

Вектор из длины L+1 со строго увеличивающимися элементами, которые представляют начало и конец каждого of L интервалы

L — k матрица с каждой строкой coefs(i,:) содержа локальные коэффициенты порядка k полином на i интервал th, [breaks(i),breaks(i+1)]

Количество частей, L

Начиная с полиномиальных коэффициентов в coefs локальные коэффициенты для каждого интервала, необходимо вычесть более низкую конечную точку соответствующего интервала узла, чтобы использовать коэффициенты в обычном полиномиальном уравнении. Другими словами, для коэффициентов [a,b,c,d] на интервале [x1,x2] , соответствующий полином

f ( x ) = a ( x − x 1 ) 3 + b ( x − x 1 ) 2 + c ( x − x 1 ) + d .

Советы

  • Также можно выполнить интерполяцию сплайна с помощью interp1 функция с командой interp1(x,y,xq,’spline’) . В то время как spline выполняет интерполяцию на строках входной матрицы, interp1 выполняет интерполяцию на столбцах входной матрицы.

Алгоритмы

Трехдиагональная линейная система (возможно с несколькими правыми сторонами) решена для получения информации, должен был описать коэффициенты различных кубических полиномов, которые составляют сплайн интерполяции. spline использует функции ppval , mkpp , и unmkpp . Эти стандартные программы формируют маленький набор из функций для работы с кусочными полиномами. Для доступа к большему количеству расширенных функций смотрите interp1 или Curve Fitting Toolbox™ шлицует функции.

Ссылки

[1] де Бор, Карл. Практическое Руководство по Сплайнам. Спрингер-Верлэг, Нью-Йорк: 1978.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Указания и ограничения по применению:

  • Введите x должен строго увеличиваться.
  • Генерация кода не удаляет y записи с NaN значения.
  • Генерация кода не сообщает об ошибке для бесконечного endslopes в y .
  • Если вы генерируете код для pp = spline(x,y) синтаксис, затем вы не можете вход pp к ppval функция в MATLAB ® . Создать pp MATLAB структура от pp структура создается генератором кода:
  • В генерации кода использовать unmkpp возвратить полиномиальные детали в MATLAB.
  • В MATLAB использовать mkpp создать pp структура.

Основанная на потоке среда
Запустите код в фоновом режиме с помощью MATLAB® backgroundPool или ускорьте код с Parallel Computing Toolbox™ ThreadPool .

Эта функция полностью поддерживает основанные на потоке среды. Для получения дополнительной информации смотрите функции MATLAB Запуска в Основанной на потоке Среде.

Массивы графического процессора
Ускорьте код путем работы графического процессора (GPU) с помощью Parallel Computing Toolbox™.

Указания и ограничения по применению:

  • Входной параметр y mustBeNonsparse.

Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox) .

Смотрите также

Представлено до R2006a

Открытый пример

У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?

Документация MATLAB

Поддержка

  • MATLAB Answers
  • Помощь в установке
  • Отчеты об ошибках
  • Требования к продукту
  • Загрузка программного обеспечения

© 1994-2021 The MathWorks, Inc.

  • Условия использования
  • Патенты
  • Торговые марки
  • Список благодарностей

Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика

1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.

2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.

3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.

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

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

1-2 Моделирование / Matlab. Практический подход. Самоучитель

— На этом и построен мой метод дедукции. — А как это выглядит на практике?

К/ф «Приключения Шерлока Холмса и доктора Ватсона. Знакомство»

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

Одной из наиболее часто встречающихся является задача интерполирования. Идеологически близка к ней задача аппроксимации. Именно их и рассмотрим в начале этой главы.

— Что именно? — Формулу!

К/ф «Приключения Шерлока Холмса и доктора Ватсона. Знакомство»

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

Предположим, что имеется набор узловых точек x 1 , x 2 , . x n и значения y 1 , y 2 , . y n некоторой функции в этих узловых точках. Если речь идет о задаче интерполирования, то она может быть сформулирована так: необходимо построить (в соответствии с определенными критериями) некоторую функцию f ( x ) , такую, что эта функция в узловых точках x 1 , x 2 , . x n принимает значения y 1 , y 2 , . y n , то есть f ( x k ) = y k для всех индексов k от 1 до n .

Этого критерия совершенно недостаточно, чтобы однозначно определить интерполяционную функцию f ( x ) . Необходимо уточнить ее вид. Очень часто функцию f ( x ) ищут в виде полинома. Степень полинома выбирается в соответствии с количеством узловых точек. Если узловых точек n , то степень интерполяционного полинома равняется n −1. Такой полином име-

cos(2 πx ) 1 + x

ет вид f ( x ) = a 1 x n −1 + a 2 x n −2 + a 3 x n −3 +. + a n −1 x + a n и содержит n параметров a 1 , a 2 , . a n , благодаря которым удается добиться того, чтобы

интерполяционный полином проходил через базовые точки ( x k , y k ) (индекс k = 1,2. n ). Фактически задача сводится к определению коэффициентов интерполяционного полинома на основании значений базовых точек. Существуют различные алгоритмы решения такой задачи, но в нашем случае все существенно упрощается, поскольку в Matlab есть специальные функции для построения интерполяционного полинома и выполнения сопутствующих вычислений. Тем не менее, кратко рассмотрим математическую суть проблемы.

Из условий f ( x k ) = y k

(индекс k = 1,2. n ) получаем систему алгебраи-

a x n −1 + a x n −2

торую следует решать относительно коэффициентов a 1 , a 2 , . a n . Система

линейная, поэтому решить ее особого труда не составляет. Формально, если

ввести в рассмотрение векторы a = ( a , a

тему можно записать в виде aW

, где символ T означает транспони-

обозначена матрица Вандермонда. Она имеет такой вид:

рование, а через W

то есть для элементов W (индексы i , j = 1,2. n ) этой матрицы имеет место соотношение W ij = ij x i n − j . Для вычисления матрицы Вандермонда в Matlab предназначена функция vander() . Аргументом функции указыва-

ется список узловых точек x 1 , x 2 , . x n (список-строка или список-столбец).

и вектор значений функции в узловых точках y извест-

ны, то коэффициенты интерполяционного полинома a

. Ну, а если известны коэффициенты полинома, то значение

полинома можно вычислить в любой точке – для этого в Matlab тоже есть специальные функции. Рассмотрим документ, представленный в документе на рис. 8.1.

Командами x=[0,0.2,0.4,0.7,0.9,1.2,1.5] и y=cos(2*pi*x)./ (1+x) задаются узловые точки и значения функции в узловых точках соот-

ветственно. В данном случае табулируется функция y ( x ) = . Ма-

трицу Вандермонда вычисляем командой W=vander(x) . Коэффициенты

Глава 8. Обработка данных

Рис. 8.1. Вычисление интерполяционного полинома

интерполяционного полинома вычисляются командой a=y*inv(W.’) . На этом процесс вычисления интерполяционного полинома собственно и заканчивается. Дальнейший код предназначен для иллюстрации полученного результата. В частности, командами z=0:0.01:1.5 и f=polyval(a,z) создаем набор точек, по которым будем строить полиномиальную кривую. Командой plot(x,y,’ro’) на графике отображаем базовые точки, затем с помощью инструкции hold on переходим в режим удержания графики и отображаем интерполяционную кривую с помощью команды plot(z,f,’k-‘) . Инструкция grid on нужна для отображения координатной сетки. На рис. 8.2 представлен график с базовыми точками и кривая, построенная на основе интерполяционного полинома.

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

Для выполнения полиномиальной интерполяции в Matlab может использоваться функция polyfit() .

Рис. 8.2. Базовые точки и интерполяционная кривая

Строго говоря, функция polyfit() предназначена для выполнения аппроксимации. Частным случаем задачи аппроксимации является задача интерполяции.

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

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

Глава 8. Обработка данных

Пример использования функции polyfit() для создания интерполяционного полинома приведен в документе на рис. 8.3.

Рис. 8.3. Создание интерполяционного полинома с помощью функции polyfit()

Здесь мы использовали такую последовательность команд:

Первые две команды ( x=-5:1:5 и y=sin(pi*x./2)./(1+x.^2) ) создают наборы точек, на основе которых будет строиться интерполяционный полином. Командой P=polyfit(x,y,length(x)-1) создается интерполяционный полином. Собственно, под созданием полинома здесь имеется в виду вычисление коэффициентов этого полинома. Коэффициенты записываются в переменную P . Командой z=-5.1:0.01:5.1 создаем список узловых точек, по которым будет строиться график интерполяционного полинома. Диапазон значений аргумента, для которого отображается график интерполяционного полинома, несколько шире диапазона, определяемого базовыми точками.Базовыеточкиотображаемкомандой plot(x,y,’ks’) ,акомандой plot(z,polyval(P,z),’r-‘) строим график интерполяционного полинома. Для сравнения, кроме интерполяционного полинома, выполняется еще

и аппроксимация на основе полиномиального выражения. Коэффициенты соответствующего полинома вычисляются командой P2=polyfit(x,y,5) . Аппроксимация выполняется на основе полинома пятой степени (третий аргумент функции polyfit() ). Кривая на основе этого полинома отображается с помощью команды plot(z,polyval(P2,z),’k-.’) .

Заголовок добавляем командой title(‘Интерполяционный полином’) , а легенду – командой legend(‘базовые точки’,’интерполяция’, ‘аппроксимация’) .Результат графических построенийпредставленна рис.8.4.

Рис. 8.4. Базовые точки, интерполяционный и аппроксимирующий полиномы

Интерполяционная кривая сплошная, а штрихпунктирная кривая соответствует полиномиальной аппроксимации. Что касается интерполяционного полинома, то по определению в узловых точках он дает табличные значения (те, на основе которых строится полином). Как отмечалось выше, в задаче аппроксимации такое условие не ставится. Достаточно, чтобы кривая проходила достаточно близко к базовым точкам. Что такое «достаточно близко» – вопрос отдельный.

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

Глава 8. Обработка данных

При большом количестве базовых точек интерполяция полиномом может оказаться малопродуктивной. Одна из проблем связана с существенно немонотонным поведением полиномов высокой степени. Чтобы решить эту проблему, нередко используют интерполяцию сплайнами . Главная идея метода состоит в том, что диапазон интерполирования разбивается на поддиапазоны (например, в пределах между двумя соседними узловыми точками). В пределах каждого поддиапазона используются разные функции одного вида (полиномы невысокой степени). Эти функции «сшиваются» на границах поддиапазонов вместе с производными. В результате получаем кусочно-гладкую (вместе с производными нескольких первых порядков) интерполяционную зависимость.

Сплайн-интерполяцию в Matlab можно реализовать с помощью функции interp1() . Обычно аргументами функции interp1() передают набор узловых точек аргумента табулированной функции и значений функции в этих узловых точках. Это два списка, определяющие те базовые точки, на основе которых выполняется интерполяция. Третьим аргументом указывается список значений, для которых вычисляется значение интерполяционной зависимости. Этот аргумент может быть скаляром – тогда значение интерполяционной зависимости вычисляется в одной точке. Также четвертым аргументом можно указать (в одинарных кавычках) ключевое слово, определяющее тип базового сплайна (степень полинома). Для определения типа базового полинома используют следующие ключевые слова (табл. 8.1).

Табл. 8.1. Ключевые слова, определяющие тип базового полинома

Интерполяция в Matlab

Интерполяция в Matlab

Доброго времени суток! Сегодня поговорим о работе с данными полученными «экспериментально». Подразумевается, что даны значения по двум или более координатам (точки), с которыми в задаче нас просят выполнить то или иное действие. В этой статье мы с вами узнаем, что такое интерполяция в Matlab, и какие действия она позволяет выполнять.

Интерполяция

Задав такой вопрос поисковику, вы получите весьма развёрнутый ответ от Wikipedia. Но в двух словах, интерполяция (интерполирование) — процесс нахождения промежуточных значений по ряду данных, для восполнения пробелов между точными значениями приближенными. Точные значения так же называют узловыми точками.

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

line interpolation

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

В Matlab такой способ реализован с помощью команды
interp1 ( x , y , xi , ‘linear’ ) или просто interp1 ( x , y , xi ) , где x и y массивы из табличных данных (координаты точек), xi — массив промежуточных точек, координаты которых требуется найти.

Интерполяционные полиномы

  • Канонический полином
  • Полином Лагранжа
  • Полином Ньютона

Разберём для самого часто встречающегося полинома реализацию в Matlab. Вот пример использования:

Проинтерполировать функцию sin x на отрезке [1, 9] с шагом 2 и построим графики sin x и полученного интерполяционного полинома.

Для начала необходимо создать функцию, по которой Matlab будет считать. Создайте файл с именем «lagrange» и скопируйте в него:

function yy=lagrange(x,y,xx) % вычисление интерполяционного полинома в форме Лагранжа % x - массив координат узлов % y - массив значений интерполируемой функции % xx - массив значений аргумента, для которых надо вычислить значения полинома % yy - массив значений полинома в точках xx % узнаем число узлов интерполяции (N=n+1) N=length(x); % создаем нулевой массив значений интерполяционного полинома yy=zeros(size(xx)); % в цикле считаем сумму по узлам for k=1:N % вычисляем произведения, т.е. функции Psi_k t=ones(size(xx)); for j=[1:k-1, k+1:N] t=t.*(xx-x(j))/(x(k)-x(j)); end % накапливаем сумму yy = yy + y(k)*t; end 

Теперь создайте ещё один файл и запишем в него само решение поставленной задачи:

% задание узлов интерполяции x=1:2:9; y=sin(x); % задание точек, в которых требуется найти значения интерполяционного полинома xx=linspace(1,9,1000); % нахождение значений интерполяционного полинома yy=lagrange(x,y,xx); % построение графиков figure('Color','w') % вывод графика sin(x) fplot(@sin,[1 9]) hold on % вывод графика полинома plot(xx,yy,'r') % вывод узлов интерполяции plot(x,y,'bo') % размещение легенды legend('sin\itx','<\itL_n (интерполяция)>','узлы',-1) 

Ссылки на файлы — исходники сможете найти в конце статьи. Более подробную информацию о полиноме Лагранжа вы сможете найти на официальном сайте Matlab.

Интерполяция сплайнами

Ещё один часто встречающийся метод интерполяции. Происхождение термина “сплайны” связано с гибкой чертежной линейкой, которой пользовались для рисования гладких кривых, проходящих через заданные точки. Сплайн — это группа кубических многочленов, которые также называют кубическими сплайнами.

Вычисление сплайн интерполяции в Matlab осуществляется с помощью команды spline(x, y, xx) , где х и у — массивы табличных данных, а хх — промежуточные значения по оси абцисс (Х). Вот небольшой пример:

Построить интерполяцию сплайнами функции Рунге.

% Введём функцию Рунге f = inline('1./(1+25*x.^2)'); % Вычислим таблицу значений x = linspace(-1, 1, 10); y = f(x); % Вычислим сплайн-интерполяцию xx = linspace(-1, 1, 100); yy = spline(x, y, xx); % Начертим графики axes('NextPlot','Add'); plot(x, y,'LineWidth', 2); % Красным на графике - аппроксимация, жирным - исходная функция plot(xx, yy,'Color','r'); 

Интерполяция сплайном

Вывод:

interp1

Большинство задач в Matlab реализуются с помощью этой команды. yi = interp1 (x,y,xi, metod), где х – массив абсцисс экспериментальных точек, у – массив ординат экспериментальных точек, xi — точки, в которых необходимо вычислить значения с помощью сплайна, metod – определяет метод построения сплайна. Этот параметр может принимать следующие значения:

  • ‘nearest’ – интерполяция по соседним точкам – этот метод построения кусочной функции, при котором значение в любой точке равно значению в ближайшей узловой точке – интерполяция полиномами 0-ой степени;
  • ‘linear’ – линейная сплайн-интерполяция — интерполяция полиномами 1-ой степени (применяется по умолчанию, если способ интерполирования не задан);
  • ‘cubic’ – интерполяция кубическим полиномом;
  • ‘spline’ – интерполяция кубическим сплайном;
  • ‘pchip’ — интерполяция кубическим эрмитовым сплайном.

Вот и вся основная информация по интерполяции в Matlab, если остались вопросы, задавайте их в комментариях.

Поделиться ссылкой:

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

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