63
Numerické algoritmy Základy algoritmizace a programování 9.listopadu 2011 Numerické algoritmy

Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

  • Upload
    others

  • View
    27

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Numerické algoritmyZáklady algoritmizace a programování

9.listopadu 2011

Numerické algoritmy

Page 2: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Numerické algoritmy

Numerické rešení nelineární rovniceMetoda pulení intervaluNewtonova metodaMetoda tetiv

Numerická integraceObdélníková metodaLichobežníková metodaSimpsonova metoda

Numerické rešení Cauchyovy úlohyEulerova metoda

Numerické algoritmy

Page 3: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Numerické rešení nelineární rovnice

Úlohahledáme x ∈ R, pro které platí f (x) = 0.(x z rovnice neumíme vyjádrit),napr.f (x) = x3 − 3x2 − 9x + 5, f (x) = ln x − x

2 + 1Postup numerického rešení

1 Urcit interval, ve kterém leží jediný koren x ∈< a,b >2 Presvedcit se, že

funkce je spojitá v < a,b >hodnoty funkce v krajních bodech intervalumají ruzná znaménka (tj. v platí: f (a) · f (b) < 0)... funkce je ryze monotónní, prípadne, že funkce je bud’konvexní nebo konkávní v < a,b > (tj, první derivace 6= 0 adruhá derivace funkce v < a,b > nemení znaménko)(pro Newtonovu metodu))

3 Vybrat numerickou metodu a použít ji

Numerické algoritmy

Page 4: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Metody rešení

Metoda pulení intervalu (bisekce)Metoda tecen (Newtonova metoda)Metoda regula falsi (metoda tetiv)

Numerické algoritmy

Page 5: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Metoda pulení intervalu

Predpokládáme, žev intervalu < a,b > má rovnice f (x) = 0 jediné rešení (x∗)funkce f (x) je spojitá v < a,b >

v krajních bodech intervalu v platí: f (a) · f (b) < 0

Urcujeme približné rešení

xk =a + b

2

Jestliže f (xk ) = 0, pak xk jehledaným korenem x∗.Jinak hledáme v intervalu< xk ,b > nebo < a, xk >,takovém, že f (a) · f (b) < 0

a b

x1

�b

x∗

x2

-a

Numerické algoritmy

Page 6: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Metoda pulení intervalu

Predpokládáme, žev intervalu < a,b > má rovnice f (x) = 0 jediné rešení (x∗)funkce f (x) je spojitá v < a,b >

v krajních bodech intervalu v platí: f (a) · f (b) < 0

Urcujeme približné rešení

xk =a + b

2

Jestliže f (xk ) = 0, pak xk jehledaným korenem x∗.Jinak hledáme v intervalu< xk ,b > nebo < a, xk >,takovém, že f (a) · f (b) < 0

a bx1

�b

x∗

x2

-a

Numerické algoritmy

Page 7: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Metoda pulení intervalu

Predpokládáme, žev intervalu < a,b > má rovnice f (x) = 0 jediné rešení (x∗)funkce f (x) je spojitá v < a,b >

v krajních bodech intervalu v platí: f (a) · f (b) < 0

Urcujeme približné rešení

xk =a + b

2

Jestliže f (xk ) = 0, pak xk jehledaným korenem x∗.Jinak hledáme v intervalu< xk ,b > nebo < a, xk >,takovém, že f (a) · f (b) < 0

a bx1

�bx∗

x2

-a

Numerické algoritmy

Page 8: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Metoda pulení intervalu

Predpokládáme, žev intervalu < a,b > má rovnice f (x) = 0 jediné rešení (x∗)funkce f (x) je spojitá v < a,b >

v krajních bodech intervalu v platí: f (a) · f (b) < 0

Urcujeme približné rešení

xk =a + b

2

Jestliže f (xk ) = 0, pak xk jehledaným korenem x∗.Jinak hledáme v intervalu< xk ,b > nebo < a, xk >,takovém, že f (a) · f (b) < 0

a bx1

�bx∗

x2

-a

Numerické algoritmy

Page 9: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Metoda pulení intervalu

Predpokládáme, žev intervalu < a,b > má rovnice f (x) = 0 jediné rešení (x∗)funkce f (x) je spojitá v < a,b >

v krajních bodech intervalu v platí: f (a) · f (b) < 0

Urcujeme približné rešení

xk =a + b

2

Jestliže f (xk ) = 0, pak xk jehledaným korenem x∗.Jinak hledáme v intervalu< xk ,b > nebo < a, xk >,takovém, že f (a) · f (b) < 0

a bx1

�bx∗

x2

-a

Numerické algoritmy

Page 10: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Realizace

int puleni(float * x, float a, float b, float eps, float(*f)(float)){

/*funkce vraci 0, pokud byl koren nalezen, -1pokud byl interval zadan chybne*/if(f(a)*f(b)>0){return -1;}

*x=(a+b)/2;while(fabs(b-a)>eps){if(f(a)*f((*x)) > 0 )

a=*x;

zmenšení intervalu zleva

else b=*x;

zmenšení intervalu zprava

*x=(a+b)/2;}return 0;}

Numerické algoritmy

Page 11: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Realizace

int puleni(float * x, float a, float b, float eps, float(*f)(float)){

/*funkce vraci 0, pokud byl koren nalezen, -1pokud byl interval zadan chybne*/if(f(a)*f(b)>0){return -1;}

*x=(a+b)/2;while(fabs(b-a)>eps){if(f(a)*f((*x)) > 0 )

a=*x; zmenšení intervalu zlevaelse b=*x; zmenšení intervalu zprava

*x=(a+b)/2;}return 0;}

Numerické algoritmy

Page 12: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Struktura programu

#include<stdio.h>#include<math.h>float f(float x) {return asin(x)+2*x+1;}int puleni(float * x, float a, float b, float eps, float(*f)(float)). . .main()

{float x; int chyba;chyba = puleni(&x, -1, 1, 0.001, f) ;if (chyba != 0) /* nebo if(chyba) */printf("\nna zadanem intervalu neni koren");else printf("\nKoren je %f", x);}

Numerické algoritmy

Page 13: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Presnost aproximace

Po k krocích metody pulení najdeme približné rešení xk , kterése od presného rešení x∗ liší :

|xk − x∗| < b − a2k

Pokud na zadaném intervalu je jediný koren, cyklus budeukoncen, protože v každé iteraci se |b − a| zmenší na polovinu,tedy po konecném poctu iterací bude|b − a| < ε

Numerické algoritmy

Page 14: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Newtonova metoda – metoda tecen

Predpokládáme, žev intervalu < a,b > leží práve jeden koren (x∗)f ′(x) a f ′′(x) nemení znaménko v < a,b >

pro pocátecní aproximaci x0 platí f (x0) · f ′′(x0) > 0Pak posloupnost {xk}

xk+1 = xk −f (xk )

f ′(xk )

(xk+1 je prusecík tecny s osou x)Konverguje k x∗ a platí:

|xk − x∗| ≤ M2

2m1(xk − xk−1)

2,

M2 = max |f ′′(x)|,m1 = min|f ′(x)|, x ∈< a,b >

x0=a

LLLLLLL

x1\\

x2

b

Numerické algoritmy

Page 15: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Newtonova metoda – metoda tecen

Predpokládáme, žev intervalu < a,b > leží práve jeden koren (x∗)f ′(x) a f ′′(x) nemení znaménko v < a,b >

pro pocátecní aproximaci x0 platí f (x0) · f ′′(x0) > 0Pak posloupnost {xk}

xk+1 = xk −f (xk )

f ′(xk )

(xk+1 je prusecík tecny s osou x)Konverguje k x∗ a platí:

|xk − x∗| ≤ M2

2m1(xk − xk−1)

2,

M2 = max |f ′′(x)|,m1 = min|f ′(x)|, x ∈< a,b >

x0=aLLLLLLL

x1

\\

x2

b

Numerické algoritmy

Page 16: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Newtonova metoda – metoda tecen

Predpokládáme, žev intervalu < a,b > leží práve jeden koren (x∗)f ′(x) a f ′′(x) nemení znaménko v < a,b >

pro pocátecní aproximaci x0 platí f (x0) · f ′′(x0) > 0Pak posloupnost {xk}

xk+1 = xk −f (xk )

f ′(xk )

(xk+1 je prusecík tecny s osou x)Konverguje k x∗ a platí:

|xk − x∗| ≤ M2

2m1(xk − xk−1)

2,

M2 = max |f ′′(x)|,m1 = min|f ′(x)|, x ∈< a,b >

x0=aLLLLLLL

x1\\

x2 b

Numerické algoritmy

Page 17: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Vysvetlení...

xk+1 je prusecík tecny ke grafu f (x) v bode [xk , f (xk )] sosou x .

Rovnice tecny: y − yk = f ′(xk )(x − xk ), yk = f (xk )

Osa x : y = 0, prusecík s osou x má souradnice [xk+1,0]Tedy 0− f (xk ) = f ′(xk )(xk+1 − xk )⇒

xk+1 = xk −f (xk )

f ′(xk )

Numerické algoritmy

Page 18: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Vysvetlení...

xk+1 je prusecík tecny ke grafu f (x) v bode [xk , f (xk )] sosou x .Rovnice tecny: y − yk = f ′(xk )(x − xk ), yk = f (xk )

Osa x : y = 0, prusecík s osou x má souradnice [xk+1,0]Tedy 0− f (xk ) = f ′(xk )(xk+1 − xk )⇒

xk+1 = xk −f (xk )

f ′(xk )

Numerické algoritmy

Page 19: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Vysvetlení...

xk+1 je prusecík tecny ke grafu f (x) v bode [xk , f (xk )] sosou x .Rovnice tecny: y − yk = f ′(xk )(x − xk ), yk = f (xk )

Osa x : y = 0, prusecík s osou x má souradnice [xk+1,0]

Tedy 0− f (xk ) = f ′(xk )(xk+1 − xk )⇒

xk+1 = xk −f (xk )

f ′(xk )

Numerické algoritmy

Page 20: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Vysvetlení...

xk+1 je prusecík tecny ke grafu f (x) v bode [xk , f (xk )] sosou x .Rovnice tecny: y − yk = f ′(xk )(x − xk ), yk = f (xk )

Osa x : y = 0, prusecík s osou x má souradnice [xk+1,0]Tedy 0− f (xk ) = f ′(xk )(xk+1 − xk )⇒

xk+1 = xk −f (xk )

f ′(xk )

Numerické algoritmy

Page 21: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Realizace

int newton(float * x, float a, float b, float eps, float (*f)(float), float(*df)(float)){

/* funkce vraci -1 pri nesplneni f(a)f(b)<0.*//* -2 pri nulove derivaci*/

float pom;if(f(a)*f(b)>0)return -1;pom = a-(f(a)*(b-a))/(f(b)-f(a));if (f(pom)*df(pom)>0) *x=a; else *x=b;/*výber x = a nebo x = b ...*/

while(fabs(f(*x))>eps){if(fabs(df(*x))<eps) return -2;*x=*x-f(*x)/df(*x);}return 0;}

Numerické algoritmy

Page 22: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Vysvetlení

pom je prusecík prímky [a, f (a)][b, f (b)] s osou x .V intervalu < a,b > mohou nastat 4 situace:

f (x) je rostoucí⇒ f ′ > 0 a konvexní⇒ f (pom) < 0 . . . x0 = bf (x) je rostoucí⇒ f ′ > 0 a konkávní⇒ f (pom) > 0 . . . x0 = af (x) je klesající⇒ f ′ < 0 a konvexní⇒ f (pom) < 0 . . . x0 = af (x) je klesající⇒ f ′ < 0 a konkávní⇒ f (pom) > 0 . . . x0 = b

Numerické algoritmy

Page 23: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Struktura programu

#include<stdio.h>#include<math.h>float f(float x) {return x*x-atan(x)-1;}float df(float x){return 2*x - 1/(1+x*x);}int newton(float * x, float a, float b, float eps, float(*f)(float), float(*df)(float)). . .main()

{float x; int chyba;chyba = newton(&x, -sqrt(3), 0, 0.001, f, df) ;if (chyba != 0)printf("\nchybne zadany interval");else printf("\nKoren je %f", x);}

Numerické algoritmy

Page 24: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Metoda tetiv – regula falsi

Predpokládáme, žev intervalu < a,b > leží práve jeden koren (x∗)f ′′(x) nemení znaménko v < a,b >

pocátecní aproximaci x0 volíme :v prípade, že f (b) · f ′′(b) > 0, x0 = a ,v prípade, že f (a) · f ′′(a) > 0, x0 = b

Pak posloupnost{xk}:

xk+1 = xk−b − xk

f (b)− f (xk )·f (xk ) resp. xk+1 = xk−

xk − af (xk )− f (a)

·f (xk )

(xk+1 je prusecík prímky [a, f (a)][b, f (b)] s osou x)Konverguje k x∗ a platí:

|xk − x∗| ≤ M1 −m1

m1|xk − xk−1|,

M1 = max |f ′(x)|,m1 = min|f ′(x)|, x ∈< a,b >

Numerické algoritmy

Page 25: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Realizace

int tetivy(float * x, float a, float b, float eps, float (*f)(float)){

/* funkce vraci -1 pri nesplnenif(a)f(b)<0...*/if(f(a)*f(b)>0)return -1;*x = a-(f(a)*(b-a))/(f(b)-f(a));while(fabs(f(*x))>eps){if (f(*x)*f(a)>0)

a=*x;else b=*x;*x = a-(f(a)*(b-a))/(f(b)-f(a));}return 0;}

Numerické algoritmy

Page 26: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Struktura programu

#include<stdio.h>#include<math.h>float f(float x) {return x*x-atan(x)-1;}int tetivy(float * x, float a, float b, float eps, float(*f)(float)). . .main()

{float x; int chyba;chyba = tetivy(&x, -sqrt(3), 0, 0.001, f) ;if (chyba != 0)printf("\nchybne zadany interval");else printf("\nKoren je %f", x);}

Numerické algoritmy

Page 27: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Rekapitulace metod rešení f (x) = 0

Metoda pulení intervalu

x = (a + b)/2

Newtonova metoda

xk+1 = xk −f (xk )

f ′(xk )

Metoda tetiv

xk+1 = xk−b − xk

f (b)− f (xk )·f (xk ) resp. xk+1 = xk−

xk − af (xk )− f (a)

·f (xk )

Numerické algoritmy

Page 28: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Jak urcit interval?

Neformálne - graficky

Formálne - z prubehu funkce (urcit extrémy a funkcníhodnoty v extrémních bodech)

Numerické algoritmy

Page 29: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Jak urcit interval?

Neformálne - grafickyFormálne - z prubehu funkce (urcit extrémy a funkcníhodnoty v extrémních bodech)

Numerické algoritmy

Page 30: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Príklady

f (x) = x3 − 3x2 − 9x + 5

Puleni Newton Tetivyx = 0.000 1.000 0.25x = 0.500 0.500 0.475410x = 0.250 0.489 0.488264x = 0.375 0.488845

x = 0.4375x = 0.46875

x = 0.484375x = 0.492188x = 0.488281x = 0.490234x = 0.489258

f (x) = 0 má 3 reálné koreny:x1 < −1, x2 ∈ (−1,1), x3 > 3

Numerické algoritmy

Page 31: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Príklady

f (x) = x3 − 3x2 − 9x + 5

Puleni Newton Tetivyx = 0.000 1.000 0.25x = 0.500 0.500 0.475410x = 0.250 0.489 0.488264x = 0.375 0.488845

x = 0.4375x = 0.46875

x = 0.484375x = 0.492188x = 0.488281x = 0.490234x = 0.489258

f (x) = 0 má 3 reálné koreny:x1 < −1, x2 ∈ (−1,1), x3 > 3

Numerické algoritmy

Page 32: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

f (x) = ln x − x2 + 1

Puleni Newton Tetivyx = 5.000000 6.000000 5.299484x = 5.500000 5.375278 5.354840x = 5.250000 5.356713x = 5.375000x = 5.312500x = 5.343750x = 5.359375x = 5.351562x = 5.355469x = 5.357422x = 5.356445

f (x) = 0 má 2 koreny:x1 ∈ (−1

e ,1) x2 ∈ (4,6)

Numerické algoritmy

Page 33: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

f (x) = ln x − x2 + 1

Puleni Newton Tetivyx = 5.000000 6.000000 5.299484x = 5.500000 5.375278 5.354840x = 5.250000 5.356713x = 5.375000x = 5.312500x = 5.343750x = 5.359375x = 5.351562x = 5.355469x = 5.357422x = 5.356445

f (x) = 0 má 2 koreny:x1 ∈ (−1

e ,1) x2 ∈ (4,6)

Numerické algoritmy

Page 34: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

f (x) = ex − x − 2

Puleni Newton Tetivyx = -0.500000 -2.000000 -1.026490x = -1.250000 -1.843482 -1.824469x = -1.625000 -1.841406 -1.841167x = -1.812500x = -1.906250x = -1.859375x = -1.835938x = -1.847656x = -1.841797x = -1.838867x = -1.840332x = -1.841064

f (x) = 0 má 2 koreny:x1 ∈ (−2,1) x2 ∈ (1,2)

Numerické algoritmy

Page 35: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

f (x) = ex − x − 2

Puleni Newton Tetivyx = -0.500000 -2.000000 -1.026490x = -1.250000 -1.843482 -1.824469x = -1.625000 -1.841406 -1.841167x = -1.812500x = -1.906250x = -1.859375x = -1.835938x = -1.847656x = -1.841797x = -1.838867x = -1.840332x = -1.841064

f (x) = 0 má 2 koreny:x1 ∈ (−2,1) x2 ∈ (1,2)

Numerické algoritmy

Page 36: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

f (x) = x2 − arctgx − 1

Puleni Newton Tetivyx = 1.000000 2.000000 0.691359x = 1.500000 1.501881 1.179720x = 1.250000 1.400912 1.344527x = 1.375000 1.396164 1.384690x = 1.437500 1.393650x = 1.406250 1.395609x = 1.390625 1.396035x = 1.398438x = 1.394531x = 1.396484x = 1.395508

f (x) = 0 má 2 koreny:x1 ∈ (−2,0) x2 ∈ (0,2)

Numerické algoritmy

Page 37: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

f (x) = x2 − arctgx − 1

Puleni Newton Tetivyx = 1.000000 2.000000 0.691359x = 1.500000 1.501881 1.179720x = 1.250000 1.400912 1.344527x = 1.375000 1.396164 1.384690x = 1.437500 1.393650x = 1.406250 1.395609x = 1.390625 1.396035x = 1.398438x = 1.394531x = 1.396484x = 1.395508

f (x) = 0 má 2 koreny:x1 ∈ (−2,0) x2 ∈ (0,2)

Numerické algoritmy

Page 38: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

f (x) = arcsinx + 2x + 1

Puleni Newton Tetivyx = -0.250000 -0.500000 -0.328170x = -0.375000 -0.334026 -0.331167x = -0.312500 -0.331209x = -0.343750x = -0.328125x = -0.335938x = -0.332031x = -0.330078x = -0.331055

f (x) = 0 má 1 koren:x1 ∈< −0.5,0 >

Numerické algoritmy

Page 39: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

f (x) = arcsinx + 2x + 1

Puleni Newton Tetivyx = -0.250000 -0.500000 -0.328170x = -0.375000 -0.334026 -0.331167x = -0.312500 -0.331209x = -0.343750x = -0.328125x = -0.335938x = -0.332031x = -0.330078x = -0.331055

f (x) = 0 má 1 koren:x1 ∈< −0.5,0 >

Numerické algoritmy

Page 40: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Výpocet urcitého integrálu

∫ b

af (x)dx

Funkce f (x) je na intervalu < a,b > spojitá.Princip numerického výpoctu:

interval < a,b > rozdelíme na intervaly délky h.presnou plochu nahradíme plochou obdélníka,lichobežníka ,...plochy vypocteme a secteme

Numerické algoritmy

Page 41: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Metody

obdélníková metoda∫ b

af (x) dx ' h · (f (a) + f (a + h) + · · ·+ f (a + ih) · · ·+ f (b))

hn∑

i=0

f (a + ih)

lichobežníková metoda∫ b

af (x) dx ' h·(1

2f (a)+f (a+h)+· · ·+f (a+ih) · · ·+f (b−h)+

12

f (b))

h

(f (a) + f (b)

2+

n−1∑i=1

f (a + ih)

)Simpsonova metoda∫ b

af (x) dx ' h

3·(f (a)+4f (a+h)+2f (a+2h)+· · ·+4f (b−h)+f (b))

Numerické algoritmy

Page 42: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Realizace souctu

float s_obd (float a, float b, int n

, float (∗ f)(float)

)/∗scitani funkcnich hodnot obdelnikovou metodou∗/{float s, x, h;h=fabs(b-a)/n;s=0; x=a;

while(x<b){s=s+f(x);x=x+h;}return h∗s;}

float s_lich (float a, float b, int n, float (∗ f)(float)

)

/∗scitani funkcnich hodnot lichobeznikovou metodou∗/{float s, x, h;h=fabs(b-a)/n;s=(f(a)+f(b))/2; x=a+h;

while(x<b){s=s+f(x);x=x+h;}return h∗s;}

Numerické algoritmy

Page 43: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Realizace souctu

float s_obd (float a, float b, int n, float (∗ f)(float))/∗scitani funkcnich hodnot obdelnikovou metodou∗/{float s, x, h;h=fabs(b-a)/n;s=0; x=a;

while(x<b){s=s+f(x);x=x+h;}return h∗s;}

float s_lich (float a, float b, int n, float (∗ f)(float)

)

/∗scitani funkcnich hodnot lichobeznikovou metodou∗/{float s, x, h;h=fabs(b-a)/n;s=(f(a)+f(b))/2; x=a+h;

while(x<b){s=s+f(x);x=x+h;}return h∗s;}

Numerické algoritmy

Page 44: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Realizace souctu

float s_obd (float a, float b, int n, float (∗ f)(float))/∗scitani funkcnich hodnot obdelnikovou metodou∗/{float s, x, h;h=fabs(b-a)/n;s=0; x=a;

while(x<b){s=s+f(x);x=x+h;}return h∗s;}float s_lich (float a, float b, int n

, float (∗ f)(float)

)/∗scitani funkcnich hodnot lichobeznikovou metodou∗/{float s, x, h;h=fabs(b-a)/n;s=(f(a)+f(b))/2; x=a+h;

while(x<b){s=s+f(x);x=x+h;}return h∗s;}

Numerické algoritmy

Page 45: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Realizace souctu

float s_obd (float a, float b, int n, float (∗ f)(float))/∗scitani funkcnich hodnot obdelnikovou metodou∗/{float s, x, h;h=fabs(b-a)/n;s=0; x=a;

while(x<b){s=s+f(x);x=x+h;}return h∗s;}float s_lich (float a, float b, int n, float (∗ f)(float))/∗scitani funkcnich hodnot lichobeznikovou metodou∗/{float s, x, h;h=fabs(b-a)/n;s=(f(a)+f(b))/2; x=a+h;

while(x<b){s=s+f(x);x=x+h;}return h∗s;}

Numerické algoritmy

Page 46: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Kolik vnitrních bodu?

Jedna z možností:volím n=10pocítám s_n a s_2ndokud |s2n − sn| > ε "zpresnuji", tj. zvetšujeme n

Numerické algoritmy

Page 47: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Integrace

float integral_obd(float a, float b, float eps, float(*f)(float)){ float s1,s2;

int n=10;s1 = s_obd(a,b,n,f);n=2*n;s2 = s_obd(a,b,n,f);while(fabs(s2-s1)>eps){s1=s2; n=2*n; s2 = s_obd(a,b,n,f);}return s2; }

Numerické algoritmy

Page 48: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Struktura programu v C

#include<stdio.h>#include<math.h>float f (float x) { return log(2+sin(x)); }float s_obd ( . . . ) { . . . }float integral (. . . ) { . . . }main (){float s;s= integral(0, M_PI, 0.001, f);printf("integral : %f", s);}

Numerické algoritmy

Page 49: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

PRÍKLAD

Dány funkce f1(x) = 2x + 1, f2(x) = x5, f3(x) = 1−x3 .

Urcit plochu omezenou temito 3 funkcemi.

Numerické algoritmy

Page 50: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Postup rešení

obrázekurcíme prusecíky x12, x13, x23 jako rešení nelineárníchrovnic

f1(x)− f2(x) = 0, f1(x)− f3(x) = 0, f2(x)− f3(x) = 0

plochu P urcíme pomocí výpoctu urcitých integrálu

P =

∫ x12

x13

f1(x) dx −∫ x23

x13

f3(x) dx −∫ x12

x23

f2(x) dx

Numerické algoritmy

Page 51: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Realizace

definujeme funkcefloat f1(float x){return pow(2,x)+1;}float f2(float x){return pow(x,5);}float f3(float x){return (1-x)/3;}float f12(float x){return pow(2,x)+1 -pow(x,5);}

float f13(float x){return pow(2,x)+1 - (1-x)/3;}

float f23(float x){return pow(x,5) - (1-x)/3;}

odhadneme intervaly, ve kterých se funkce protínajíx13 ∈< −3,−2 >, x23 ∈< 0,1 >, x12 ∈< 1,2 >

urcíme prusecíky a plochutetivy(&x13,-3,-2,0.0001,f13);tetivy(&x23,0,1,0.0001,f23);tetivy(&x12,1,2,0.0001,f12);P1 = integral_simp(x13, x12, 0.001, f1);P2 = integral_simp(x13, x23, 0.001,f3);P3 = integral_simp(x23,x12,0.001,f2);printf("plocha = %f\n",P1-P2-P3);

Numerické algoritmy

Page 52: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Struktura programu#include<stdio.h>

#include<math.h>float f1(float x){return pow(2,x)+1;}float f2(float x){return pow(x,5);}float f3(float x){return (1-x)/3;}float f12(float x){return pow(2,x)+1 -pow(x,5);}

float f13(float x){return pow(2,x)+1 - (1-x)/3;}

float f23(float x){return pow(x,5) - (1-x)/3;}

int tetivy(float * x, float a, float b, float eps, float(*f)(float)){. . . }float soucet_simp(. . . ){ . . . }float integral_simp(. . . ){ . . . }main() {

float x12,x13,x23,P1,P2,P3;tetivy(&x13,-3,-2,0.0001,f13);tetivy(&x23,0,1,0.0001,f23);tetivy(&x12,1,2,0.0001,f12);P1 = integral_simp(x13, x12, 0.001, f1);P2 = integral_simp(x13, x23, 0.001,f3);P3 = integral_simp(x23,x12,0.001,f2);printf("plocha = %f\n",P1-P2-P3); }

Numerické algoritmy

Page 53: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Výsledky

x12 = 1.2793x13 = −2.5223x23 = 0.6505P = 4.29

Numerické algoritmy

Page 54: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Cauchyova úloha pro obycejnou diferenciální rovnici

y ′ = f (x , y), y(x0) = y0

Víme, že v intervalu existuje jediné rešení ...Volíme krok h = . . .Napocítáme hodnoty hledané funkce

yi+1 = yi + h · f (xi , yi), xi = x0 + i · h

Uvedený postup: Eulerova metoda. Existují jiné.

Numerické algoritmy

Page 55: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Realizace

Urcit hodnoty funkce znamená urcit pole hodnot.float * euler (float x0, float y0, float h, int pocet, float (*f)(float, float)){ int i;

float * vysledek;vysledek = (float *) malloc((pocet+1) * sizeof(float));

vysledek[0]=y0;for(i = 1; i<= pocet; i++){ y[i]=y[i-1] = h* f(x0,y[i-1]); x0 = x0+h; }return vysledek;}

Numerické algoritmy

Page 56: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Jak uvidíme výsledek

Hodnoty x,y mužeme zapsat do souboru a ... napr. zobrazit.Presnost Eulerovy metody : O(h).Jak volit h ?

pocítáme s kroky h a 0.5h,urcíme normu rozdílu napocítaných hodnot ve stejnýchx–ových bodech

Pozor na nespojitost rešení!

Numerické algoritmy

Page 57: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Rešení diferenciální rovnice v MATLABu

Obycejná diferenciální rovnice 1. rádu,

y ′ +yx=

1x + 3

, y(−2) = 4

nebodydx

=3x2

2y, y(0) = 1

Lineární diferenciální rovnice 2. rádu s konstantnímikoeficienty,

y ′′ − 9y = 5e2t , y(0) = 0, y ′(0) = 3

Lineární diferenciální rovnice 2. rádu s promennýmikoeficienty,

y ′′ + xy =1

2− x, y(0) = 0.25, y ′(0) = 0

Lineární soustavy,

X =

(1 14 −2

)X , X

(05

)Nelineární autonomní spustavy,

x = yy = −(1

9 − x2)x

Numerické algoritmy

Page 58: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Rešení v symbolických promenných : funkce dsolve

Rovnici upravíme na tvar : y ′ = f (x , y).dsolve(’Dy = 1/(x+3)-y/x’,’y(-2)=4’,’x’)dsolve(’Dy = 3*xˆ2/(2*y)’,’y(0)=1’,’x’)dsolve(’D2y = 5*exp(2*t)+9*y’,’y(0)=0, Dy(0)=3’,’x’)dsolve(’D2y = 1/(2-x)-x*y’, ’y(0)=0.25, Dy(0)=0’, ’x’)dsolve(’Dy = x+y, Dy = 4*x -2y’, ’x(0)=0, y(0)=5’, ’t’)dsolve()Ne vždy je rešení nalezeno ...

Numerické algoritmy

Page 59: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Rešení pomocí numerických metod ode.. MATLABu

Je nutné vytvorit .m – funkci pro f(x,y):Pro rovnici 1. rádu:function v = f1(x,y)v = 1/(x+3) - y/x% funkce vrací jednu hodnotufunction v = f2(x,y)v = 3*xˆ2/(2*y)

Numerické algoritmy

Page 60: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Pro rovnici 2. a vyššího rádu:

function V = f(x,Y)% predpokládáme, že Y je vektor hodnot y1 . . . yn% n je rád rovnice (nejvyšší derivace)% funkce vrací vektor – sloupec y –vých hodnot, urcenýchpodle následujícího :% V(1) = Y(2), (V(i) = Y(i+i), i = 1 . . . n-1)% V(n) = pravá strana rešené rovnice, v oznaceních :% Y(1) odpovídá y, Y(2) odpovídá y ′ . . .% funkce musí vracet vektor – sloupec (požadavek ode) Tedypro príklad 3:function V = f3(x, Y)V(1) = Y(2)V(2) = 5*exp(2*x) + 9*Y(1)V = V’ % vektor sloupec!

Numerické algoritmy

Page 61: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Pro soustavu diferenciálních rovnic 1. rádu

(príklady 4,5) vytvoríme funkci, která vrací vektor hodnot,jednotlivé prvky vektoru odpovídají pravým stranám.Pro vektor X = (x(t), y(t))T použijeme oznacení Y.Pro príklad 4:(

xy

)=

(1 14 −2

)(xy

),⇒

(xy

)=

(1x + 1y

4x + (−2y)

)function V = f4(x, Y)V(1) = Y(1)+Y(2)V(2) = 4*Y(1) - 2*Y(2)V = V’ % vektor sloupec!Pro príklad 5:function V = f5(x, Y)V(1) = Y(2)V(2) = -(1/9-xˆ2)*xV = V’ % vektor sloupec!

Numerické algoritmy

Page 62: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Použití funkce ode45:

první parametr : odkaz na funkci,druhý parametr : [pocátecní_hodnota_x poslední_hodnota_x ]tretí parametr: [hodnota_y_x0 (prípadne pocátecní hodnotyderivací)]Pr. 1: [x1, y1] = ode45(@f1, [-2 -0.1], 4)Pr. 2: [x2, y2] = ode45(@f2, [0 3], 1)Pr. 3: [x3, y3] = ode45(@f3, [0 2], [0.25 0])Pr. 4: [x4, y4] = ode45(@f4, [0 2], [0.25 0])Pr. 3: [x5, y5] = ode45(@f5, [0 2], [0.25 0])Zobrazení rešení:plot(x1, y1)plot(x2, y2)plot(x3, y3(:,1))plot(x1, y4(:,1))plot(x1, y5(:,1))y3, y4, y5 jsou matice: 1. sloupec – hodnoty funkce, 2. sloupec– hodnoty derivace

Numerické algoritmy

Page 63: Numerické algoritmy - Základy algoritmizace a …majlingova.euweb.cz/zapg/ZAPG_11_Nov09.pdfNumerické algoritmy Numerické ˇrešení nelineární rovnice Metoda pulení˚ intervalu

Rešení Eulerovou metodou

napíšeme .m funkci euler, vhodnou pro jednu i více rovnic:function [X V] = euler(f, x, Y, h, N) % první parametr : funkce% druhy: pocátecní hodnota x% treti: (vektor – rádek) pocátecních hodnot Y% ctvrtý : velikost kroku h% pátý: pocet kroku, který chceme provéstX(1) = x;[m n] = size(Y)V(1) = Y;for i=2:NV(i+1) = V(i) + h*f(X(i-1), Y(i-1))X(i) = X(i-1)+h;endV = V’;

Numerické algoritmy