Лабораторные работы / Отчеты / Приближение функции - Епишкин - Першина - 2008 / Приближение функции
.doc
Российский химико-технологический
Университет им. Д.И.Менделеева
Кафедра вычислительной математики
Отчёт по теме: «Приближение функций».
Выполнила: Першина А.В.
Группа И-24
Проверил: Епишкин А.П.
Москва 2008
Приближение функции.
Для заданных на отрезке независимой переменной и соответствующих им значениях зависимой переменной , где i=0,1,2,…,n, определить аналитическую зависимость y = f(x).
Основные этапы при приближении функции:
-
выбор вида зависимости
-
выбор критерия
-
выбор узловых точек
-
оценка точности
Интерполяция.
Пусть в n+1 точке определены значения . Требуется построить многочлен М(х) степени не выше , который принимает в узловых точках заданные значения, т.е. Интерполяция используется для замены реальной сложной функции более простой на небольшом интервале области определения функции, а также для вычисления промежуточных значений функции заданной таблично. Существует несколько методов.
Метод с использованием многочлена Лагранжа.
Рассмотрим многочлен вида (1)
где i = 0,1,2,…,n, который только в точке принимает значение , а в остальных равен нулю.
, где j = 0,1,2,…,n. Из этого условия можно определить с
и тогда многочлен (1) примет вид
(2)
А многочлен, который в n+1 узловой точке будет принимать заданные значения, можно представить как сумму многочленов вида (2).
Например:
i |
|
|
0 |
-1 |
1 |
1 |
0 |
0 |
2 |
1 |
1 |
L(x)=x
Программа для вычисления коэффициентов в интерполяционном многочлене:
Sub intrpl()
Dim i As Integer, x(4), y(4), l(4), s, s1, A(4), B(4), C(4), D(4), S_a, S_b, S_c, S_d As Single
For i = 0 To 3
x(i) = Cells(2, i + 2)
y(i) = Cells(3, i + 2)
Next i
s = x(0) + x(1) + x(2) + x(3)
s1 = x(0) * (x(1) + x(2) + x(3)) + x(1) * (x(2) + x(3)) + x(2) * x(3)
For i = 0 To 3
A(i) = y(i) / (x(i) ^ 3 - x(i) ^ 2 * (s - x(i)) + x(i) * (s1 - x(i) * (s - x(i))) - x(0) * x(1) * x(2) * x(3) / x(i))
B(i) = -(s - x(i)) * A(i)
C(i) = (s1 - x(i) * (s - x(i))) * A(i)
D(i) = -x(0) * x(1) * x(2) * x(3) / x(i) * A(i)
Cells(7 + i, 2) = A(i)
Cells(7 + i, 3) = B(i)
Cells(7 + i, 4) = C(i)
Cells(7 + i, 5) = D(i)
Next i
S_a = 0
S_b = 0
S_c = 0
S_d = 0
For i = 0 To 3
Sa = Sa + A(i)
Sb = Sb + B(i)
Sc = Sc + C(i)
Sd = Sd + D(i)
Next i
Cells(12, 2) = Sa
Cells(12, 3) = Sb
Cells(12, 4) = Sc
Cells(12, 5) = Sd
End Sub
Аппроксимация.
Пусть в результате эксперимента для заданных значений независимой переменной были определены значения зависимой переменной . Требуется отыскать аналитическую зависимость между х и у в виде некоторой функции f(x), которая наилучшим образом (в смысле какого-либо критерия рассогласования) описывала эти экспериментальные данные. Чаще используют квадратичный критерий рассогласования . Функцию f(x) определим как линейную, т.е. Коэффициенты и будем называть параметрами. Надо найти также значения параметров, при которых квадратичный критерий рассогласования имел бы минимальное значение. Критерий рассогласования R является функцией двух переменных и т.е. . Необходимое условие экстремума функции нескольких переменных – равенство 0 частных производных по параметрам.
и
Получаем систему уравнений для определения параметров:
Запишем СЛАУ и решение в матричном виде: ,
где , , ,
где и - транспонированная матрица – матрица, строки которой заменены соответствующими столбцами.
Пример: определить параметры зависимости вида , используя метод наименьших квадратов, по следующим экспериментальным данным:
|
0,00 |
1,00 |
2,00 |
3,00 |
4,00 |
5,00 |
|
3,32 |
6,64 |
13,26 |
23,65 |
37,49 |
54,76 |
у = -2,56 + 10,26х
Программа:
Option Base 1
Sub main()
Dim f!(6, 2), f_tr!(2, 6), n!(2, 2), y!(6), b!(2), n_obr!(2, 2), otv!(2)
For i = 1 To 6
For j = 1 To 2
If j = 1 Then f(i, j) = 1 Else f(i, j) = Cells(4, i)
Next j
y(i) = Cells(5, i)
Next i
For i = 1 To 6
For j = 1 To 2
f_tr(j, i) = f(i, j)
Next j
Next i
For i = 1 To 2
For j = 1 To 2
s = 0
For k = 1 To 6: s = s + f(k, j) * f_tr(i, k): Next k
n(i, j) = s
Next j
Next i
For i = 1 To 2
s = 0
For k = 1 To 6: s = s + y(k) * f_tr(i, k): Next k
b(i) = s
Next i
Call obr(n, n_obr)
For i = 1 To 2
s = 0
For k = 1 To 2: s = s + n_obr(i, k) * b(k): Next k
otv(i) = s
Cells(10 + i, 10) = otv(i)
Next i
End Sub
Sub obr(n, n_obr)
Dim a!(2, 4)
For i = 1 To 2
For j = 1 To 4
If j < 3 Then a(i, j) = n(i, j) Else: If i = j - 2 Then a(i, j) = 1 Else a(i, j) = 0
Next j
Next i
For i = 1 To 2
s = a(i, i)
For j = 1 To 4
a(i, j) = a(i, j) / s
Next j
Next i
s = a(2, 1)
For j = 1 To 4
a(2, j) = a(2, j) - s * a(1, j)
Next j
For i = 1 To 2
s = a(i, i)
For j = 1 To 4
a(i, j) = a(i, j) / s
Next j
Next i
s = a(1, 2)
For j = 1 To 4
a(1, j) = a(1, j) - s * a(2, j)
Next j
For i = 1 To 2
For j = 1 To 2
n_obr(i, j) = a(i, j + 2)
Next j
Next i
End Sub