Задание 2
Методом наименьших квадратов (МНК) получить формулу аппроксимирующей параболы для следующей таблицы:
а)
x |
|
+2 |
+4 |
+6 |
+8 |
y |
2.5 |
4.9 |
8 |
12.1 |
16.9 |
Это же задание выполнить с использованием ИС Eureka и Scilab.
Пример выполнения задания 2: (вариант b, номер студента Nст=50,
x |
5 |
7 |
9 |
11 |
13 |
y=f(x) |
2.5 |
4.9 |
8 |
12.1 |
16.9 |
Аппроксимация – это замена одной функции у = f(x) (в нашем случае – приведенной выше табличной функции) другой функцией (в нашем случае – полиномом второй степени ). В методе наименьших квадратов коэффициенты с0, с1 и с2 подбирают так, чтобы величина
принимала минимальное значение. Здесь n – номер последнего узла таблицы. Нумерация ведется с нуля, то есть для нашей таблицы x0=5, x1=7, …, x4=13, n=4.
Эта задача сводится к решению системы нормальных уравнений для определения неизвестных коэффициентов. В нашем случае три неизвестных коэффициента, надо решить систему из трех линейных уравнений:
Составим вспомогательную таблицу:
i |
xi |
yi |
|
|
|
|
|
0 |
5 |
2.5 |
25 |
125 |
625 |
12.5 |
62.5 |
1 |
7 |
4.9 |
49 |
343 |
2401 |
34.3 |
240.1 |
2 |
9 |
8 |
81 |
729 |
6561 |
72 |
648 |
3 |
11 |
12.1 |
121 |
1331 |
14641 |
133.1 |
1464.1 |
4 |
13 |
16.9 |
169 |
2197 |
28561 |
219.7 |
2856.1 |
|
45 |
44.4 |
445 |
4725 |
52789 |
471.6 |
5270.8 |
Таким образом, для наших исходных данных имеем систему
44.4 = 5c0 + 45c1 + 445c2
471.6 = 45c0 + 445c1+ 4725c2
5270.8 = 445c0 + 4725c1 + 52789c2,
решая которую (например, методом Гаусса), получаем:
с0 = 0.24071429, с1= – 0.064285714, с2 = 0.10357143.
Следовательно, нашу таблично заданную функцию мы заменили параболой y = 0.241 – 0.064x + 0.104x2.
Последний этап решения: наносим исходные данные на координатную плоскость и на этой же плоскости строим полученную параболу.
Ответ: y = 0.241 – 0.064x + 0.104x2
Чтобы решить задачу с помощью ИС Eureka, в окне Edit надо набрать:
y(x) := c0 + c1*x + c2*x^2
y(5) = 2.5
y(7) = 4.9
y(9) = 8
y(11) = 12.1
y(13) = 16.9
$ substlevel = 0
После выполнения команды Solve в окне Solution получим решение:
с0 = 0.241
c1 = – 0.064
c2 = 0.104
Maximum error is 0.0511428571
Ответ: y = 0.241 – 0.064x + 0.104x2
Примечание: Если в каком-либо окне видны не все данные, то это окно можно распахнуть на весь экран, нажав клавишу F5.
Чтобы решить данную задачу с помощью ИС Scilab, можно в окне редактора системы набрать следующую программу:
xbasc()
clc
//Функция, вычисляющая разность между экспериментальными
//и теоретическими значениями,
//перед использованием необходимо определить
//z=[x;y] - матрицу исходных данных и
//с - вектор начальных значений коэффициентов,
//размерность вектора должна совпадать
//с количеством искомых коэффициентов
function y=G(c,z)
y=z(2)-c(1)-c(2)*z(1)-c(3)*z(1)^2
endfunction
//Исходные данные
x=[5 7 9 11 13];
y=[2.5 4.9 8 12.1 16.9];
//Формирование матрицы исходных данных
z=[x;y];//та же буква, что и в функции y=G(c,z)
//Вектор начальных приближений
c=[0;0;0];//нулей столько, сколько искомых коэффициентов. Это нач. приближение
//Решение задачи
[a,err]=datafit(G,z,c)
//Построение графика экспериментальных данных
plot2d(x,y,-4);
//Построение графика подобранной функции на отрезке [4 , 14]
t=4:0.01:14;
Ptc=a(1)+a(2)*t+a(3)*t^2;
plot2d(t,Ptc);
После запуска программы (Execute/Load into Scilab) в командном окне получим:
err =
0.0051429
a =
0.2406191
- 0.0642614
0.1035701
Здесь err - сумма площадей квадратов отклонений, а – вектор искомых коэффициентов с0, с1 и с2 .
Ответ: y = 0.1036x2 – 0.0643x + 0.2407
Очевидно, что коэффициенты с0, с1 и с2, полученные в результате решения непосредственно системы уравнений и с помощью ИС Eureka и Scilab, должны совпадать (с учетом погрешностей округления, которые мы делали, решая систему вручную).