Скачиваний:
20
Добавлен:
07.01.2014
Размер:
150.53 Кб
Скачать

Российский химико-технологический

Университет им. Д.И.Менделеева

Кафедра вычислительной математики

Отчёт по теме: «Приближение функций».

Выполнила: Першина А.В.

Группа И-24

Проверил: Епишкин А.П.

Москва 2008

Приближение функции.

Для заданных на отрезке независимой переменной и соответствующих им значениях зависимой переменной , где i=0,1,2,…,n, определить аналитическую зависимость y = f(x).

Основные этапы при приближении функции:

  1. выбор вида зависимости

  2. выбор критерия

  3. выбор узловых точек

  4. оценка точности

Интерполяция.

Пусть в 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