Всего на сайте:
303 тыс. 117 статей

Главная | Математика

Лабораторная работа № 3 Метод наименьших квадратов  Просмотрен 337

 

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

Рассмотрим непрерывную функцию , аппроксимирующую дискретную зависимость . Выберем ее в следующем виде: , где – заранее определенные базисные функции.

– необходимое условие для заданной функции . N – количество точек в наборе. Нахождение функции из условия минимума S называется методом наименьших квадратов.
S имеет минимум в следующем случае:

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

.

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

.

Из нее получим коэффициенты , по которым построим параболу: .

> restart;

Сначала зададим набор данных в виде списков значений x и y.

x:=[-3,-2,1,3,6,7];

y:=[1,2,4,1,-3,1];

Спомощью функции nops посчитаем количество элементов в списке x.

n:=nops(x);

m:=3; – количество базисных функций. Найдем минимальное и максимальное значение x, для того, чтобы использовать это при построении графика. Присвоим значения правой и левой части интервала [a,b].

a:=min(x[i]$i=1..n);

b:=max(x[i]$i=1..n);

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

> scmult:=proc (f1,f2)

sum(x[p]^f1*y[p]^f2,p=1..n);

end proc;

Определим расширенную матрицу f, которая будет представлением системы уравнений:

> f:=matrix(m,m+1);

Заполним ее элементы значениями:

> for i from 1 to m do

for j from 1 to m do

f[i,j]:=scmult(i+j-2,0);

od:

od:

for i from 1 to m do

f[i,m+1]:=scmult(i-1,1)

od:

> evalm(f); – выведем матрицу в поле вывода

Решение будем искать с помощью метода Жордана-Гаусса, который реализует функция gaussjord из пакета linalg:

> fres:=linalg[gaussjord](f);

Выделим последний столбец расширенной матрицы, который является решением системы.


> res:=linalg[col](fres,m+1);

Переменной r[1] присвоим значение графика точек из заданного списка. Для построения списка используем оператор перечисления:

>r[1]:=plot([[x[p],y[p]]$p=1..n],style=point,symbol=circle,symbolsize=20,color=blue):

Переменной r[2] присвоим значение графика параболы, использующий коэффициенты решения.

r[2]:=plot(sum(res[k]*t^(k-1),k=1..m),t=a-0.1..b+0.1,thickness=3):

Отобразим результат обоих построений на общем графике.

> plots[display](r[1],r[2]);

Программа, описанная выше, является универсальной для метода наименьших квадратов. Изменяя переменную m можно, получить решение для любой степени большей нуля. Для того, чтобы проходила точно через все точки решения, необходимо чтобы m была равна количеству точек. Если заменить присвоение m на m:=n;, то получится следующий график:


 

Предыдущая статья:Лабораторная работа № 2 Интерполяция функции полиномами Лежандра Следующая статья:Лабораторная работа № 4 Применение системы Maple в сопротивлении материалов
page speed (0.0566 sec, direct)