Digitální učební materiál

Podobné dokumenty
Digitální učební materiál

Digitální učební materiál

Digitální učební materiál

Digitální učební materiál

Digitální učební materiál

Digitální učební materiál

Digitální učební materiál

Digitální učební materiál

Digitální učební materiál

Digitální učební materiál

Digitální učební materiál

Digitální učební materiál

Aplikovaná numerická matematika - ANM

Digitální učební materiál

Připomenutí co je to soustava lineárních rovnic

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Sada 1 - Základy programování

Co je obsahem numerických metod?

Dnešní látka Opakování: normy vektorů a matic, podmíněnost matic Jacobiova iterační metoda Gaussova-Seidelova iterační metoda

0 0 a 2,n. JACOBIOVA ITERAČNÍ METODA. Ax = b (D + L + U)x = b Dx = (L + U)x + b x = D 1 (L + U)x + D 1 b. (i) + T J

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

Přijímací zkouška z informatiky Dz

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

stránkách přednášejícího.

Princip řešení soustavy rovnic

Sada 1 - Základy programování

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Paralelní LU rozklad

Numerické metody a programování

Sada 1 - Základy programování

VYBRANÉ PARTIE Z NUMERICKÉ MATEMATIKY

Numerické metody a programování. Lekce 4

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Soustavy lineárních rovnic-numerické řešení. October 2, 2008

Programovací jazyk Pascal

Soustavy lineárních rovnic

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

Digitální učební materiál

Soustavy lineárních rovnic-numerické řešení

SOUSTAVY LINEÁRNÍCH ALGEBRAICKÝCH ROVNIC

DRN: Soustavy linárních rovnic numericky, norma

INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ. Modernizace studijního programu Matematika na PřF Univerzity Palackého v Olomouci CZ.1.07/2.2.00/28.

Iterační metody řešení soustav lineárních rovnic. 27. prosince 2011

Globální matice konstrukce

Numerická matematika 1

Úvod do programování

SOUSTAVY LINEÁRNÍCH ROVNIC

1 0 0 u 22 u 23 l 31. l u11

Závěrečná zkouška z informatiky 2011

Anotace. Soubory a práce s nimi, rekurze podruhé, struktury (datový typ record), Martin Pergel,

FP - SEMINÁŘ Z NUMERICKÉ MATEMATIKY. Katedra matematiky a didaktiky matematiky Technická univerzita v Liberci

Soustavy nelineárních rovnic pomocí systému Maple. Newtonova metoda.

Aproximace funkcí. x je systém m 1 jednoduchých, LN a dostatečně hladkých funkcí. x c m. g 1. g m. a 1. x a 2. x 2 a k. x k b 1. x b 2.

Vector datový kontejner v C++.

4. Trojúhelníkový rozklad p. 1/20

Podprogramy; procedury a funkce

Matematika I. dvouletý volitelný předmět

Sada 1 - Základy programování

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

Iterační výpočty Projekt č. 2

a vlastních vektorů Příklad: Stanovte taková čísla λ, pro která má homogenní soustava Av = λv nenulové (A λ i I) v = 0.

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Tematická oblast: Rovnice (VY_32_INOVACE_05_1)

NPRG030 Programování I, 2018/19 1 / :25:37

Jazyk C++, některá rozšíření oproti C

Základy algoritmizace a programování

Soustavy linea rnı ch rovnic

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

0.1 Úvod do lineární algebry

AVDAT Nelineární regresní model

Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková. Výukový materiál

VÝUKOVÝ MATERIÁL PRO ŽÁKY

Několik příkladů v Turbo Pascalu

Anotace. Jednotky (tvorba a využití), struktury (typ record),

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;

Matematika B101MA1, B101MA2

12. Automatické vyhodnocení derivací. jaro 2012

Šablony, kontejnery a iterátory

13. Lineární programování

1 Determinanty a inverzní matice

Lineární algebra. Soustavy lineárních rovnic

Vzdělávací materiál. vytvořený v projektu OP VK CZ.1.07/1.5.00/ Anotace. Integrální počet. Substituce v určitém integrálu VY_32_INOVACE_M0311

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

Klasický podprogram, který nazýváme procedura. Jedná se v podstatě o příkaz. 1

1 Zobrazení 1 ZOBRAZENÍ 1. Zobrazení a algebraické struktury. (a) Ukažte, že zobrazení f : x

Soustavy lineárních rovnic

Pracovní listy - programování (algoritmy v jazyce Visual Basic) Algoritmus

1 Mnohočleny a algebraické rovnice

2.6. VLASTNÍ ČÍSLA A VEKTORY MATIC

Matice. Předpokládejme, že A = (a ij ) je matice typu m n: diagonálou jsou rovny nule.

Standardní algoritmy v C++.

Cvičení 5 - Inverzní matice

Četba: Texty o lineární algebře (odkazy na webových stránkách přednášejícího).

MO-ME-N-T MOderní MEtody s Novými Technologiemi

Projekt OPVK - CZ.1.07/1.1.00/ Matematika pro všechny. Univerzita Palackého v Olomouci

Vektorové podprostory, lineární nezávislost, báze, dimenze a souřadnice

Transkript:

Digitální učební materiál Číslo projektu: CZ.1.07/1.5.00/34.0548 Název školy: Gymnázium, Trutnov, Jiráskovo náměstí 325 Název materiálu: VY_32_INOVACE_156_IVT Autor: Ing. Pavel Bezděk Tematický okruh: Algoritmy Datum tvorby: Září 2013 Ročník: 4. ročník a oktáva Anotace: Algoritmus XVI. Algoritmus řešení soustav lineárních rovnic II. Jacobiho metoda Metodický pokyn: Při výuce nutno postupovat individuálně. Části DUM Pro hloubavé, jsou určeny pro zájemce o studium na technických a matematicko-fyzikálních oborech vysokých škol. Pokud není uvedeno jinak, je použitý materiál z vlastních zdrojů autora DUM.

Autor Ing. Pavel Bezděk Vytvořeno dne 9. 9. 2013 Odpilotováno dne 31. 3. 2014 ve třídě 8.Y Vzdělávací oblast Vzdělávací obor Tematický okruh Téma Klíčová slova Informatika a informační a komunikační technologie Informatika a výpočetní technika Algoritmus Algoritmus XVI. Algoritmus řešení soustavy lineárních rovnic II. Jacobiho metoda Algoritmus, Jacobiho metoda, aproximace Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Pavel Bezděk. Dostupné z Metodického portálu www.rvp.cz ; ISSN 1802-4785. Provozuje Národní ústav pro vzdělávání, školské poradenské zařízení a zařízení pro další vzdělávání pedagogických pracovníků (NÚV).

Řešení soustavy lineárních rovnic Jacobiho metoda

Co dělat, když počítač lineární soustavu rovnic není schopen vyřešit v reálném čase! Řešíme-li soustavy lineárních rovnic na počítači a používáme Gaussovu eliminaci, pak se vzrůstajícím počtem rovnic a neznámých, rostou časy výpočtu a při určitých počtech neznámých (asi 20) a rovnic jsou časy výpočtu již nereálné. V takových případech používáme metody, jejichž výpočty jsou podstatně rychlejší (probíhají v reálných časech). Řeší tyto soustavy rovnic metodami postupného přibližování se k přesnému řešení. Vytváříme tak posloupnost aproximací (přibližných řešení), jejíž limitou je přesné řešení x i dané soustavy rovnic.

Budeme řešit soustavu rovnic: 11x + 2y + z = 15 x + 10y + 2z = 16 2x + 3y - 8z = 1 Pro jednoduchost si vzali jen 3 rovnice o 3 neznámých a ukážeme si na nich princip řešení n - rovnic o n - neznámých, kde např. n>20, které již nelze řešit Gaussovou eliminací.

Postupné přibližování se, k stále přesnějšímu řešení x = (15-2y-z)/11 Nejprve zvolíme hodnotu nulové aproximace rovnou 0. y = (16-x-2z)/10 x (0) = 0; y (0) = 0 ; z (0) = 0 z = (-1+2x+3y)/8 První aproximaci již vypočteme z nulové aproximace. Z hodnot aproximace x (0), y (0), z (0), vypočítáváme následující hodnoty aproximací x (1), y (1), z (1). Z hodnot aproximace x (1), y (1), z (1), vypočítáváme následující hodnoty aproximací x (2), y (2), z (2), atd. x (0) = 0 x (1) = (15-2y (0) - z (0) )/11 x (2) = (15-2y (1) - z (1) )/11 y (0) = 0 y (1) = (16 - x (0) - 2z (0) )/10 y (2) = (16 - x (1) - 2z (1) )/10 z (0) = 0 z (1) = (-1 + 2x (0) + 3y (0) )/8 z (2) = (-1 + 2x (1) + 3y (1) )/8 x (3) = (15-2y (2) - z (2) )/11 x (4) = (15-2y (3) - z (3) )/11 y (3) = (16 - x (2) - 2z (2) )/10 y (4) = (16 - x (3) - 2z (3) )/10 z (3) = (-1 + 2x (2) + 3y (2) )/8 z (4) = (-1 + 2x (3) + 3y (3) )/8

Když vezmeme obecný zápis soustavy 3 rovnic a 11 *x 1 + a 12 *x 2 + a 13 *x 3 =b 1 a 21 *x 1 + a 22 *x 2 + a 23 *x 3 =b 2 a 31 *x 1 + a 32 *x 2 + a 33 *x 3 =b 3 Dostaneme pro výpočet aproximací: x 1 (k+1) = (b 1 - a 12 x 2 (k) - a 13 x 3 (k) )/a 11 x 2 (k+1) = (b 2 - a 21 x 1 (k) - a 23 x 3 (k) )/a 22 x 3 (k+1) = (b 3 - a 31 x 1 (k) - a 32 x 2 (k) )/a 33

Pro n - rovnic o n - neznámých a 11 *x 1 + a 12 *x 2 + a 13 *x 3.. a 1n* x n = b 1 a 21 *x 1 + a 22 *x 2 + a 23 *x 3.. a 2n* x n = b 2 a 31 *x 1 + a 32 *x 2 + a 33 *x 3.. a 3n* x n = b 3.. a n1 *x 1 + a n2 *x 2 + a n3 *x 3.. a nn* x n = b n (k+1) aproximace i- té proměnné: x (0) = (0, 0, 0, 0,. 0) pro i = 1, 2, 3, 4,. n

Jednoduchá varianta programu na Jacobiho metodu - Pascal Program Jacobi; uses crt; const N=20; var a11,a12,a13,a21,a22,a23,a31,a32,a33,b1,b2,b3,x,y,z,x2,y2,z2:real; i:integer; begin read(a11, a12, a13, b1, a21, a22, a23, b2, a31, a32, a33, b3); x:=0.0; y:=0.0; z:=0.0; for i:=1 to N do begin x2:=(-a12*y-a13*z+b1)/a11; y2:=(-a21*x-a23*z+b2)/a22; z2:=(-a31*x-a32*y+b3)/a33; x:=x2; y:=y2; z:=z2; writeln; write(x:4:5,' '); write(y:4:5,' '); write(z:4:5,' '); delay(500); end; writeln; writeln; repeat until keypressed; end.

Jednoduchá varianta programu na Jacobiho metodu, již lépe provedená - Pascal Program Jacobi; uses crt; const N=50; var a: array[1..3,1..3] of real; b: array[1..3] of real; x: array[1..3] of real; xx: array[1..3] of real; i,j,k,l,m,p:integer; begin clrscr; writeln('reseni 3 linearnich rovnic o 3 neznamych:'); for i:=1 to 3 do for j:=1 to 3 do begin write('zadej a[',i,j,']:');readln(a[i,j]); end; for i:=1 to 3 do begin write('zadej b[',i,']:');readln(b[i]); end ; for i:=1 to 3 do x[i]:=0; { Chceme-li sami navolit pocet iteraci, zrusime konstantu, deklarujte promenou N. write ('Zadej kolik iteraci chces provest:'); readln(n);

for i:=1 to N do begin for k:=1 to 3 do begin xx[k]:=0; for m:=1 to 3 do if k<>m then xx[k]:= xx[k]+(-a[k,m]*x[m]); xx[k]:= (xx[k]+b[k])/a[k,k]; end; for p:=1 to 3 do x[p]:=xx[p]; writeln; for l:=1 to 3 do write(' ',x[l]:4:5); writeln; end; writeln; writeln; repeat until keypressed; end.

Pro hloubavé Jacobiho metoda pro m lin.rovnic o n neznámých - Pascal Program Jacobi; uses crt; const MaxRadku=30; const MaxSloupcu=30; var a: array[1..maxradku,1..maxsloupcu] of real; b: array[1..maxradku] of real; x: array[1..maxsloupcu] of real; xx: array[1..maxsloupcu] of real; i,j,k,l,q,p,m,n,pocetiteraci:integer; begin clrscr; writeln('reseni M linearnich rovnic o N neznamych:'); write('zadej pocet lin. rovnic:'); Readln(M); write('zadej pocet neznamych:'); Readln(N); for i:=1 to M do for j:=1 to N do begin write('zadej a[',i,j,']:');readln(a[i,j]); end; for i:=1 to M do begin write('zadej b[',i,']:');readln(b[i]); end ;

for i:=1 to N do x[i]:=0; writeln; write('zadej pocet iteraci, ktere se maji provest pri vypoctu:');readln(pocetiteraci); for i:=1 to PocetIteraci do begin for k:=1 to N do begin xx[k]:=0; for q:=1 to N do if k<>q then xx[k]:= xx[k]+(-a[k,q]*x[q]); xx[k]:= (xx[k]+b[k])/a[k,k]; end; for p:=1 to N do x[p]:=xx[p]; writeln; for l:=1 to N do write(' ',x[l]:4:5); writeln; end; writeln; writeln; repeat until keypressed; end.

// Jacobiho metoda #include <iostream> #include <math.h> #include <conio.h> #define N 10 using namespace std; double a[n][n]; double b[n]; double x[n]; double xold[n]; double delta,aii; double eps=0.0001; int i,j,k,n; int main() //pripustna chyba //matice soustavy //vektor pravych stran //reseni rovnice //predchozi priblizeni { cti:cout << " Zadejte dimenzi soustavy - pocet rovnic ( do 10):\n"; //nacteni vstupu cin >> n; if (n>n) {cout << " Pozor, n nesmi byt vetsi nez N! N=10 Znovu zadavej!\n "; goto cti; cout << "Zadejte matici po radcich (leve strany):\n"; for(i=0;i<n;i++) for(j=0;j<n;j++) cin >> a[i][j]; Jacobiho metoda C++ Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Pavel Bezděk. Dostupné z Metodického portálu www.rvp.cz ; ISSN 1802-4785. Provozuje Národní ústav pro vzdělávání, školské poradenské zařízení a zařízení pro další vzdělávání pedagogických pracovníků (NÚV).

cout << "Zadejte prave strany rovnic:\n"; for(i=0;i<n;i++) { cin >> b[i]; // uprava cout << "uprava\n"; for(i=0;i<n;i++) { aii=a[i][i]; b[i]=b[i]/aii; for(j=0;j<n;j++) { a[i][j]=a[i][j]/aii ; x[i]=b[i]; xold[i]=b[i]; Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Pavel Bezděk. Dostupné z Metodického portálu www.rvp.cz ; ISSN 1802-4785. Provozuje Národní ústav pro vzdělávání, školské poradenské zařízení a zařízení pro další vzdělávání pedagogických pracovníků (NÚV).

// iteracni postup cout << "iteracni postup\n"; do { delta=0; for(i=0;i<n;i++) // tisk vysledku for(i=0;i<n;i++) { x[i]=b[i]; for(j=0;j<n;j++) { if (i!=j) { x[i]=x[i]-a[i][j]*xold[j]; for(i=0;i<n;i++) while (delta > eps); if (delta < fabs(x[i]-xold[i])) delta=fabs(x[i]-xold[i]); xold[i]=x[i]; cout << "x" <<i <<"=" << x[i] << endl; getch(); return 0; cout << "x" <<i <<"=" << x[i] << endl; Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Pavel Bezděk. Dostupné z Metodického portálu www.rvp.cz ; ISSN 1802-4785. Provozuje Národní ústav pro vzdělávání, školské poradenské zařízení a zařízení pro další vzdělávání pedagogických pracovníků (NÚV).

// Metoda Jacobi //#include "stdafx.h" #include <iostream> #include <math.h> #include <conio.h> using namespace std; #define max 10 //const int max=10; int main() { double s, s1, eps; double a[max + 1][max + 1], b[max + 1], x[max + 1], y[max + 1]; int n, i, j; cout << "Zadej pocet rovnic: " << endl; cin >> n; cout << " Nacti matici soustavy (leve strany ): " << endl; for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) cout << endl; { cout << "a[" << i << j << "]="; cin >> a[i][j]; Jacobiho metoda pro hloubavé C++ Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Pavel Bezděk. Dostupné z Metodického portálu www.rvp.cz ; ISSN 1802-4785. Provozuje Národní ústav pro vzdělávání, školské poradenské zařízení a zařízení pro další vzdělávání pedagogických pracovníků (NÚV).

cout << "Nacti prave strany rovnic: " << endl; for (i = 1; i <= n; i++) { cout << "b[" << i << "]="; cin >> b[i]; cout << endl; cout << "Pocatecni aproximace ( napr. x[1]=0): " << endl; for (i = 1; i <= n; i++) { cout << "x[" << i << "]="; cin >> y[i]; cout << endl; cout << " Velikost chyby (např. 0.0001): " << endl; cin >> eps; cout << endl; s = eps + 1; while (s >= eps) { for (i = 1; i <= n; i++) { s1 = 0; for (j = 1; j <= n; j++) if (j!= i)s1 = s1 + a[i][j] * y[j]; x[i] = (b[i] - s1) / a[i][i]; s = 0; for (i = 1; i <= n; i++) s = s + fabs(x[i] - y[i]); for (i = 1; i <= n; i++) y[i] = x[i]; Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Pavel Bezděk. Dostupné z Metodického portálu www.rvp.cz ; ISSN 1802-4785. Provozuje Národní ústav pro vzdělávání, školské poradenské zařízení a zařízení pro další vzdělávání pedagogických pracovníků (NÚV).

cout << "Přibližná řešení " << endl; for (i = 1; i <= n; i++) cout << x[i] << endl; return 0; Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Pavel Bezděk. Dostupné z Metodického portálu www.rvp.cz ; ISSN 1802-4785. Provozuje Národní ústav pro vzdělávání, školské poradenské zařízení a zařízení pro další vzdělávání pedagogických pracovníků (NÚV).

počet aproximací x y z (0) 0,00000 0,00000 0,00000 (1) 1,36364 1,60000-0,12500 (2) 1,00409 1,48864 0,81591 (3) 1,01800 1,32841 0,70426 (4) 1,05808 1,35727 0,62785 (5) 1,05978 1,36862 0,64850 (6) 1,05584 1,36432 0,65318 (7) 1,05620 1,36378 0,65058 (8) 1,05653 1,36426 0,65047 (9) 1,05646 1,36425 0,65073 (10) 1,05643 1,36421 0,65071 (11) 1,05644 1,36421 0,65069 (12) 1,05644 1,36422 0,65069 (13) 1,05644 1,36422 0,65069 (14) 1,05644 1,36422 0,65069 (15) 1,05644 1,36422 0,65069 Výpočet na počítači Přesné hodnoty řešení soustavy rovnic: x = 1,05644 y = 1,36422 z = 0,65069 Zjišťujeme, již při 4. aproximaci jsme blízko přesnému výsledku. Blížíme se stále více k přesnému řešení. Při 12. aproximaci se výpočet stabilizuje na přesném výsledku. Ne vždy, bude posloupnost aproximací řešení soustavy rovnic dobře konvertovat. Rozbor, pro kterou soustavu lineár. rovnic se nám nepodaří dojít k řešení, je však už záležitostí vyšší matematiky, proto se jím nebudeme zabývat. Pro vytvoření představy, jak se obecně řeší soustavy n rovnic o n neznámých, které nejsou řešitelné Gaussovou eliminací, nám to stačí.

Použité zdroje MÍKA, Stanislav. Numerické metody algebry. Vyd. 2. Praha: SNTL, 1985, 169 s. Matematika pro vysoké školy technické, sešit IV.