Разное

Матлаб аппроксимация – Аппроксимация в Matlab — CodeTown.ru

Аппроксимация в Matlab — CodeTown.ru

Приветствую! Сегодня продолжаем говорить об обработке экспериментальных данных. Сегодняшняя статья — продолжение предыдущей темы: Интерполяция в Matlab. Настоятельно советую с ней ознакомиться перед чтением данной статьи. По сути аппроксимация в Matlab очень похожа на интерполяцию, однако, для её реализации используются другие правила и функции.

Аппроксимация

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

МНК (Метод Наименьших Квадратов)

Одним из самых популярных методов аппроксимации в Matlab и в других средах, это Метод Наименьших Квадратов ( МНК ). В этом методе при сглаживании опытных данных аппроксимирующую кривую стремятся провести так, чтобы её отклонения от табличных данных по всем узловым точкам были минимальными.

Суть МНК заключается в следующем: для табличных данных, полученных в результате эксперимента, отыскать аналитическую зависимость, сумма квадратов уклонений которой от табличных данных во всех узловых точках была бы минимальной.

Аппроксимация в Matlab по МНК осуществляется с помощью функции polyfit. Функция p = polyfit(x, y, n) находит коэффициенты полинома p(x) степени n, который аппроксимирует функцию y(x) в смысле метода наименьших квадратов. Выходом является строка p длины n+1, содержащая коэффициенты аппроксимирующего полинома.

Примеры задач

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

Осуществить аппроксимацию в Matlab табличных данных x = [0, 0.1 , 0.2, 0.3, 0.5] и y = [3, 4.5, 1.7, 0.7, -1] . Применяя метод наименьших квадратов, приблизить ее многочленами 1-ой и 2-ой степени. Для каждого определить величину среднеквадратической ошибки. Построить (на одном листе) графики и заданной таблично функции (ломанная линия) и приближающих ее многочленов 1-ой и 2-ой степени.

x = [0, 0.1 , 0.2, 0.3, 0.5];
y = [3, 4.5, 1.7, 0.7, -1];
grid on
plot(x, y, '*r');
xi = min(x):0.1:max(x);
N = 1; % степень
coeff1 = polyfit(x, y, N);
y2 = 0;
for k=0:N
    y2 = y2 + coeff1(N-k+1) * xi.^k;
end
hold on; plot(xi, y2, 'r'); 
N = 2;
coeff2 = polyfit(x, y, N);
y3 = 0;
for k=0:N
    y3 = y3 + coeff2(N-k+1) * xi.^k;
end
hold on; plot(xi, y3, 'g');
 
std(y-(coeff1(1)*x+coeff1(2)))
std(y-(coeff2(1)*x.^2+coeff2(2)*x+coeff2(3)))


Вывод:
ans = 0.9253
ans = 0.8973

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

Найти у(0.25) путём построения аппроксимирующего полинома методом наименьших квадратов согласно данным:
x: 0, 0.1, 0.2, 0.3, 0.5
y: 3, 4.5, 1.7, 0.7, -1
p: 0.5, 0.8, 1.6, 0.8, 0.1
Построить этот полином без учёта весовых коэффициентов с использованием определителя Вандермонда и стандартных операторов.

%Задаем массивы данных:
x = [0; 0.1; 0.2; 0.3; 0.5];
y = [3;4.5;1.7;0.7;-1];
%Строим матрицу W – матрицу Вандермонда с вырезанным первым столбцом:
W = vander(x);
W = W(1:5,2:5);
%Вычисляем элементы матрицы А как произведение транспонированной матрицы W и просто матрицы W
A = W'*W;
%Вычисляем элементы вектора b 
b = W'*y;
%Решая систему уравнений Aa = b, находим значения вектор-столбца a:
a = inv(A)*b
%Это будут коэффициенты аппроксимирующего полинома.
%Проверяем, используя методы MATLAB = функцию polyfit:
qq = polyfit(x,y,3)
%Получаем аппроксимированные значения y:
x1 = [-0.2:0.001:0.7];
y1 = a(1)*x1.^3 + a(2)*x1.^2 + a(3)*x1 + a(4);
%Строим график функции
plot(x,y,'*');
hold on;
grid on;
plot(x1,y1,'Color','r');
%Находим значение в точке x = 0.25
x2 = 0.25;
y2 = a(1)*x2^3 + a(2)*x2^2 + a(3)*x2 + a(4)


Вывод:
a =
228.1447
-176.0984
22.7745
3.1590
qq = 228.1447 -176.0984 22.7745 3.1590
y2 = 1.4113

Как видите встроенные функции для аппроксимации в Matlab укорачивают алгоритм почти вдвое.

Существует также возможность реализации всего алгоритма через одну функцию, но для преподавателей студентов она скорее всего будет не приемлема. С помощью функции lsqcurvefit(fun,x0,xdata,ydata), где:
xdata,ydata– табличные значения аппроксимируемой функции;
x0 –стартовое значение параметров функции;
fun – функция аппроксимации, задаваемая пользователем

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

  • Аппроксимация ортогональными классическими полиномами.
  • Аппроксимация каноническим полиномом

Но на практике их реализацию требуют редко.

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

Скачать исходник первой задачи
Скачать исходник второй задачи

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

Похожее

codetown.ru

Curve Fitting Toolbox — аппроксимация и интерполяция для MATLAB

Curve Fitting Toolbox — это пакет расширения MATLAB для различных прикладных задач подгонки, аппроксимации и интерполяции данных.    

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

Curve Fitting Toolbox содержит полиномиальную модель подгонки, экспоненциальную, Гауссову, Фурье и др. и включает средства идентификации вылетов в данных, а также функции сглаживания Савитского–Голея и скользящего среднего. MATLAB позволяет импортировать данные в Curve Fitting Toolbox из большого числа файловых форматов.

Все функции Curve Fitting Toolbox написаны на открытом языке MATLAB, что позволяет пользователю контролировать исполнение алгоритмов, изменять исходный код, а также создавать свои собственные функции и процедуры.


Ключевые особенности

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

Системные требования

matlab.ru

Архивы примеров на Matlab — CodeTown.ru

Открыть возможности мозга

Главная страница » Matlab

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

Доброго времени суток! В этой статье мы поговорим о решении систем нелинейных алгебраических уравнений в Matlab. Вслед за решением нелинейных уравнений, переходим к их системам,…

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

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

Доброго времени суток! Сегодня мы поговорим о решении ОДУ (обыкновенных дифференциальных уравнений) в Matlab. Перед тем как мы начнём обсуждать данную тему, советую вам ознакомиться…

Доброго времени суток! Мы продолжаем говорить о численных методах. И сегодня мы поговорим о реализации численных методов интегрирования в среде Matlab. Численное интегрирование в Matlab…

Доброго времени суток! Сегодня мы продолжаем говорить об обработке статических данных (ранее разбирали апроксимацию и интерполяцию в Matlab). Численное дифференцирование в Matlab. Теория Процесс дифференцирования…

Приветствую! Сегодня продолжаем говорить об обработке экспериментальных данных. Сегодняшняя статья — продолжение предыдущей темы: Интерполяция в Matlab. Настоятельно советую с ней ознакомиться перед чтением данной…

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

Доброго времени суток, читатели! Сегодня мы поговорим о матрицах в Matlab, об их применении в решении систем линейных алгебраических уравнений. Подробно разберем методы решения, и…

codetown.ru

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

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