59
1 Теория и практика программирования задач на ЭВМ

Теория и практика программирования задач на ЭВМ

Embed Size (px)

DESCRIPTION

Теория и практика программирования задач на ЭВМ. Содержание курса. Введение в численные методы Методы решения СЛАУ Исчисление конечных разностей Задача интерполяции Интерполяционный многочлен Лагранжа Интерполяционный многочлен Ньютона Сплайн-интерполяция Метод наименьших квадратов - PowerPoint PPT Presentation

Citation preview

Page 1: Теория и практика программирования задач на ЭВМ

1

Теория и практика программирования

задач на ЭВМ

Page 2: Теория и практика программирования задач на ЭВМ

2

Содержание курса Введение в численные методы Методы решения СЛАУ Исчисление конечных разностей Задача интерполяции Интерполяционный многочлен Лагранжа Интерполяционный многочлен Ньютона Сплайн-интерполяция Метод наименьших квадратов Численное дифференцирование Численное интегрирование:

Методы прямоугольника Метод трапецииМетод парабол (метод Симпсона)

Введение в Matlab Примеры программной реализации

Page 3: Теория и практика программирования задач на ЭВМ

3

Список литературы

1. Формалев В.Ф., Ревизников Д.Л. Численные методы. – М.: ФИЗМАТЛИТ, 2004.

2. Руководство MATLAB3. А.А.Самарский, А.В.Гулин.  Численные

методы М.: Наука, 1989.4. А.А.Самарский.  Введение в численные

методы М.: Наука, 1982.5. Петров И.Б., Лобанов А.И. Введение в

вычислительную математику.

Page 4: Теория и практика программирования задач на ЭВМ

4

Введение в численные методы

Первое применение вычислительных методов принадлежит древним египтянам, которые умели вычислять диагональ квадрата за конечное количество действий. Они также могли находить квадратный корень из 2, скорее всего, с помощью алгоритма, в дальнейшем получившего название формулы Герона, а еще позднее — метода Ньютона: uk+1=1/2(uk+2/uk), u0=a

Пример. Решается задача Коши для обыкновенного дифференциального

уравнения 2-го порядка:u''(t) = u(t), u(0) = 1, u'(0) = - 1.Общее решение имеет видu(t) = 0,5[u(0) + u'(0)]et + 0,5[u(0) - u'(0)]e- t.

При заданных начальных данных точное решение задачи: u(x) = e-

t, однако малая погрешность δ в их задании приведет к появлению члена δe-t, который при больших значениях аргумента может существенно исказить решение.

Page 5: Теория и практика программирования задач на ЭВМ

5

Определение: Погрешность измерения — оценка отклонения измеренного значения величины от её истинного значения. Погрешность измерения является характеристикой (мерой) точности измерения.

Page 6: Теория и практика программирования задач на ЭВМ

6

Определение: Абсолютная погрешность измерения (англ. absolute error of a measurement) – погрешность измерения, выраженная в единицах измеряемой величины.

Page 7: Теория и практика программирования задач на ЭВМ

7

Определение:  Относительное удлинение  - это отношение приращенной в результате растяжения длины к первоначальной длине образца, выраженное в процентах

Page 8: Теория и практика программирования задач на ЭВМ

8

Определение: Относительная погрешность измерения (англ. relative error) – погрешность измерения, выраженная отношением абсолютной погрешности измерения к действительному или измеренному значению измеряемой величины.Примечание. Относительную погрешность в долях или процентах находят из отношений:

Page 9: Теория и практика программирования задач на ЭВМ

9

Численное решение систем линейных алгебраических уравнений

Пусть дана система линейных алгебраических уравнений (СЛАУ):

После (n-1)-го шага алгоритма Гаусса получаем следующую расширенную матрицу с контрольными суммами, содержащую верхнюю треугольную матрицу СЛАУ

Page 10: Теория и практика программирования задач на ЭВМ

10

Пример. Методом Гаусса решить СЛАУ:

Page 11: Теория и практика программирования задач на ЭВМ

11

Теория приближений

(1)

Page 12: Теория и практика программирования задач на ЭВМ

12

Исчисление конечных разностей

Page 13: Теория и практика программирования задач на ЭВМ

13

Задача интерполяции

Page 14: Теория и практика программирования задач на ЭВМ

14

Интерполяционный многочлен Лагранжа

Page 15: Теория и практика программирования задач на ЭВМ

15

Интерполяционный многочлен Ньютона

В случае равноудаленных центров интерполяции, находящихся на единичном расстоянии друг от друга, справедлива формула:

Page 16: Теория и практика программирования задач на ЭВМ

16

Сплайн-интерполяция

Page 17: Теория и практика программирования задач на ЭВМ

17

Кубический сплайн

Page 18: Теория и практика программирования задач на ЭВМ

18

Метод наименьших квадратов

Page 19: Теория и практика программирования задач на ЭВМ

19

Численное дифференцирование

Page 20: Теория и практика программирования задач на ЭВМ

20

Page 21: Теория и практика программирования задач на ЭВМ

21

Численное интегрирование

Впервые разработал И. Ньютон. Численное интегрирование основано на том, что функция заменяется интерполяционным многочленом:

F(x)=Р(х)Р(х)=a0+a1x1+a2x2+…+anxn

(строится по точкам, то есть P(xi)=F(xi)

Page 22: Теория и практика программирования задач на ЭВМ

22

Применение численных методов

Т.к. не все функции интегрируются аналитическими способами, то приходится применять численные методы.Функция y=F(x) заменяется интерполяционным многочленом P(x), который в точках xi равен значению функции

P(xi)=F(xi)

Page 23: Теория и практика программирования задач на ЭВМ

23

Геометрическая интерпретация

Интеграл – площадь криволинейной (подинтегральной) трапеции, одной из боковых сторон которой является кривая У= F(x)

a b x

у

Page 24: Теория и практика программирования задач на ЭВМ

24

Методы интегрирования

В зависимости от степени интерполяционного многочлена выбираются различные методы интегрирования, в частностиМетоды прямоугольника

1. Слева2. Справа

Метод трапецииМетод парабол (метод Симпсона)

Page 25: Теория и практика программирования задач на ЭВМ

25

Метод прямоугольника

Для методов прямоугольника выбирается интерполяционный многочлен 0-порядка

Р(х)=a0

Page 26: Теория и практика программирования задач на ЭВМ

26

Метод прямоугольника слева Р(х0)=у0

Для метода прямоугольника слева интерполяционный многочлен Р(хi)=уi

x

y

x0

a bx1 x2 xn

у1

у0

у2

Page 27: Теория и практика программирования задач на ЭВМ

27

Метод прямоугольника слева

1 1

)(x

x

o

x

x

o

o o

hydxydxxf

x

y

x0

a bx1 x2 xn

у1

у0

у2

Page 28: Теория и практика программирования задач на ЭВМ

28

Метод прямоугольника слева

На отрезке [a, b] интеграл будет равен площади n-прямоугольниковИнтеграл слева вычисляется по формуле:

nb

a

Ryyynabdxxf n

)...()( 110

Page 29: Теория и практика программирования задач на ЭВМ

29

Rn - погрешность

где Rn - погрешность, которая вычисляется по формуле:

nMabRn

2)( 12

)(max],[

1 xfMba

Page 30: Теория и практика программирования задач на ЭВМ

30

Метод прямоугольника справа Р(х0)=у1

Для метода прямоугольника справа интерполяционный многочлен Р(хi)=уi+1

x

y

x0

a bx1 x2 xn

y1

y2

yn

Page 31: Теория и практика программирования задач на ЭВМ

31

Метод прямоугольника слева

1 1

11)(x

x

x

xo o

hydxydxxf

x

y

x0

a bx1 x2 xn

y1

y2

yn

Page 32: Теория и практика программирования задач на ЭВМ

32

Метод прямоугольника справа

На отрезке [a, b] интеграл будет равен площади n-прямоугольников:Интеграл справа вычисляется по формуле:

nb

a

Ryyynabdxxf n

)...()(21

Page 33: Теория и практика программирования задач на ЭВМ

33

Rn - погрешность

где Rn - погрешность, которая вычисляется по формуле:

nMabRn

2)( 12

)(max],[

1 xfMba

Page 34: Теория и практика программирования задач на ЭВМ

34

Метод трапеций

x

y

x0

a bx1 x2 xn

Page 35: Теория и практика программирования задач на ЭВМ

35

Метод трапеций

Для метода трапеций выбирается интерполяционный многочлен 1-порядка

F(x)=P(x) =a0+а1х

и нам известно, что F(x0)=y0 , F(x1)=y1

Построим интерполяционный многочлен

)()( 001

0 xxnyyyxP

Page 36: Теория и практика программирования задач на ЭВМ

36

hyy

hxyxyhyhyxyxyhy

hxyyhxyyhy

hxyy

xyhxxhxhx

nyy

hyxy

xxnyy

xyhxxhxhx

nyy

hxydxxxnyy

ydxxfhx

x

hx

x

)2

(2

2

2)())((2

2)(

)2

222)((

)22

)(()2

)(2))(()((

)())(()(

1000110100010

001000

001

00

000001

000

0001

00

000001

00

0

0

0

01

0

0

0

2222222

2221

2

2222

22

Page 37: Теория и практика программирования задач на ЭВМ

37

Интеграл по методу трапеции

Таким образом, интеграл, вычисляемый по методу трапеции на отрезке [a, b] равен:

n1n1n0

b

a

b

a

R)y...y2yy(

nab

P(x)dxf(x)dx

x

y

b

Page 38: Теория и практика программирования задач на ЭВМ

38

Rn – погрешность

где Rn – погрешность для метода трапеций, вычисляемая по формуле:

2

3

12)( MnabRn

)(max],[

2 xfMba

Page 39: Теория и практика программирования задач на ЭВМ

39

Метод Симпсона (парабол).

у2

у0

у1

x

y

x0

a bx1 x2 xn

Page 40: Теория и практика программирования задач на ЭВМ

40

Метод Симпсона (парабол)

Для этого метода промежуток разбиваем на чётное количество частей и считаем, что нам известны 3 точки:

y0=F(x0)

y1=F(x1)

y2=F(x2)

у2

у0

у1

x

y

x0

a bx1 x2 xn

Page 41: Теория и практика программирования задач на ЭВМ

41

Метод Симпсона (парабол)

))()((22

2

)()(

00012

001

0

hxxxxh

yyy

xxhyyyxP

Page 42: Теория и практика программирования задач на ЭВМ

42

Метод Симпсона (парабол)

))()((2

2

)()(

00012

001

0

222

2

hxxxxh

yyy

xxhyyyxP

Убедимся в том, что P(x2)=F(x2):

Заметим, что x2=x0+2h P(x)=y0+2y1-2y0+y2-2y1+y0=y2

Page 43: Теория и практика программирования задач на ЭВМ

43

Метод Симпсона (парабол)

На отрезке [x0, x0+2h] интеграл вычисляется по формуле:

hyyydxxPdxxfhx

x

hx

x

)4(31)()( 210

0

0

0

0

22

Page 44: Теория и практика программирования задач на ЭВМ

44

Интеграл для метода Симпсона на отрезке [a, b] вычисляется по формуле:

b

ann

nn

Ryyy

yyyyynab

dxxf

)...(2

)...(4(3

)(

2242

123120

Page 45: Теория и практика программирования задач на ЭВМ

45

Rn – погрешность где Rn – погрешность,

вычисляемая по формуле:

)(max

,3 xfM IV

ba

nMabRn

180)( 35

Page 46: Теория и практика программирования задач на ЭВМ

46

Page 47: Теория и практика программирования задач на ЭВМ

47

Работа с матрицами в среде MatLab

Page 48: Теория и практика программирования задач на ЭВМ

48

Page 49: Теория и практика программирования задач на ЭВМ

49

Оператор двоеточия

Page 50: Теория и практика программирования задач на ЭВМ

50

Автоматическое создание матриц

zeros – нулевая матрица rand – двумерное равномерное

распределение randn – двумерное нормальное

распределение ones- матрица, состоящая из единиц

Page 51: Теория и практика программирования задач на ЭВМ

51

Удаление строк и столбцов

Page 52: Теория и практика программирования задач на ЭВМ

52

Команда format

Page 53: Теория и практика программирования задач на ЭВМ

53

Выражения

Переменные Числа

Операторы функции

Page 54: Теория и практика программирования задач на ЭВМ

Несколько специальных функций предоставляют значения часто используемых констант.

54

Page 55: Теория и практика программирования задач на ЭВМ

55

Метод наименьших квадратов

Page 56: Теория и практика программирования задач на ЭВМ

56

Кубическая интерполяция

Page 57: Теория и практика программирования задач на ЭВМ

57

Метод Симпсона

#include <iostream>#include <sstream>using namespace std;double FX(double x){return x+exp(x); }void main(){double a,b;cout<<"Vvedite granic integrirovaniya (a,b): ";cin>>a>>b;cout<<"Znachenie integrala Simpona: "<<(b-a)/6*(FX(a)+FX(b)+4*FX((a+b)/2));system("PAUSE"); }

quad('x+exp(x)', 0, 1)

Ответ: 2.21886 Ответ: 2.2183

Page 58: Теория и практика программирования задач на ЭВМ

58

Метод прямоугольников

double f(double x){ return sin(x); }double rectangle_integrate(double a, double b, int n, double (*f)(double) ){ double result, h; int i; h = (b-a)/n; result = 0.0; for(i=1; i <= n; i++){ result += f( a + h * (i - 0.05) ); } result *= h; return result;}int main(void){ double integral; integral=rectangle_integrate(0,2,100,f); printf("The value of the integral is: %lf \n", integral); system("PAUSE"); return 0; }

a=0; b=2;h = 0.05; f = inline('sin(x)') x = a:h:b; y = f(x); I = sum(h*y)

Ответ:1.424297 Ответ: 1.4161

Page 59: Теория и практика программирования задач на ЭВМ

59

Метод трапеций double INTEGR(double x){ return x*exp(x)+log(x)+1;}double trapez(double left, double right, double h){ double sum = 0; double runner;

for(runner = left + h; runner < right; runner += h) sum += INTEGR(runner); sum = (sum + 0.5*(INTEGR(left) + INTEGR(right))) * h; return sum;}int main(int argc, char ** argv){char c; double a, b; double h; printf("vvedit nizniy mezu integr : ");scanf("%lf",&a); printf("vvedit verhniy mezu integr : "); scanf("%lf",&b); printf("Enter integration step : "); scanf("%lf",&h); double trap = trapez(a, b, h); printf("vidpovid za metodom trapezii %10.10f.\n",

trap);scanf("%c",&c);scanf("%c",&c);return 0; }

Ответ: 676.9040549041.

MATLABx=1:0.1:5;y=x.*exp(x)+log(x)+1;trapz(x,y)

ans = 602.4365