Пример использования метода наименьших квадратов
ТРЕБОВАНИЯ К ВЫПОЛНЕНИЮ ЛАБОРАТОРНИХ РАБОТ
При выполнении лабораторных работ студенту необходимо изучить теоретические сведения, записать основные положения и формулы, если требуется, привести геометрическую интерпретацию численного метода. Затем студент должен выполнить ручной счет согласно требованиям и решить предлагаемую задачу с заданной точностью алгоритмически, используя математические пакеты MATLAB и MATHCAD. Для проверки правильности полученных результатов нужно решить поставленную задачу с помощью соответствующих встроенных функций пакетов MATLAB и MATHCAD.
Выполнение лабораторной работы заканчивается выводами, в которых помимо прочего должны быть отмечены преимущества и недостатки изученного численного метода.
Теоретические сведения и выводы должны быть написаны от руки.
Лабораторные работы в пособии разбиты по темам. Теоретическое обоснование методов приведено лишь в той мере, в которой оно необходимо для лучшего усвоения и практического применения. Каждая лабораторная работа содержит примеры выполнения, но не полностью, а лишь те пункты, которые обычно вызывают наибольшие затруднения. Студент должен самостоятельно разобраться с приведенными примерами и программами, дополнить их и, возможно, попытаться улучшить. Это позволит получить более глубокое представление об идеях, лежащих в основе численных методов. Каждая тема заканчивается разделом, в котором рассмотрены возможности инструментальных пакетов MATLAB и MATHCAD для решения соответствующих задач численного анализа.
ТЕМА 1. АППРОКСИМАЦИЯ ФУНКЦИЙ ПО МЕТОДУ НАИМЕНЬШИХ КВАДРАТОВ (МНК)
Лабораторная работа № 1
Метод наименьших квадратов
В случае аппроксимации полиномами
Цель работы: научиться аппроксимировать таблично заданные функции методом наименьших квадратов.
Постановка задачи:
1. Изучить теоретические сведения.
2. Провести ручной счёт построения аппроксимирующего многочлена первой степени для таблично заданной функции.
Используя пакеты MathCad и MatLab:
3. Написать подпрограммы построения аппроксимирующего многочлена для таблично заданной функции.
4. Определить невязки аппроксимации.
5. Используя подпрограммы, найти многочлены первой и второй степеней, аппроксимирующие заданную табличную функцию. Определить невязки.
6. Проверить вычисления с помощью встроенных функций.
7. Построить графики аппроксимирующих полиномов и заданной функции.
Теоретические сведения
Аппроксимация- это приближённое выражение известных математических зависимостей объектов через другие, более простые, и, следовательно, более известные.
МНК применяется:
1) При построении эмпирических формул (получение путём эксперимента). Аналитическое построение дискретной зависимости между x и y.
2) Аппроксимация функции (приближение);
3) Обработка статистического материала (выделение сигнала на фоне помех).
Для использования МНК должна быть известна либо табличная зависимость xk, yk, либо функция, вид которой мы хотим упростить.
Описание метода
Пусть в результате эксперимента получена таблица 1 значений функции:
Таблица 1
… | |||||
… |
Требуется аппроксимировать эту функцию многочленом степени ( ):
.
Идея метода: подобрать значения параметра an= ( , , ,…, ) таким образом, чтобы функция
была минимальной.
С учетом необходимых условий существования экстремума функции нескольких переменных получаем систему уравнений для определения неизвестных , , , …, :
, , (1)
Доказано, что система (1) имеет единственное решение, при котором принимает минимальное значение.
Рассмотрим частные случаи.
Частный случай 1. Пусть , т.е. функцию аппроксимируем многочленом первой степени:
.
Система уравнений для вычисления параметров , имеет вид:
;
. (2)
Решив систему, можем записать требуемый многочлен .
Частный случай 2. Пусть , т.е. функцию аппроксимируем многочленом второй степени:
.
Система уравнений для определения параметров , , имеет следующий вид:
;
; (3)
.
Решив систему, можем записать многочлен . Вычисления коэффициентов систем (2) и (3) запишем в виде табл. 2:
Таблица 2
... | ... | ... | ... | ... | ... | ... | ... |
Преимущество МНК:
При построении аппроксимирующего многочлена по МНК используются все точки таблицы. Если исходные данные получены с некоторыми погрешностями, то МНК сглаживает их.
Встроенные функции для реализации метода:
Пакет MathCad:
1.slope (vx,vy) – возвращает число а, равное наклону аппроксимирующей функции
2. intercept(vx,vy) – возвращает число b, равное смещению по оси ординат аппроксимирующей функции.
Вызов: y=slope(vx,vy)*x+intercept(vx,vy) –для линейной функции.
Пакет MatLab:
Пункт Tools основного меню графического окна содержит две команды:
Basic Fitting – основные методы аппроксимации;
Data Statistic – статичтические параметры данных.
В окне Basic Fitting можно выбрать метод аппроксимации, при этом соответствующая кривая появляется в графическом окне. Активизировав параметр Show equations (показать уравнения), получим выражение аппроксимирующей функции непосредственно в графическом окне. Оценку погрешности аппроксимации можно получить, если активизировать режим Plot residuals (показать норму погрешностей), выводящий столбцовый или линейчатый график погрешностей в узловых точках. Параметр Show norm of residuals (показать норму погрешности) позволяет вывести в окно погрешности норму, характеризующую среднеквадратичную ошибку.
Команда Tools/Data statistics выводит на экран окно, содержащее ряд статистических характеристик. Отметив соответствующую характеристику, можно визуализировать её в графическом окне.
Вариант решения
Функция задана таблично:
-2 | -1 | ||||||
1.8 | 1.8 | 2.5 | 3.1 | 3.7 | 2.2 | 1.9 |
1. Введём заданную функцию в виде векторов:
2. Решение задачи в среде MathCad:
2.1. Рассмотрим подпрограмму для построения аппроксимирующего многочлена:
PolinomMNK(x,y,k,n)- функция для нахождения коэффициентов многочлена, где k-степень полинома, n-количество точек:
Aproxim(x,A,n)- функция для нахождения аппроксимирующего многочлена. A- матрица коэффициентов многочлена.
2.2. Рассмотрим формулу для определения невязок:
где vj=PolinomMNK(x,y,n,k)
2.3.Найдём многочлены первой и второй степеней, аппроксимирующие заданную функцию:
Определим невязки аппроксимации:
2.4. Проверим вычисления с помощью встроенных функций:
Найдём коэффициенты a и bмногочлена первой степени с помощью встроенных функций slope(x,y) и intercept(x,y)
Найдём коэффициенты c, d и e многочлена второй степени с помощью встроенных функций Given и Find:
2.5. Построим графики полученных многочленов и заданной функции:
где yi - заданные значения функции.
3. Реализация в среде MatLab
3.1. Напишем подрограмму для нахождения коэффициентов многочлена:
function res=Polinom(x,y,k,n);
A=zeros(k+1,1);
x1=zeros(n+1,k+1);
for i=1:n+1
for j=1:k+1
x1(i,j)=x(i,1)^(j-1);
end
end
A=inv(x1.'*x1)*x1.'*y;
res = A;
return
x,y- заданный набор точек; k-степень полинома, n- количество точек.
3.2. Рассмотрим функцию для нахождения аппроксимирующего многочлена для заданной функции:
function res=Aproxim(x,A,k);
n=length(x);
for j=1:n
sum=0;
for i=1:k+1
sum=sum+A(i)*x(j)^(i-1);
end;
y(j)=sum;
end;
res=y;
return
A-коэффициенты многочлена, k- степень многочлена
3.3. Построим графики многочленов первой и второй степеней, аппроксимирующих заданную функцию:
>> x=[-2;-1;0;1;2;3;4];
>> y=[1.8;1.8;2.5;3.1;3.7;2.2;1.9];
>> A1=Polinom(x,y,1,6)
A1 = 2.3464
0.0821
>> A2=Polinom(x,y,2,6)
A2 =2.7929
0.3798
-0.1488
>> xx=-2:0.001:6;
>> f1=Aproxim(xx,A1,1);
>> f2=Aproxim(xx,A2,2);
>> plot(x,y,'O',xx,f1,xx,f2)
>> plot(x,y,'O',xx,f1,xx,f2)
Использование Basic Fitting:
Пример использования метода наименьших квадратов
В «Основах химии» Д.И. Менделеева приводяться данные о растворимости азотно-кислого натрия NaNo3 в зависимости от температуры воды. В 100 частях воды растворяется следующее число условных частей NaNO3 при соответствующих температурах:
0º 4º 10º 15º 21º 29º 36º 51º 68º
66,7 71,0 76,3 80,6 85,7 92,9 99,4 113,6 125,1 (4)
Теоретические соображения позволяют думать, что количественная сторона этого явления довольно точно описывается линейной зависимостью
y=a + bx,
где x- температура в градусах, а y- растворимость в условных частях на 100 частей воды. Однако, если мы попытаемся определить коэффициенты a и b, полагая x=xi=0º, 4º, 10º,… и y=yi=66,7;71,0;76,3,…, то придём к 9 уравнениям
yi=a+bxi (i=1, 2, …,9) (5)
относительно двух величин a и b, причём эти уравнения окажутся несовместными. Эта несовместность уравнений может объясняться либо несовершенством теории, предписывающей линейность зависимости, либо погрешностями наблюдений, либо тем и другим вместе. Мы можем, однако, думать, что количественные поправки к теории и наблюдениям невелики, и пытаться если не точно, то приближённо выразить наблюдения линейной зависимостью. Естественно тогда постараться найти такие значения коэффициентов a и b, для которых абсолютные величины «ошибок»
= yi – (a+bxi) (i=1, 2, … , 9), (6)
были бы в каком-то смысле «малыми в совокупности».
Метод наименьших квадратов в данном частном случае состоит в определении a и b из условия
(7)
Для нахождения точек (a, b), удовлетворяющих (7), составим уравнения:
С помощью описанной ранее функции PolinomMNK найдём коэффициенты a и b:
,
где x1и y1взяты из (4).
Получим полином первой степени:
y=67.508+0.871*x
(что и было полученно Менделеевым ещё в 1881 г.).
Варианты лабораторных работ