A jegyzetről

Ez egy személyes jegyzet, amely csak a könnyű hozzáférés érdekében érhető el publikusan. Mivel a jegyzet saját felhasználásra készül, sok helyen hiányos, hibás. Helyenként üres oldalakat tartalmaz.

Ha mégis ráleltél és hasznosnak találod, én örülök, de ne kizárólag ezt a forrást használd felkészüléshez, ne is idézd sehol!

A tartalom helyességéért, teljességéért tehát felelősséget nem vállalok!

Órarend

Hétfő Kedd Szerda
8:00 Számítógépes grafika Gy (1)
Déli Tömb 2-219
Szoftvertechnológia Ea (F)
Aszinkron online
Analízis II. Ea (F)
Déli Tömb 0-803 Szabó József eloadó
/
Számítógépes grafika Ea
9:00
10:00 Analízis II. Gy (F) (1)
Északi Tömb -1.62
A számításelmélet alapjai I. Ea
Déli Tömb 0-822 Mogyoródi József terem
A számításelmélet alapjai I. Gy (2)
Déli Tömb 00-115
11:00
12:00 Szoftvertechnológia Gy (F) (8)
Déli Tömb 00-411 (PC 7)
Adatbázisok I. Ea (2)
Déli Tömb 0-821 Bolyai János terem
13:00
14:00
15:00 Operációs rendszerek Gy (12)
Déli Tömb 2-108
16:00 Adatbázisok I. Gy (10)
Északi Tömb 7.15 (PC 11)
17:00 Operációs rendszerek Ea (91)
Déli Tömb 0-822 Mogyoródi József terem
18:00 Szoftver mély neuronhálók alkalmazásához Gy
Északi Tömb -1.75 Konferenciaterem
19:00

A számításelmélet alapjai I. előadás

Alapadatok

Idő: Kedd, 10:00 - 12:00
Helyszín: Déli Tömb 0-822 Mogyoródi József terem
Oktató: Tichler Krisztián, ktichler@inf.elte.hu
Csoport: 1

Értékelés

  • Írásbeli vizsga
    • max 60p (20p igaz-hamis, 20p rövid válasz, 20p hosszabb válasz)
    • min ?
  • Elővizsga: nem kötelező

Források

Alapfogalmak, nyelvek, grammatikák

Hol használják a formális nyelveket?

  • A természetes nyelvek gépi feldolgozása, matematikai modellezése.
  • Programozási nyelvek, fordítóprogramok
  • Kódelmélet
  • Mintafelismerés

Alapfogalmak, jelölések

  • Ábécé:* egy véges, nemürres halmaz.
  • Betűk: az ábécé elemei.
  • Szó, (string): Egy ábécé elemeiből képzett véges sorozat.
  • Egy szóban lévő betűk számát a szó hosszának nevezzük. ( = n)
  • : üres szó
  • jelöli a ábécé feletti szavak halmazát, beleértve az üres szót is.
  • \

A szavait hosszlexikografikus (shortlex) rendezés szerinti sorrendben soroljuk fel.

  • Résszó: az szó a szó résszava, ha
  • Valódi résszó: ha és
  • Prefix: ha
  • Suffix ha

Ezek valódiak, ha -tól és -tól küéönböznek.

  • Nyelv: egy egy részhalmaza.

  • Üres nyelv:

  • Véges nyelv: véges, ellenkező esetben végtelen nyelv

  • Prefix nyelv:

  • Suffox nyelv:

Példák:

  • (véges)
  • (végtelen)
  • (végtelen)

Műveletek szavakon

Konkatenáció

Legyen V egy ábécé továbbá legyenek és V feletti szavak. Ekkor az szót az és a konkatenáltjának nevezzük.

A konkatenáció mint művelet asszciatív, de általában nem kommutatív.

a konkatenáció műveletére zárt.

A konkatenáció egységelemes művelet, at egységelem az .

-edik hatvány: egy szó -szeres konkatanációja saját magával. ()

Formálisan:

Ekkor:

Tükörkép

Legyen egy ábécé feletti szó. Az szó -rel jelölt tükörképe (vagy megfordítottja) az a szó, amelyet úgy kapunk, hogy betűit az eredetihez képest fordított sorrendben konkatenáljuk. Vagyis i-edik betűje éppen -nak az . betűje .

Ha , akkor -t palindrom-nak nevezük.

Műveletek nyelveken

  • Halmazműveletek ()
    • Komplementer jelölése:
  • Konkatenáció:
    • asszociatív
    • nem kommutatív
  • -edik hatvány
  • Tükörkép:

Egy nyelv iteratív leárt

Az nyelv iteratív lezártja (kleene-lezártja):

AZ pozitív lezártja:

, ha és , ha .

Homomorfizmus

Legyen és két ábécé. A leképezést homomorfizmusnak nevezzük, ha teljesülnek a következő feltételek:

  • egyértelmű, azaz minden szóra pontosan egy szó létezik, amelyre teljesül.
  • , minden -ra.

h-homomorf képi

Legyen homomorfizmus. A homomorfizmus -mentes, ha bármely szóra. Legyen homomorfizmus. Az nyelv h-homomorf képén a nyelvet értjük.

Formális nyelvek megadása

  • Véges nyelvek esetén felsorolással
  • Formulával
  • Reguláris kifelyezéssel
  • Végtelen nyelvek esetén felsoroló algortimussal
  • Generatív grammatikákkal
    • A grammatikák szintetizáló eszközök, egyetlen szimbólumból egy szabályrendszer segítségével szavakat lehet felépíteni. Azon szavak halmaza, melyeket fel lehet építeni egy nyelvet határoz meg, tehát a grammatika szabályrendszere meghatároz egy nyelvet.
  • Matematikai gépek, automaták segítségével
    • Az automaták elemző, analitikus eszközök. Az automaták bemenete egy szó, kimenete egy bináris érték. Az automata szabályrendszere szerint feldolgozza a szavakat, csak bizonyos szavak esetén ad igen választ, ezen szavak egy nyelvet alkotnak, melyet az automata szabályrendszere határoz meg.

Figyelem! Nem feltétlen lehet minden eszközzel minden nyelvet megadni. Be fogjuk látni például, hogy reguláris kifejezéssel kevesebb nyelvet lehet leírni mint egy általános grammatikával, de az se elég az összes {0, 1} ábécé feletti nyelv leírásához.

Nyelvcsalások

Ha egy halmaz, jelölje az halmaz hatványhalmazát, azaz

Nyelvcsalád alatt nyelveknek egy halmazát értjük.

Grammatikák

Egy rendezett négyest grammatikának nevezünk, ha

  • és diszjunkt véges ábácék. elemeit nemterminális, elemeit pedig terminális szimbólumnak nevezzük.
  • a grammatika kezdőszimbóluma
  • rendezett párok véges halmaza, ahol és legalább egy nemterminális szimbólumot tartalmaz

A halmaz elemeit szabályoknak (vagy átírási szabályoknak vagy produkcióknak) hívjuk.

A gyakorlatban az jelölés helyett szinte mindig az jelölést használjuk.

Egylépéses levezetés

Legyen egy generatív grammatika és legyen . A szó közvetlenül vagy egy lépésben levezethető az szóból -ben, jelölése: , ha és
, ahol és .

Többlépéses levezetés

Legyen egy generatív grammatika és legyen . A szó (több lépésben) levezethető, ha vagy van olyan és , hogy és
Jelölés:

Reláció reflexív, tranzitív lezártja

Generált nyelv

Legyen egy tetszőleges generatív grammatika. A grammatika által generált nyelv alatt az szavakból álló halmazt értjük.

Vegyük észre, hogy a generált nyelv szavai mindig terminális szavak!

Források

Grammatikák csoportosítása

Grammatikák - ismétlés

Egy rendezett négyest grammatikának nevezünk, ha

  • és diszjunkt véges ábácék. elemeit nemterminális, elemeit pedig terminális szimbólumnak nevezzük.
  • a grammatika kezdőszimbóluma
  • rendezett párok véges halmaza, ahol és legalább egy nemterminális szimbólumot tartalmaz

A halmaz elemeit szabályoknak (vagy átírási szabályoknak vagy produkcióknak) hívjuk.

A gyakorlatban az jelölés helyett szinte mindig az jelölést használjuk.

Legyen egy generatív grammatika és legyen . A szó közvetlenül vagy egy lépésben levezethető az szóból -ben, jelölése: , ha és
, ahol és .

Legyen egy generatív grammatika és legyen . A szó (több lépésben) levezethető, ha vagy van olyan és , hogy és
Jelölés:

Grammatikák Chomsky féle osztályozása

Legyen egy grammatika. A grammatika -típusú (), ha szabályhalmazára teljesülnek a következők:

  • eset: nincs korlátozás
  • eset:
    • minden szabálya alakú, ahol és
    • Egyetlen kivételt megengedünk: tartalmazhatja az szabályt, de csak abban az esetben, ha nem fordul elő egyetlen szabályának jobb oldalán sem. Korlátozott szabály (KES)
  • eset: minden szabálya alakú, ahol és
  • eset: minden szabálya vagy vagy alakú, ahol és

Jelölje az -típusú gramatikák osztályát.

Grammatikák osztályba sorolása

Legyen egy grammatika. A következő esetek lehetségesek:


Lokálisan minden szabály -as és teljesül a KES.


Lokálisan minden szabály -as den nem teljesül a KES.


Lokálisan minden szabály -as, van -as szabály és teljesül a KES.


Lokálisan minden szabály -es, van nem -as szabály de nem teljesül a KES.


Lokálisan minden szabály -es, van nem -es szanály és teljesül a KES.


Van nem -es szabálya vagy minden szabály -es, van nem -es szabálya és nem teljesül a KES.

jelöli az -típusú nyelvek nyelvosztályát, elemeit -típusú nyelveknek nevezzük.

  • A 0-típusú grammatikákat mondatszerkezetű (phrase-structure) grammatikáknak is nevezzük, ami nyelvészeti eredetükre utal.
  • A 1-típusú grammatikák a környezetfüggő (context-sensitive) grammatikák, mert szabályai olyanok, hogy, egy A nemterminális valamely előfordulása egy szóval csak és kontextus jelenlétében helyettesíthető.
  • 2-típusú grammatikákat környezetfüggetlen (context-free) grammatikáknak mondjuk, mert szabályai olyanok, hogy az nemterminális -vel való helyettesítése bármely kontextusban megengedett.
  • A 3-típusú grammatikákat reguláris (regular) vagy véges állapotú (finite state) grammatikáknak hívjuk, a véges állapotú automatákkal való kapcsolatuk miatt.
  • 0,1,2,3-típusú nyelvek osztályait rendre rekurzíven felsorolható, környezetfüggő, környezetfüggetlen, valamint reguláris nyelvosztálynak is mondjuk.

Grammatikák a gyakorlatban

  • BNF (Backus-Naur Form).

A BNF egy széles körben használt metanyelv melynek segítségével szabályok alkothatók meg (például egy programozási nyelv szintaktikai szabályai).

Építőkövei:

  • , fogalmak (nemdeterminánsok)
  • a szabályok bal- és jobboldalának elválasztása
  • a sztringek alkotóelemei (terminálisok)

Egy szabály bal- és jobboldalból áll, köztük ::=, baloldalon pontosan 1 fogalom, jobboldalon terminálisok és fogalmak véges sorozata állhat.

A BNF megfelel a környezetfüggetlen grammatikának.

Chomsky-féle hierarchia

A grammatikák alakja alapján és

Később azt is meg fogjuk mutatni, hogy a következö tétel fennáll:

Ekvivalens grammatikák és nyelvek

Amíg minden grammatika egyetlen nyelvet generál, ez fordítva nem igaz. Ugyanazt a nyelvet több különböz ̋o grammatika is generálhatja.

A és grammatikák ekvivalensek egymással, ha ugyanazt a nyelvet generálják, azaz teljesül.

Az és nyelveket egymással gyengén ekvivalensnek nevezzük, ha legfeljebb az tartalmazásában térnek el egymástól, azaz ha .

A és grammatikákat gyengén ekvivalensnek nevezzük, ha egymással gyengén ekvivalens nyelveket generálnak.

Terminánsok elimminációja a szabályok baloldalán

Minden grammatikához van vele ekvivalens és azonos típusú grammatika, melyre minden -re

Zártsági tulajdonságok

Az unió, konkatenáció és iteratív lezárás műveleteket reguláris műveleteknek nevezzük.

Egy nyelvcsalád zárt a -változós nyelvműveletekre nézve, ha minden esetén

zárt a reguláris műveletekre nézve ()

Források

Lineáris grammatikák, 3-típusú grammatikák normálformája, reguláriws kifelyezések

Lineáris grammatikák és nyelvek

Egy környezetfüggetlen grammatikát lineárisnak nevezünk, ha minden szabálya vagy

  1. vagy
  2. alakú, ahol és

A lineáris grammatikát bal-lineárisnak nevezzük, ha minden 2. alakú szabályban .

A lineáris grammatikát jobb-lineárisnak nevezünk, ha minden 2. alakú szabályban .

Bal és jobblineáris nyelvek

Egy nyelvet lineárisnak, bal-lineárisnak, illyetve jobb-lineárisnak mondunk, ha van olyan lineáris, bal-lineáris, illetve jobb-lineáris grammatika, amelyre teljesül.

Minden bal-lineáris grammatika reguláris (3-típusú) nyelvet generál.

L3 tükrözésre való zártsága

Minden jobb-lineáris grammatikához meg tudunk konstruálni egy bal-lineáris grammatikát, amely tükörképét generálja.

Következmény:

  1. zárt a tükrözés műveletére nézve.
  2. Minden reguláris nyelv generálható bal-lineáris grammatikával.

3-típusú grammatikák normálformája

Egy grammatika 3-as normálformájú, ha minden -beli szabály alakja

  • vagy
  • , ahol

Minden reguláris (azaz 3-típusú) nyelv generálható 3-as normálformájú grammatikával.

Reguláris kifelyezések

Vegyük észre, hogy minden véges nyelv reguláris. Tudjuk továbbá, hogy az nyelvosztály zárt az unió, a konkatenáció és az iteratív lezárt műveletekre nézve.

Következésképpen, kiindulva véges számú véges nyelvből és az előzőekben felsorolt reguláris műveleteket véges sokszor alkalmazva reguláris nyelvet kapunk.

Kérdés az, hogy vajon az eljárással minden reguláris nyelvet ekő tudunk-e állítani, azaz ez a módszer elégséges-e az nyelvosztály leírására?

Legyenek és diszjunkt ábécék. A ábécé feletti reguláris kifelyezéseket rekurzív módon következőképpen definiáljuk:

  • reguláris kifejezés felett
  • reguláris kifejezés felett
  • reguláris kifejezés felett, ha
  • Ha reguláris kifejezés felett, akkor is reguláris kifejezés felett
  • Ha és reguláris kifejezések felett, akkor is
  • Ha és reguláris kifejezések felett, akkor is

Minden egyes reguláris kifejezés egy-egy -rel jelölt reguláris nyelvet határoz meg, amelyeket az alábbi rekurzióval definiálunk:

  1. , ha reguláris kifejezés
  2. , ha reguláris kifejezések
  3. , ha reguláris kifejezések

A műveletek precedens sorrendje: , ennek és az asszociatív szabályok figyelembevételével bizonyos zárójelpárok elhagyhatók.

Leíró erő

Minden reguláris kifejezés reguláris nyelvet ír le, és megfordítva, minden reguláris nyelvhez megadható egy, ezen nyelvet leíró reguláris kifejezés.

Arden tétele

Ezt a tételt később a reguláris kifejezések véges automatákkal való kapcsolatának vizsgálatakor fogjuk használni.

Adottak az és reguláris kifejezések. A egyenletnek -re vonatkozó megoldása . Amennyiben , akkor az egyenletnek ez az egyetlen megoldása.

Források

Véges automaták

Formális nyelvek megadása nemcsak generatív eszközökkel, hanem felismerő eszközökkel is lehetséges. Ilyen eszközök az automaták, amelyek szavak feldolgozására és azonosítására alkalmasak.

Nyelvek megadására a grammatikák a szintetizáló, az automaták analitikus megközelítést alkalmaznak.

Az automaták egy szó feldolgozása után kétféle választ adhat, vagy elfogadja, vagy elutasítja a bemenetet.

  • Diszkrét időintervallumokban végrehajtott lépések sorozatán keresztül működik
  • A kezdőállípotból indul, az inputszó az inputszalagon helyezkedik el, az olvasófej őedig az inputszó legbaloldalibb szimbólumánál áll.
  • Az automata, miután elolvasott egy szimbólumot, az olvasófejet egy pozícióval jobbra mozgatja, majd állapotot vált az állapot-átmenet függvénye szerint.
  • Amennyiben az automata még nem olvasta végig a teljes inputot és elfogadó állapotba ér nem dönt még az elfogadásról/elutasításról, tovább m ̋uködik a szabályai szerint.
  • Ha az automata elolvasta az inputot, akkor megáll és aktuális állapota alapján válaszol, hogy felismeri vagy elutasítja a bemeneti szót.

Determinisztikus véges automata

Egy rendezett ötös, ahol

  • az állapotok véges, nemüres halmaza
  • az inputszimbólumok ábécéje
  • leképzés az ún. állapot-átmenet függvény
  • a kezdőállapot
  • az elfogadó állapotok halmaza

Az átmenetfüggvény kiterjesztése

Legyen egy determinisztikus véges automata.

A leképzés kiterjesztése az a teljes leképzés, amelyre

tehát az az állapota az automatának, ahova a állapotból indulva az szó feldolgozása után eljut.

Ha , akkor az inputot elfogadja , ha , akkor elutasítja.

elhagyjuk.

Nemdeterminisztikus véges automata

Determinisztikus véges automata:

  • A függvény mindenütt értelmezett és egyértékű. Azaz minden párra pontosan egy olyan s állapot létezik, amelyre fennáll.

Nemdeterminisztikus véges automata:

  • Megengedjük az állapot-átmenet függvény többértékűségét, azaz ekkor egy leképezés.
  • Több kezdoállapot is megengedett (azaz a kezdőállapotok halmazára ).
  • Úgy interpretálhatjuk, hogy a állapotból az betű olvasására a gép egy tetszoleges -beli új állapotba léphet, azaz adott inputra több működés lehetséges.
  • Mivel , ezért elofordulhat, hogy az valamely -ra, ilyenkor elakad a gép.
  • Akkor fogad el egy bemenetet, ha van legalább egy -beli állapotban termináló működése.

A nemdeterminisztikus véges automata egy rendezett ötös, ahol

  • az állapotok egy véges, nemüres halmaza
  • az inputszimbólumok ábécéje
  • leképzés, az állapot-átmenet függvény
  • a kezdőállapotok halmaza
  • az elfogadó állapotok halmaza.

A determinisztikus véges automata a nemdeterminisztikus véges automata egy speciális esetének tekinthető.

Szabály alapú alternatív megközelítés

Legyen egy nemdeterminisztikus véges automata-

Az átmenetek szabály alapon történő megadása:

Az -hoz tartozó szabályrendszerhez minden esetén adjunk hozzá a alakú átírási szabályt, azaz

Redukció

Egylépéses redukció

Láttuk, hogy az automata további műuködése mindig csak az aktuális, állapottól és a bemenet még hátralévo olvasatlan suffixétol függ. Ez motiválja a következőt.

Egy szót az NDVA egy konfigurációjának nevezzük.

Legyen egy véges automata és legyenek konfigurációk. Az automata az szót egy lépésben a szóra redukálja, ha van olyan szabály, és olyan szó, hogy és teljesül.

Többlépéses Redukció

Az véges automata az szót a szóra redukálja, ha vagy vagy valamelyik -rw léteznek konfigurációk, melyekre és

Elfogadott elv

Az nemdeterminisztikus véges automata által elfogadott nyelv alatt az nyelvet értjük.

Véges automaták és reguláris nyelvek

Minden nemdeterminisztikus véges automatához meg tudunk adni egy 3-tíípusú grammatikát, úgí hogy teljesül.

Minden 3-típusú grammatikához meg tudunk adni egy nemdeterminisztikus véges automatát úgy, hogy teljesül.

Véges automata determinizálása

Minden nemdeterminisztikus véges automatákhoz megkonstruálható egy determinisztikus véges automata úgy, hogy teljesül.

Tehát mind a determinisztikus véges automaták, mind a nemdeterminisztikus véges automaták reguláris (-beli) nyelveket leíró formális eszközök.

Források

Véges automata determinizálása, összefüggő automaták, algoritmikus eldöntési probléma

Véges automata determinizálása

Minden véges nemdeterminisztikus automatához megkonstruálható egy véges determinisztikus automata úgy, hogy teljesül.

L3 további zártsági tulajdonságia

zárt a komplementerre, a metszetre és a különbségre.

Tehát az alábbi formális eszközök mind az nyelvosztályt írják le egy adot ábécé felett:

  • jobblineáris grammatikák
  • ballineáris grammatikák
  • 3-as normálformájú grammatikák
  • reguláris kifelyezések
  • a komplementer, metszet, különbség, tükörkép, pozitív lezárt műveletekkel bővített úgynevezett általánosított kifejezések
  • véges determinisztikus automaták
  • véges nemdeterminisztikus automaták

Összefüggő automata

Legyen véges determinisztikus automata. A állapotot a kezdőállapotból elérhetőnek mondjuk, ha létezik redukció, ahol

Az véges determinisztikus automatát összefüggőnek mondjuk, ha minden állapota elérhető a kezdőállapotból.

elérhető a kezdőállapotból, akkor és csak akkor, ha van olyan , hogy

Algoritmikus problémák

Akkor beszélünk algoritmukis eldöntési problémáról, ha a bemenet egy olyan objektum, mely egy adott végtelen halmazból kerülhet ki, kimenete pedig igen/nem.

Olyan algoritmust keresünk, amely kellően általános ahhoz, hogy a végtelen lehetséges bemenet bármelyike esetén alkalmazható legyen.

Egy probléma eldönthető, ha létezik olyan minden lehetséges bemenet esetén termináló algoritmus, amelyik a helyes választ adja.

3as típusú grammatikák algoritmikus problémái

Eldönthető, hogy egy reguláris grammatika az üres nyelvet generálja-e.

Bizonyítás: A tanultak szerint a grammatikához megadható olyan A véges determinisztikus automata, amelyik a grammatika által generált nyelvet ismeri fel. Az automata pontosan akkor nem ismer fel egyetlen szót sem, ha kezdőállapotából minden végállapota elérhetetlen. Ez viszont algoritmikusan eldönthető.

Eldönthető, hogy két reguláris grammatika által generált nyelv diszjunkt-e.

Bizonyítás: Generálják a és reguláris grammatikák rendre az és nyelveket. Az nyelv szintén reguláris, így van olyan reguláris grammatika, amely -at generálja. Ekkor azonban akkor és csak akkor, ha , amely a fentiek szerint eldönthető.

Eldönthető, hogy két reguláris grammatika ugyanazt a nyelvet generálja-e vagy sem.

Bizonyítás: Generálják a és reguláris grammatikák rendre az és nyelveket. Az nyelv szintén reguláris, így van olyan reguláris grammatika, amely -at generálja. Ekkor azonban akkor és csak akkor, ha , amely a fentiek szerint eldönthető.

Eldönthető, hogy egy reguláris grammatika bővebb, vagy egyenlő nyelvet generál-e, mint egy másik.

Bizonyítás: Generálják a és reguláris grammatikák rendre az és nyelveket. Az szintén reguláris. Ennek üressége eldönthető, ami ekvivalens azzal, hogy

A 3-as típusú grammatikák szóproblémája hatékonyan eldönthető.

Szóprobléma: Adott grammatika és .

Bizonyítás: Legyen egy 3-as típusú grammatika normálformában adva és a levezetendő szó.

Az algoritmus rekurzívan kiszámol egy részhalmazból álló sorozatot. -ból (csak -től függő) konstans időben számolható.

Könnyen látható, hogy azon nemterminálosok halmaza, melyek pontosan leezetési lépés után a mondatforma végén állhatnak.

Tehát ha , akkot nyilván

Források

Maradéknyelv, myhill-nerode tétel, minimális-, redukált-, faktor automata,

Maradéknyelv

Nyelv adott szóra vonatkozó maradéknyelve

Az és automaták ekvivalensek, ha .

Adott nyelv -ra szóra vonatkozó maradéknyelve , ahol

tehát azokat a szavakat tartalmazza, amelyekkel -t jobbról kiegészítve -beli szót kapunk.

Automata adott állapotra vonatkozó maradéknyelve

Legyen véges determinisztikus automata.

Az L(A, q) \coloneqq {v \in \Sigma^* \vert\ qv \implies p, p \in F} nyelvet az automata állapotra vonatkozó maradék nyelvének nevezzük.

Alternatív definíció:

Az tehát azokat a szavakat tartalmazza, amelyek hatására az automata -ból indítva végállapotba kerül.

Azaz, lenne az elfogadott nyelv, ha a kezd˝oállapotot q-ra változtatnánk.

Tulajdonságai:

Myhill Nerode tétel

ahol az nyelv ábécéje.

Példa

.

Ekkor

.

Tehát ez a végtelen sok maradéknyelv páronként különböző, így

ZH-n jól használható determinisztikus automata kreálására!

Minimális automata

Mivel állapothalmaza , ezért az alábbi következményt kapjuk:

Az automata állapotszáma kisebb vagy egyenlő, mint a tetszőleges, az nyelvhez adott véges, determinisztikus automata állapotszáma.

Az véges determinisztikus automata minimális állapotszámú, ha nincs olyan -val ekvivalens véges determinisztikus automata, aminek kevesebb állapota van mint -nak. Egy nyelv minimális automatája alatt egy -et felismerő minimális véges determinisztikus automatát értünk.

Minimális automata készítése

Cél: Adott automatához minél kevesebb állapotú, vele ekvivalens, azaz az eredeti automata által felismert nyelvet elfogadó automatát megadni. Két lépésben fogjuk ezt elérni:

  1. Összefüggővé alakítás:

Nyilván átmeneteikkel együtt elhagyhatók azok az állapotok, melyekbe nem tud eljutni az automata. Az átmenetdiagramon ez annak felel meg, hogy nincs a kezd˝oállapotból irányított út a csúcsba.

  1. Ekvivalens állapotok összevonása:

Ha két állapotból pontosan ugyanazon szavak hatására kerül az automata végállapotba, akkor az elfogadás szempontjából mindegy, hogy a m˝uködés során a két állapotba kezül melyikbe került az automata. Ezek az állapotok nyilván összevonhatók.

Redukált automata

Legyenek állapotok. -t és -t nevezzük megkülönbözhetetlennek, ha

Egy véges determinisztikus automata redukált, ha nincsenek megkülönböztethetetlen állapotai.

Faktorautomata

Legyenek és véges, determinisztikus automaták. A két automata izomorf, ha van olyan bijekció, melyre

  • esetén

Tétel:

Az determinisztikus véges automata ~ faktorautomatája

  1. ekvivalens -val
  2. redukált
  3. ha összefüggő, akkor izomorfia erejéig az egyetlen összefüggő, redukált -val ekvivalens automata.

Összegzés

Tehát egy A véges determinisztikus automatához minimális automatát készíthetünk úgy, hogy

  1. az elérhetetlen állapotait elhagyjuk ezzel előállítva egy -val ekvivalens összefüggő automatát,
  2. majd a már összefüggő automata relációnak meghatározása segítségével a fenti módon algoritmikusan előállítunk egy redukált automatát.
  • Az így kapott automata, összefüggő, redukált és ekvivalens -val, ezért korábbi tételünk alapján izomorf az -vel,
  • mivel az automata, ahol szintén összefüggő, redukált (minden minimális automata redukált kell legyen) és -val ekvivalens, ezért ugyanezen tétel alapján szintén izomorf a faktorautomatával,
  • mivel minimális automata, ezért a faktorautomata és az által algoritmikusan meghatározott automata is minimális automata, tételünk szerint ezek izomorfak egymással.

Források

Nyelvi egyenletrendszerek megoldása, általánosított automata

Lineáris nyelvi egyenletrendszerek megoldása

Arden tétele általánosabban:

Legyenek az és nyelvek adottak. Az X = L_1 X \cup \L_2 egyenletnek -re vonatkozó megoldása . Amennyiben , akkor az egyenletnek ez az egyetlen megoldása.

Legyen nyelvi egyenletrendszer, ahol az nyelvmátrix és a nyelvvektor adott az ismeretlen nyelvekből álló vektort keressük. Ha és , akkor az egyenletrendszernek egyértelműen létezik -beli megoldása, és ez a megoldás elemeiből a reguláris nyelvműveletekkel épül fel.

Automata adott állapotra vonatkozó maradéknyelve

Egy determinisztikus véges automata egy állapotra vinatkozó maradéknyelve alatt az nyelvet értjük.

Az tehát azokat a szavakat tartalmazza, amelyek hatására az automata -ból végállapotba kerül.

Tehát és

Vegyük továbbá észre, hogy fennállnak a következő nyelvi egyenletek:

ahol

A maradéknyelvekre vonatkozó egyenletrendszert megoldjuk ( az érdekes). A megoldás egyértelműsége az előző tételből, de az -k egyértelműségéből is adódik.

Általánosított automata

Legyen a feletti reguláris kifejezések halmaza.

Az általános automata definíciója megegyezik a véges nemdeterminisztikus automata definíciójával azzal a kivétellel, hogy átmenetfüggvényére teljesül.

Átmenetdiagramon ábrázolva az általánosítás az, hogy az élek címkéi betűk helyett tetszőleges feletti reguláris kifejezések lehetnek.

Legyen egy általánosított automata és legyenek konfigurációk. Az automata az szót egy lépésben (közvetlenül) a szóra redukálja (jelölés: ), ha van olyan , hogy és teljesül.

A többlépéses redukció és a felismert nyelv fogalma nem változik.

Az -átmenetes, nemdeterminisztikus véges automata olyan általánosított automata, ahol minden átmenet -beli.

Tehát átmenetfüggvénye az input betűnkénti feldolgozása mellett állapotváltásokat engedélyezhet (-átmenetek).

Kis Bar-Hillel lemma

Minden nyelvhez van olyan konstans, hogy minden szó esetén ha tekintjünk egy tetszőleges olyan felbontását, ahol , akkor van -nek olyan részszava , hogy , és minden esetén .

Kevésbé formálisan: minden szavának elég hosszú részszavában létezik elég rövid, nemüres, beiterálható részszava.

Források

Környezetfüggetlen grammatikák, Chomsky normálforma, CYK algoritmus

Egy környezetfüggetlen grammatika szabályai alakúak, ahol

Egy környezetfüggetlen grammatika egy nemterminálisát aktívnak mondjuk, ha van olyan terminális szó, amire teljesül. Egyébként -et inaktív nevezzük.

Egy környezetfüggetlen grammatika egy nemterminálisát elérhetőnek nevezzük, ha léteznek olyan szavak, amelyekre teljesül. Egyébként -t elérhetetlennek (nem elérhetőnek) mondjuk.

Egy környezetfüggetlen grammatika egy nemterminálisát hasznosnak nevezzük, ha aktív és elérhető. redukált, ha minden nemterminálisa hasznos.

Redukált grammatika

Minden környezetfüggetlen grammatikához létezik vele ekvivalens redukált környezetfüggetlen grammatika.

Lépések:

  1. inaktívak elhagyása
  2. elérhetetlenek elhagyása

Chomsky normálforma

Egy grammatika Chomsky normálformájú, ha minden -beli szabály alakja a következők valamelyike:

  • továbbá , ha

Minden környezetfüggetlen grammatikához létezik vele ekvivalens Chomsky normálformájú grammatika

Lépések:

  1. álterminálisok bevezetése
  2. hosszredukció
  3. -mentesítés
  4. láncmentesítés

Környezetfüggetlen grammatikák szóproblémája

Legyen egy környezetfüggetlen grammatika és egy egy szó. Eldönthető, hogy

A naiv algoritmzs csak exponenciális felső becslést adhatunk a szóprobléma eldöntésének hatékonységéra.

Dinamikus programozás segítségével megalkotott algoritmus már polinomiális lesz.

A CYK algoritmus Chomsky normálformában adott grammatika esetében nagyságrendűű lépésben eldönti a szóproblémát.

Tetszőleges környezetfüggetlen grammatika esetén tehát a Chomsky normálformára hozással kombinálva a CYK algoritmus hatékonysága

Források

9. Veremautomaták

  • Input szalag

  • Verem

  • Véges vezérlő

  • A veremautomata a véges automata általánosítása potenciálisan végtelen veremmel és véges kontrollal.

  • A verem esetében az új adat mindig a már meglév˝o veremtartalom tetejéhez adódik, kivétele fordított sorrendben történik.

  • alapértelmezetten nemdeterminisztikus

A veremautomata egy rendezett hetes, ahol

  • a veremszimbólumok véges halmaza

  • az állapotok véges halmaza

  • az inputszimbólumok véges halmaza

  • az úgynevezett átmeneti függvény

  • a kezdeti veremszimbólum

  • a kezdeti állapot

  • az elfogadó állapotok vagy végállapotok halmaza

  • A verem tetején lévő szimbólum, az aktuális állapot és az inputszimbólum együttesen határozzák meg a következő átmenetet.

  • Minden lépésben mindenképpen kiveszünk egyetlen egy elemet a verem tetejéről és beteszünk helyette néhányat. (0, 1, 2, darabot)

  • Ha nem üres, akkor ún. -átmenet hajtható végre, ami lehetővé teszi, hogy a veremautomata anélkül változtassa meg az állapotát és/vagy a verem tartalmát, hogy az inputszalagról betűt olvasna be.

  • -mozgásra lehetőség van már az első inputszimbólum elolvasása előtt is illetve még az utolsó inputszimbólum elolvasása után is.

Veremautomata konfigurációi

A veremautomata konfigurációja alatt egy alakú szót értünk, ahol a verem aktuális tartalma és az aktuális állapot és az input még feldolgozatlan része.

Kezdőkonfigurácicó:

Egylépéses redukció

Az veremautomata az konfigurációt a konfigurációra redukálja egy lépésben, amelyet -val jelölünk, ha létezik olyan és , hogy és és teljesül.

Többlépéses redukció és a felismert nyelv

Az veremautomata az konfigurációt a konfigurációra redukálja, amelyet -val jelöljük, ha vagy , vagy létezik olyan szavakból álló véges sorozat, ahol és

Az veremautomata által elfogadó állapottal felismert nyelv:

Determinisztikus veremautomata

Az veremautomatát determinisztikusnak nevezünk, ha minden esetén

Tehát minden és esetén

  • vagy pontosan egy elemt tartalmaz, minden inoutszimbólumra és
  • vagy pontosan egy elemet tartalmaz és minden inputszimbólumra.

Üres veremmel felismert nyelv

Az veremautomata által üres veremmel felsimert nyelv:

Vegyük észre, hogy ha a verem üres, akkor az automata működése blokkolódik, mivel nincs átmenet definiálva üres verem esetére.

Így a verem az input teljes feldolgozása után, az utolsó átmenettel kell üressé váljon.

Szintén a blokkolás elkerülése végett definiáltuk úgy a kezdőkonfigurációt, hogy a veremábécé egy eleme () már eleve a veremben van.

Az elfogadó állapotok halmaza irreleváns szempontjából.

Végállapottal vs üres veremmel elfogadás

Bármely veremautomatához meg tudunk adni egy veremautomatát, úgy, hogy teljesül

Bármely veremautomatához meg tudunk adni egy veremautomatát, úgy, hogy teljesül

Veremautomaták és környezetfüggetlen grammatikák

Bármely környezetfüggetlen grammatikához magkonstruálható egy olyan veremautomata, amelyre teljesül.

Minden veremautomatához megadható egy környezetfüggetlen grammatika úgy, hogy teljesül

Források

10. Levezetési fa - nincs jegyzet

Környezetfüggő grammatikák

Egy grammatikát hossz-nemcsökkentőnek mondunk, ha minden szabályának alakjára az alábbiak valamelyike teljesül:

  • , de ha van ilyen szabály, nem lehet szabály jobb oldalán
  • , ahol és

Minden hossz-nemcsökkentő grammatika környezetfüggő nyelvet generál.

Következmény:

Kuroda normálforma

Egy grammatikát Kuroda normálformájúnak mondunk, ha minden szabályának alakjára az alábbiak valamelyike teljesül:

  • , de ha van ilyen szabály, nem lehet més szabály jobb oldalán.

Minen környezetfüggő grammatikához van vele ekvivalens Kuroda normálformájú grammatika.

A környezetfüggő nyelvek szóproblémája

Eldönthető, egy hossz-nemcsökkentő grammatika és szó esetén .

Egy 0-típusú normálforma

Bármely 0-típusú grammatikához van vele ekvivalens grammatika, ahol minden szabályának alakjára az alábbiak valamelyike teljesül:

  • , de ha van ilyen szabály, nem lehet más szabály jobb oldalán.

Források

12. Előadás - nincs jegyzet

A számításelmélet alapjai I. gyakorlat

Alapadatok

Idő: Szerda, 10:00 - 12:00
Helyszín: Déli Tömb 00-115
Oktató: Tichler Krisztián
Csoport: 2

Értékelés

  • 2 ZH, egyet lehet javítani

Források

Nyelvek

  • Előadás ismétlése
  • Előadás példáihoz hasonló feladatok.

Források

Grammatikák

Grammatikák megadása, generált nyelv meghatározása.

Források

Elmaradt óra

Ez az óra elmaradt, és nem tartottak pótló órát.

Grammatikák II

Források

Grammatikák III, reguláris kifejezések

Források

Véges automaták

Források

Zárthelyi

ZH megoldás, grammatikák visszamenőleg, általános automaták

Források

9. Általános automaták, Chmosky normálforma, CYK algoritmus

Források

Veremautomaták

Források

11. Gyakorlat - nincs jegyzet

Adatbázisok I. előadás

Alapadatok

Idő: Kedd, 12:00 - 14:00
Helyszín: Déli Tömb 0-821 Bólyai János terem
Oktató: Szalai-Gindl János Márk, szalaigindl@inf.elte.hu
Csoport: 2

Értékelés

  • Írásbeli vizsga
    • Ehhez lehalább 2-es gyakorlatjegy szükséges
    • Elméleti és gyakorlati feladatok
    • Beugró Canvason jelenlétben, aztán hosszabb, esszé jellegű feladatok

Források

Bevezetés és relációs adatmodell

Mi az az adatbázis?

Hátköznapi értelemben: összefüggő adatok praktikusan rendezett gyűjteménye és ezeknek valamilyen rendszerben való tárolása, amely a való világot valamilyen szempontból modellezi.

Adathalmaz adatbázis.

Ma már az élet számos területén alapvető fontossággal bírnak.

Példa: egyetemi oktatás

Tegyük fel, hogy egy olyan adatbázist szeretnénk, amely az egyetemi oktatásról készít modellt.

A dolgok, amelyeket tárolnunk kell:

  • Infók az oktatókról
    • azonosítószám
    • név
    • beosztás
  • Tárgyakról
    • név
    • oktató azonosító
    • bevezetés éve
  • Termek használatáról
    • épület
    • szobaszám
    • időköz
    • tárgynév

Egy tárgyat egy vagy több oktató oktathat, egy oktató egy vagy több tárgyat oktathat.

Egy időben egy teremben csak egy tárgyat oktathatnak.

Nyers fájlok

Tároljuk az adatokat CSV fájlokban.

Használjunk egy-egy fájlt az oktatóra, a tárgyakra és a teremhasználatra!

Az alkalmazásunknak majd szintaktikai elemzést kell végezni minden egyes alkalommal a fájlokon, amikor olvasni/frisséteni fogja a bejegyzéseket.

Adatintegritás

Hogyan tudjuk azt biztosítani, hogy egy előadó az összes albumánál ugyanabban a formában jelenjen meg?

  • Pl. adatbázis, adatbázisok, AB,

Mi történik, ha valaki véletlenül felülírja a tárgy bevezetésének évét egy érvénytelen stringgel?

  • Pl. 1993 helyett ezerkilencszázkilencvenhérom.

Hogyan, milyen formában tároljuk, ha több oktató oktat egy tárgyat?

Implementáció

Hogyan keresünk meg egy adott bejegyzést?

Mi van, ha egy új alkalmazást akarunk készíteni, amelyik ugyanazt az adatbázist használja?

Mi van, ha két thread egyidőben ugyanabba a fájlba próbál írni?

Tartósság

Mi van, a a gép elszáll, miközben éppen egy bejegyzést frissítünk?

Mi van, ha a magas rendelkezésre állás érdekében többszörözni/másolni akarjuk ugyanazt az adatbázist több gépen?

Adatbázis definiálása

Az adatbázisnak új meghatározást adunk: olyan adatok együttese, amelyet egy adatbázis-kezelő rendszer (DBMS: Database Management System) kezel.

Az általános DBMS megoldandó feladatai:

  • új adatbázisok létrehozása, ezek logikai szerkezetének, sémájának definiálása, adatdefiníciós nyelv (DDL - Data Definition Language)
  • adatok lekérdezése, módosítása (DML - Data Manipulation Language)
  • nagyméretű adatok hosszú időn keresztül történő tárolása, adatok biztonsága, meghibásodásokkal, illetéktelen hozzáférőkkel szemben, hatékony adatbázis-hozzáférés
  • egyszerre több felhasználó egyidejű hozzáférésének biztosítása

Adatmodell fogalma

Az adatmodell információ vagy adatok leírására szolgáló jelölés.

A leírás részei:

  • az adatok struktúrája
  • az adatokon végezhető műveletek
  • az adatra vonatkozó megszorítások

Legfontosabb modellek: relációs és féligstruktúrált (XML)

Relációs adatmodell

A relációs adatmodellben az adatokat kétdimenziós táblákban (relációkban) tároljuk.

A reláció fejrészében találhatók az attribútomok

Minden attribútomhoz hozzátartozik egy értékkészlet

A reláció neve és a reláció-attribútomok halmaza együtt alkotják a relációsémát

A reláció attribútumainak sorrendje felcserélhető.

A séma egy adatmodellben általánosságban azt adja meg, hogy egy-egy adatelem milyen "formájú" adatokat tárol.

Egy-egy reláció soroknak egy halmaza

Halmaz: nem számít a sorrend, egy elem csak egyszer szerepelhet.

A reláció sorainak halmazát előfordulásnak nevezzük.

esetén az attribútomok értékkészlete adja az alaphalmazokat (), egy egy előfordulás pedig egy-egy matematikai relációnak "feleltethető meg".

Az attribútumok sorrendje láttuk, hogy nem rögzített a relációsémában. Egy-egy előfordulás ábrázolása esetén viszont rögzítésre kerül.

A lényeg, hogy a soroknál egy attribútum értékét az attribútum nevével azonosítjuk, és nem pedig azzal, hogy hányadik helyen szerepel a soron belül.

Az adatbázis tulajdonképpen relációk halmaza. A megfelelő relációsémák halmaza adja az adatbázissémát, a hozzá tartozó előfordulások pedig az adatbázis-előfordulást.

Egy sor elemeit mezőnek (komponens) nevezzük. Minden mező csak atomi értéket vehet fel. Léteznek bonyolultabb adatmodellek is, ahol egy mező értéke lehet halmaz, lista, tömb, referencia stb.

Megjegyzés: a gyakorlatban sokszor megengedik a sorok ismétlődését, hiszen az ismétlődések megszüntetése nagyon időigényes

Megszorítás

Az attribútumok egy halmaza egy kulcsot alkot egy relációra nézve, ha a reláció bármely előfordulásában nincs két olyan sor, amelyek a kulcs összes attribútumának értékein megegyeznének.

pl. TAJ-szám...

A kulcsot aláhúzás jelöl: Teázó(név, város, tulaj)

Algebra

Egy algebra általában műveleteket és atomi operandusokat tartalmaz.

A relációs algebra lehetővé teszi kifejezések megfogalmazását az atomi operandusokon és az algebrai kifejezéseken végzett műveletek alkalmazásával kapott relációkon.

Fontos tehát, hogy minden művelet végeredménye reláció, amelyen további műveletek adhatók meg.

A relációs algebra atomi operandusai a következők:

  • a relációkhoz reprezentáló változók
  • konstansok, amelyek véges relációt fejeznek ki

Relációs algebra

  • Projekció: Adott relációt vetít le az alsó indexben szereplő attribútumokra.
  • Szelekció: Kiválasztja az argumentumban szereplő reláció azon sorait, amelyek eleget tesznek az alsó indexben szereplő feltételnek.
  • Unió, metszet, különbség
  • Descartes-szorzat
  • Átnevezés: relációk adott attribútumanak átnevezése.
  • Théta-összekapcsolás: összekapcsolás valamilyen predikátummal
  • Természetes összekapcsolás: összekapcsolás predikátum nélkül

Egy relációkon értelmezett operátor akkor monoton, ha bármelyik argumentumrelációhoz egy újabb sort hozzávéve az eredmény tartalmazza az összes olyan sort, amelyet addig tartalmazott és esetleg újabb sorokat is.

Források

Relációs algebra lekérdezések optimizációja és bevezetés az SQL-be

Relációs algebra lekérdezések optimizációja

Cél: a feladatot minél kevesebb adatmozgatással tudjunk megoldani a háttértár és a központi memória között.

  • Minél kevesebb disk I/O művelet végrehajtása egy-egy lekérdezés végrehajtása során.
  • Az optimalizáció során relációs algebrai azonosságok alkalmazása. ()
  • Eredetivel ekvivalens lekérdezés készítése, kiszámításához az esetek többségében kevesebb I/O művelet

Algebrai azonosságok

Descartes-szorzat és összekapcsolások

Projekció és szelekció

Kiválasztás és Descartes-szorzat/összekapcsolás

Projekció/kiválasztás és halmazműveletek

Optimizációs stratégiák

  • Feltételek darabolása és letolása (minél előbb szűrjünk)
  • Projekciók letolása (projektáljunk minél előbb)
  • Utolsó lépésként kifejezések helyettesítése természetes összekapcsolással, -összekapcsolással.

Ha diszjunkciók is megjelennek, azok nehezíthetik a lekérdezések optimalizációját.

Bevezetés az SQL-be

Az SQL magas szintű programozási nyelv.

Az adatbázis-kezelő rendszer kitalálja a leggyorsabb végrehajtási módot.

  SELECT -- az érdekes attribútumok
  FROM -- egy vagy több tábla
  WHERE -- a táblák soraira vonatkozó feltételek
  AS -- átnevezés
  LIKE -- mintaillesztés
  IN -- eleme

A lekérdezés jelentése

  • Kezdjük a FROM záradékban megadott relációval.
  • Alkalmazzuk a WHERE záradékban megadott kiválasztási feltételt.
  • Levetítjük az eredményt a SELECT záradékban megadott oszlopokra.

A SELECT záradékban megjelenhet algebrai kifejezés, például:

  SELECT teázó, tea, ár*114 AS árJenben
  FROM Felszolgál

Információ integráció

  • Sokszor az adatbázisokat sok forrásból építik fel (adattárházak).
  • Tegyük fel, hogy minden teázónak van egy saját Menü(tea, ár) táblája.
  • A Felszolgál(teázó, tea, ár) tábla elkészítéséhez minden ilyen táblát fel kell dolgoznunk és a teázó nevét konstansként kell beszúrnunk.

Például Joe teázója esetében ezzel a lekérdezéssel dolgozhatunk:

  SELECT ’Joe teázója’, tea, ár
  FROM Menü;

A WHERE zárdékában logikai kifejezéseket is használhatunk.

Minták

A feltételekben a sztringeket mintákra illeszthetjük a LIKE kulcsszóval.

Minta aposztrófok közötti szöveg az alábbi jelekkel: % = “akármennyi karakter”; _ = “tetszőleges karakter, pontosan egy.”

Például:

  SELECT név
  FROM Vendégek
  WHERE cím LIKE '%Budapest%';

NULL összehasonlítás

Az SQL valójában 3-értékű logikát használ: TRUE, FALSE, UNKNOWN.

Ha egy értéket (NULL értéket is beleértve) NULL-lal hasonlítunk, az eredmény UNKNOWN.

Egy sor akkor és csak akkor kerül be az eredménybe, ha a WHERE záradék TRUE értéket ad.

Többrelációs lekérdezések

Általában több táblából kell kinyernünk az adatokat.

Ekkor a relációkat a FROM záradékban kell felsorolnunk.

Az azonos attribútum neveket az alábbi módon különböztetjük meg egymástól:
<reláció>.<attribútum> .

Példa:

  SELECT tea
  FROM Szeret, Látogat
  WHERE teázó = 'Joe teázója' AND
  Látogat.vendég = Szeret.vendég

Szemantika

Formális szemantika

Majdnem ugyanaz, mint korábban:

  1. Vegyük a FROM záradékban szereplő relációk Descartes-szorzatát.
  2. Alkalmazzuk a WHERE záradék feltételét.
  3. Vetítsünk a SELECT záradék oszlopaira.

Operációs szemantika

Képzeljük úgy, mintha minden FROM záradékbeli táblához tartozna egy sorváltozó.

  • Ezekkel a sorok összes lehetséges kombinációját vesszük.
  • Ha a sorváltozók a WHERE záradékot kielégítő sorra mutatnak, küldjük el ezeket a sorokat a SELECT záradékba.

Explicit sorváltozók

Esetenként egy tábla több példányára is szükségünk van.

  • A FROM záradékban a relációk neve után adjuk meg a hozzájuk tartozó sorváltozók nevét.
  • Egy relációt mindig átnevezhetünk ily módon, akkor is, ha egyébként nincs rá szükség.

Példa: önmagával vett összekapcsolás

  SELECT b1.név, b2.név
  FROM Teák b1, Teák b2
  WHERE b1.gyártó = b2.gyártó AND
        b1.név < b2.név;

Alkérdések

A FROM és WHERE záradékban zárójelezett SELECT-FROM-WHERE utasításokat (alkérdés) is használhatunk.

Példa: a FROM záradékban a létező relációk mellett, alkérdéssel létrehozott ideiglenes táblát is megadhatunk.

  • Ilyenkor a legtöbb esetben explicite meg kell adnunk a sorváltozó nevét.
  SELECT tea
  FROM Szeret, (SELECT vendég
    FROM Látogat
    WHERE teázó = 'Joe teázója')JD
  WHERE Szeret.vendég = JD.vendég;

Az IN művelet

  • <sor> IN (<alkérdés>) igaz, akkor és csak akkor, ha a sor eleme az alkérdés eredményének.
  • Tagadás: <sor> NOT IN (<alkérdés>).
  • Az IN-kifejezések a WHERE záradékban jelenhetnek meg.

Példa:

  SELECT *
  FROM Teák
  WHERE név IN (SELECT tea
                  FROM Szeret
                  WHERE vendég = 'Fred');

Források

SQL Bevezetés folytatás, haladó SQL

Bevezetés az SQL-be II

Az EXIST művelet

EXIST(<alkérdés>) akkor és csak akkor igaz, ha az alkérdés eredménye nem üres.

  SELECT *
  FROM Teák b1
  WHERE NOT EXISTS (
    SELECT * 
    FROM Teák
    WHERE gyártó = b1.gyártó AND 
          név != b1.név
  );

Az ANY művelet

x = ANY(<alkérdés>) akkor és csak akkor igaz, ha x egyenlő az alkérdés legalább egy sorával

Az ALL művelet

x != ALL(<alkérdés>) akkor és csak akkor igaz, ha x az alkérdés egyetlen sorával sem egyezik meg.

  SELECT tea
  FROM Felszolgál
  WHERE ár >= ALL(
        SELECT ár
        FROM Felszolgál
  );

Unió, metszet, különbség

(<alkérdés>)UNION/INTERSECT/MINUS(<alkérdés>)

  (SELECT * FROM Szeret)
  INTERSECT
  (
    SELECT vendég, tea
    FROM Felszolgál, Látogat
    WHERE Felszolgál.teázó = Látogat.teázó
  );

A SELECT-FROM-WHERE multihalmaz szemantikát használnak, a halmazműveleteknél mégis a halmaz szemantika érvényes.

Ismétlődések kiküszöbölése

DISTINCT kulcsszó.

Összekapcsolás kifejezések

Az SQL-ben számos változata megtalálható az összekapcsolásnak.

Ezek a kifejezések önmagukban is állhatnak lekérdezésként, vagy a FROM zátadékban is megjelenhetnek.

Descartes szorzat és természetes összekapcsolás:

R NATURAL JOIN S R CROSS JOIN S

Theta összekapcsolás

R JOIN S ON <feltétel>

  Vendégek JOIN Látogat ON
    név = vendég;

Relációs algebra és az SQL

Relációs algebra: érdekes a "hogyan" kérdés is

Kapcsolat a relációs algebra műveletek és SQL záradékok, kulcsszavak között.

SQL-nél mondtuk: "hogyan" helyett "mit"

DBMS kitalálja a leggyorsabb végrehajtási módot, háttérben optimalizál

Van a relációs kalkulus, amely deklaratív nyelv.

Haladó SQL

Összekapcsolás típusok

  • Descartes-szorzat
  • Belső összekapcsolás
  • Külső összekapcsolás

Belső összekapcsolások

  • Természetes összekapcsolás
  • Theta összekapcsolás
  • Félig összekapcsolás (semi join)
  • Anti összekapcsolés

Külső összekapcsolás

Kiterjesztett relációs algebra

Összekapcsoljuk és relációkat

Három különböző művelet

azon sorait, melyeknek nincs beli párja lógó soroknak nevezzük

A külső összekapcsolás megőrzi a lógó sorokat NULL értékrkkel helyettesítve a hiányzó értékeket.

Összesítések

SUM, AVG, COUNT, MIN, MAX összesítő függvények a SELECT záradékában alkalmazhatjuk egy-egy oszlopra.

COUNT(*) az eredmény sorainak számát adja meg.

  SELECT AVG(ár)
  FROM Felszolgál
  WHERE tea = 'Brisk';
SELECT COUNT(DISTINCT ár)
FROM Felszolgál
WHERE tea = 'Brisk';  

NULL értékek nem számítanak az összesítésben.

  • NULL soha nem számít a SUM, AVG, COUNT, MIN, MAX függvények kiértékelésekor.
  • De ha nincs NULL értéktől különböző érték az oszlopban, akkor az összesítés eredménye NULL
    • kivéve a COUNT, ami az üreshalmazon -t ad vissza.

Csoportosítás

Egy kifejezést GROUP BY záradékkal folytathatjuk, melyet attribútomok listája követ.

  SELECT tea, AVG(ár)
  FROM Felszolgál
  GROUP BY tea;

A GROUP BY záradékot egy HAVING <feltétel> záradék követheti, ami a már csoportokat szűri.

SELECT tea, AVG(ár)
FROM Felszolgál
GROUP BY tea
HAVING COUNT(teázó) >= 3 OR
  tea IN (
    SELECT név
    FROM Teák
    WHERE gyártó = 'Pete'  
  );

Adatbázis módosítások

A módosító utasítások nem adnak eredményt, hamen az adatbázist változtatják meg.

3-féle módosító létezik:

  • INSERT
  • DELETE
  • UPDATE

Ezek a Data manipulation Language része.

Beszúrás

Ha egyetlen sort szúrunk be:

  INSERT INTO <reláció>
  VALUES (<attribútum lista>);

A reláció után megadhatjuk az attribútumait, mert nem emlékszünk az attribútum sorrendre, vagy nincs minden attribútumnak értéke, és szeretnénk, ha a hiányzó értékeket NULL vagy default értékkel helyettesítenénk.

Default értékek megadása

A CREATE TABLE utasításban van rá lehetőség

  CREATE TABLE Vendégek (
     név CHAR(30) PRIMARY KEY,
     cím CHAR(50) DEFAULT '123 Sesame St.'
     telefon CHAR(16) 
  );
Több sor beszúrása

Egy lekérdezés eredményét is beszúrhatjuk a következő módon:

  INSERT INTO <reláció> (<alkérdés>);

Törlés

  DELETE FRPM <reláció>
  WHERE <feltétel>;

Itt is van lehetőség több sort töröni allekérdezéssel.

Törlés szemantikája: Elősször kijelölünk, aztán törlünk.

Módosítás

  UPDATE <reláció>
  SET <attribútum értékadások listája>
  WHERE <sorokra vonatkozó feltétel>;

Adatbázis sémák SQL-ben

A Data Definition Language segítségével hozhatunk létre adatobjektumokat, deklarálhatunk megszorításokat.

Relációk létrehozása

  CREATE TABLE <név> (
    <elemek listája>
  );

Legfontosabb típusok:

  • INT
  • FLOAT
  • CHAR(n): rögzített hossz
  • VARCHAR(n): legfeljebb hosszúság
  • DATE
  • TIME
Kulcsok megadása

Egy attribútomot vagy attribútum listát kulcsként deklarálhatunk (PRIMARY KEY vagy UNIQUE)

Minden formája a megszorításnak azt követeli meg, hogy relációnak ne legyen két olyan sora, melyek megegyeznek a kulcs attribútumokon.

  CREATE TABLE Felszolgál (
    teázó CHAR(20),
    tea   VARCHAR(20),
    ár    REAL,
    PRIMARY KEY (teázó, tea)
  );
PRIMARY KEY vs UNIQUE
  1. Egy relációhoz egyetlen PRIMARY KEY tartozhat és több UNINQUE megszorítás.
  2. A PRIMARY KEY egyetlen attribútuma sem kaphat NULL értéket. A UNIQUE megszorításnál szerepelhetnek NULL értékek egy soron belül akár több is.

Relációk törlése

  DROP TABLE <név>

Források

Megszorítások, tranzakciók, nézettáblák, indexek, jogosultságok

Megszorítások és triggerek

A megszorítás adatelemek közötti kapcsolat, amelyet az AB rendszernek fent kell tartania.

Triggerek olyankor hajtódnak végre, amikor valamilyen esemény történik, mint pl. sorok beszúrása egy táblába.

Megszorítások típusai:

  • Kulcsok
  • Idegen kulcsok, vagy hivatkozási épség megszorítás
  • Attribútum alaú megszorítás: egy adott attribútum lehetséges értékeiről mond valamit
  • Sor alapú megszorítás: mezők közötti kapcsolat leírása
  • Globális megszortás: bármilyen SQL kifejezés

Idegen kulcsok

Egy reláció attribútumainak értékei egy másik reláció értékei között is meg kell, hogy jelenjenek együttsesn.

A REFERENCES kulcsszót kell használni:

  1. egy attribútum után
  2. A séma elemenként:
FOREIGN KEY (<attribútumok listája>)
REFERENCES<reláció>(<attribútumok>)

A hivatkozott attribútumoknak kulcsnak kell lenniük.

Reláció sérülés

Egy idegen kulcs megszorítás relációról relációra kétféleképpen sérülhet:

  1. Egy -be történő beszúrásnál -ben nem szereplő értéket adunk meg
  2. Egy -beli törlés "lógó" sorokat eredményez -ben

Hogyan védekezhetünk?

  1. Default
  2. Továbbgyűrűzés
  3. Set NULL
  • Ha egy idegen kulcsot deklarálunk megadhatjuk a SET, NULL, CASCADE stratégiát is módosításra és törlésre egyaránt.

  • Az idegen kulcs deklarálása után ezt kell írnunk: ON[UPDATE, DELETE][SET NULL, CASCADE]

  • Ha ezt nem adjuk meg, a default stratégia működik.

Attribútum alapú ellenőrzések

  • Adott oszlop értékeire vonatkozóan
  • A CHECK(<feltétel>) hozzáadása az attribútum deklarációjához
  • Feltételben csak az adott attribútum neve, más attribútumok csak alkérésben
  • Csak beszúrásnál és módosításnál hajtódik végre az attribútum alapú ellenőrzés

Sor alapú megszorítások

  • CHECK(<feltétel>) megszorítás a séma elemeként
  • Feltételben tetszőleges oszlop és reláció (más relációk attribútumai csak alkérésben)
  • Csak beszúrásnál és módosításnál ellenőrzi a rendszer

Globális megszorítás

  • Adatbázissémához tartoznak
CREATE ASSERTION <név>
  CHECK(<feltétel>);
  • Bármilyen módosításra ellenőriz
  • Egy okos rendszer felismeri, hogy mely változtatásokra szükséges ez valóban

Triggerek

  • A globális megszorításokkal sok mindent le lehet írni, de ellenőrzésük gondot jelenthet.

  • Az attribútum- és sor-alapú megszorítások ellenőrzése egyszerűbb,de ezekkel nem tudunk mindent kifejezni.

  • A triggerek esetén a felhasználó mondja meg, hogy egy megszorítás mikor kerüljön ellenőrzésre.

  • A triggereket eseményenként ECA szabályoknak (event-condition-action) is nevezik.

Példa:

  CREATE TRIGGER TeaTrig
    BEFORE INSERT ON Felszolgál
    REFERENCING NEW ROW AS ÚjSor
    FOR EACH ROW
    WHEN (ÚjSor.tea NOT IN 
      (SELECT név FROM Teák))
    INSERT INTO Teák(név)
      VALUES(ÚjSor.tea);

Tranzakciók

  • Olyan folyamat, ami adatbázis lekérdezéseket, módosításokat tartalmaz
  • Az itasítások egy "értelmes egészet" alkotnak
  • Egyetlen utasítást tartalmaznak, vagy SQL-ben eyplicit módon megadhatóak
  • Kell: végrehajtásuk tartós legyen
  • Az oprendszerektől eltérően az AB rendszereknek el kell különíteniük a folyamatokat

Tranzakciók feldolgozása

A tranzakciófeldolgozó két nagyobb részből áll:

  1. Konkurenciakezelő: tranzakciók oszthatatlanságára, elkülönítésére
  2. Naplózás- és helyreállítás-kezelő: tranzakciók tartóssága

ACID tranzakciók

  • Atomiság (atomicity): vagy az összes, vagy egy utasítás sem hajtódik végre
  • Konzisztencia (consistency): az adatbázis megszorítások megőrződnek
  • Elkülönítés (isolation): a felhasználók számára úgy tűnik, mintha a folyamatok elkülönítve, egymás után futnának le.
  • Tartósság (durability): egy befejeződott tranzakció módosítási nem vesznek el.

COMMIT

  • A COMMIT SQL utasítás végrehajtása után a tranzakció véglegesnek tekinthető.
  • A tranzakció módosításai véglegesítődnek

ROLLBACK

  • A ROLLBACK SQL utasítás esetén a tranzakció abortál, azaz az összes utasítás visszagörgetésre kerül.
  • A 0-val való osztás bvagy egyéb hibák szintén okozhatnak rollback-et.

Elkülönítési szintek

  • Az SQL négy elkülönítési szintet definiál, amelyek megmondják, hogy milyen interakciók engedélyezettek egy időben végrehajtandó tranzakciók közöt.
  • Ezek közül az egyik szint ("sorbarendezhető") = ACID tranzakciók.
  • Minden AB rendszer a saját tetszése szerint implementálhatja a tranzakciókat.

SET TRANSACTION ISOLATION LEVEL X, ahol X =

  1. SERIALIZABLE: ACID tranzakció
  2. REPEATABLE READ: ha az adatot újra beolvassuk, akkor amit először láttunk, másodszor is látni fogjuk
  3. READ COMMITED: a tranzakció csak kommitálás utáni adatot láthat, de nem feltétlenül mindig ugyan azt az adatot
  4. READ UNCOMMITED: akkor is látja a tranzakció az adatokat, amikor a változtatások még nem lettek véglegesítve

Nézettáblák

  • A nézettábla olyan reláció, amit tárolt táblák és más nézettáblák felhasználásával definiálunk.

  • Kétféle létezik:

    1. virtuális: nem tárolódik az adatbázisban, csak a relációt megadó lekérdezést tárolunk.
    2. materializált: kiszámítódik, majd tárolásra kerül
  • Deklaráció:

CREATE [MATERIALIZED] VIEW <név> AS <lekérdezés>;
  • Alapesetben virtualizált nézettábla jön létre.

Materializált nézettáblák

  • Probléma: minden alkalommal, amikor az alaptáblák valamelyike változik, a materializált nézettábla frissítése is szükségessé válhat, ez viszont néha túl költséges.

  • Megoldás: Periodikus frissítése a materializált nézettáblának, amelyek egyébként "nem aktuálisak".

Indexek

  • Index = olyan adatszerkezet, amivel egy-egy reláció sorait gyorsabban érhetjük el adott attribútumának értéke, attribútumainak értékei alapján.

  • Lehet hash tábla, de az AB rendszerekben a legtöbb esetben kiegyensúlyozott keresési fával valósítják meg (B-fák)

  • Nincs tipikus megadás, de tipikus szintaxis:

  CREATE INDEX TeaInd ON Teák(gyártó);
  CREATE INDEX EladásInd ON Felszolgál(teázó, tea);
  • Adott értékre az index azokhoz a sorokhoz irányít, ahol ez a érték megjelenik a megfelelő attribútumoknál.

Adatbázisok hangolása

  • Az adatbázisok hangolásánál komoly kérdést jelent annak eldöntése, hogy milyen indexeket használjanak.
  • Mellette: az index felgyorsíthatja a lekérdezések végrehajtását
  • Ellene: a módosítások lassabbak lesznek, hiszen az indexeket is módosítani kell.

Jogosultságok

  • AZ SQL-ben több fajta jogosultság és adatobjektum létezik, mint egy tipikus fájlrendszerben.
  • Összességében 9 jogosultság, ezek némelyike egy reláció egyetlen attribútumára is megadható.

Legfontosabb jogosultságok:

  • SELECT

  • INSERT

  • UPDATE

  • DELETE

  • A magunk lkészítette objektumok esetében az összes jogosultsággal rendelkezünk

  • Másoknak is megadhatunk jogosultságokat

GRANT <jogosultságok listája>
ON <adatobjektum>
TO <jogosuétsági azonosítók listája>
  • A WITH GRANT OPTION utasításrész lehetővé teszi, hogy aki megkapta a jogosultságot, tovább is adhassa azt.

Visszavonás:

REVOKE <jogosultságok listája>
ON <adatobjektum>
TO <jogosuétsági azonosítók listája>
  • Az általunk kiadott jogosultságok ez által visszavonódnak, de ha máshonnan is megkapták ugyanazt a jogosultságot, akkor az még megmarad.

REVOKE opciói:

  1. CASCADE: azok a jogosultságok is visszavonódnak, amelyeket az a személy adott ki, akitől most megvonjuk.
  2. RESTRICT: a visszavonás nem hajtódik végre, amíg a visszavonandó jogosultságtól függő jogosultságok is vannak.

Jogosultsági azonosítók

  • A felhasználókat egy jogosultsági azonosító alapján azonosítunk, általában ez a bejelentkezési név.
  • Külön jogosultságok azonosító a PUBLIC

Források

Adatbázis tervezés

A relációs adatmodell tervezése

  • Megtehetnénk, hogy valamennyi adatot egyetlen relációba tennénk:

    • A felhasználó szempontjából kényelmes
    • Sok "felesleges" adat van benne nem jó tárolási hatékonyság, az adatbázist ellentmondásossá teheti
  • valahogy a felhasználási eset fogalmait, kapcsolatait modellezni kell

  • De még így is előfordulhat, hogy nem lesz elég "ügyes" a modellezés még mindig lehetnek felesleges adatok konkrét előfordulásnál.

  • Redundancia:

    • Adott egy reláció. Ha valamely attribútum értékét ki tudjuk az attribútumok értékeiből "következtetni" a relációt redundásnak nevezzük

Funkcionális függőségek

egy relációra vonatkozó megszorítás, miszerint ha két sor megegyezik összes attribútumán, attribútumain is megg kell, hogy egyezenek.

  • Jelölés: attribútom halmazokat, attribútumokat jelöl.
  • Jelölés: attribútum halmaz helyett -t írunk.

Jobboldalak szétvágása / dekompozíció

  • akkor és csak akkor teljesül relációra, ha is teljesül -en
  • Baloldalak szétvágására nincs általános szabály
  • Általában funkcionális feltételek jobboldalán egyetlen attribútum szerepel majd

Relációk kulcsai

  • szuperkulcs relációra, ha funkcionálisan meghatározza attribútumait.
  • kulcs -en, ha szuperkulcs, de egyetlen valódi részhalmaza sem szuperkulcs.

Armstrong axiómák I

  • (A1) Reflexivitás: ha , akkor . Az ilyen függőségeket triviális függőségnek nevezzük.
  • (A2) Bővítés: ha teljesül, akkor tetszőleges -ra teljesül
  • (A3) Tranzitivitás: ha és , akkor

Lezárás

  • Adott funkcionális függőségeknek egy halmaza: bizonyos attribútumértékből esetleg milyen más attribútum értékeket kephatunk?
  • Adott reláció és funkcionális függőségek egy halmaza mellett, lezártja: jelölésben az összes olyan attribútum halmaza, amira következik -ből

Algoritmus

  • Kiindulás:
  • Indukció: Olyan funkcionális függőségeket keresünk, melyeknek a baloldalára már benne van -ban. Ha ilyen, -t hozzáadjuk -hoz.
  • Ha -hoz már nem lehet további attribútumot adni vége.

Ez az algoritmus helyes, azaz tényleg -t számítja ki.

Az összes következmény funkcionális függőség megtalálása

  • Motiváció: "normalizálás", melynek során egy relációsémát több sémára bonthatunk szét.

  • Alapötlet:

    1. Induljunk ki a megadott funkcionális függőségekből és keressük meg az összes nem triviális funkcionális függőséget, ami a megadott funkcionális függőségekből következik.
    2. Csak azokkal a funkcionális függőségekkel foglalkozunk, amelyekben a projektált séma attribútumai szerepelnek
  • Exponenciális algoritmus:

    1. Minden attribútumhalmazra számítsuk ki -t
    2. Asjuk hozzá a függőségeinkhez -t minden -ra -ből
    3. Dobjuk ki -t, ha is teljesül, mert az -ból minden esetben következik.
    4. Végül csak azokat a funkcionális függőségeket használjuk, amelyekben csak a projektált attribútumok szerepelnek.

Források

Adatbázis tervezés II

  • Cél: az anomáliák és a redundancia megszüntetése
    • Módosítási anomália
    • Törlési anomália
    • Beszúrási anomália

Relációk felbontása

relációt, attribútumokkal helyettesítsük és relácciókkal úgy, hogy

Veszteségmentes felbontás

  • Ha teljesül, akkor az előbbi összekapcsolásra azt mondjuk, hogy veszteségmentes. Itt egy sémájú relációt jelöl és attribútumainak részhalmazai az

  • jelentése: sorai az attribútumaira projektálva.

  • Látható, hogy mindig teljesül.

Boyce Codd normálforma

reláció BCNF normálformában van, ha minden nemtriviális funkciónális függőségre -ben szuperkulcs.

  • Nemtriviális: nem része -nek
  • Szuperkulcs: tartalmaz kulcsot (ő maga is lehet kulcs)

BCNF-re bontás:

  • Adott reláció ls funkcionális függőségek.
  • Van-e olyan ami sérti a BCNF-t?
    • Ha van olyan következmény -ben, ami sérti a BCNF-t, akkor -beli funkcionális függőség is sérti
  • Kiszámoljuk -t:
    • Ha itt nem szerepel az összes attribútum, nem szuperkulcs
  • dekomponálása felhasználásával:
    • -t helyettesítsük az alábbiakkal:
    • Projektáljuk a megfelelő -beli FF-eket a két új relációsémára

Miért működik a BCNF?

  • esetén ha egy veszteségmentes felbontás, pedig veszteségmentes felbontása, akkor is veszteségmentes felbontás.
  • Könnyen ellenőrizhrtő, hogy BCNF felbontás dián az veszteségmentes.
  • Minden két attribútum séma BCNF normálformában van
  • A fentiekkel igazolható:
    • Az algoritmus valóban veszteségmentes felbontást ad, ám sajnos exponenciális lépésszámú is lehet a függődégek vetítése miatt.

Chase teszt veszteségmentességhez

Az -beli függőségeket használva egyenlővé tesszük azokat a szimbólumokat, amelyeknek ugyanazoknak kell lennie, hogy valamelyik függőség ne sérüljön.

  • Ha a két egyenlővé teendő szimbólum közül az egyik index nélküli, akkor a másik is ezt az értéket kapja.
  • Két indexes szimbólum esetén a kisebbik indexű értéket kapja meg a másik.
  • A szimbólumok minden előfordulását helyettesíteni kell az új értékkel. Az algoritmus véget ér, ha valamelyik sor -vel lesz egyenlő, vagy több szimbólumot már nem tudunk egyenlővé tenni.

Ha szerepel a tablóban, akkor valóban -nek egy sora, és mivel -t tetszőlegesen választottuk, ezért a felbontás veszteségmentes.

Ha nem kapjuk meg -t, akkor viszont a felbontás nem veszteségmentes.

A harmadik normálforma

Motiváció

  • Bizonyos FF halmazok esetén a felbontáskor elveszíthetünk függőségeket.
  • és
    • pl.:
  • Két kulcs van: és
  • megsérti a BCNF-t, tehát -re dekomponálunk

A probléma az, hogy és sémákkal nem tudjuk kikényszeríteni függőséget

3NF

  • 3.normálformában (3NF) úgy módosul a BCNF feltétel, hogy az előbbi esetben nem kell dekomponálnunk.

  • Egy attribútum prím (elsődleges attribútum), ha legalább egy kulcsnak eleme.

  • nem-triviális FF, megsérti 3NF-t akkor és csak akkor, ha nem szuperkulcs és nem prím.

  • minden nem triviális függőségre igaz, hogy bal oldala szuperkulcs, vagy jobb oldala csak elsődleges attribútumokat tartalmaz

  • 3NF feltétel és a BCNF feltétel közötti különbség a "vagy jobb oldala csak elsődleges attribútumokat tartalmaz"

3NF-re bontás

Minimális bázis létrehozása

  1. Jobb oldalak szétvágása.
  2. Próbáljuk törölni az FF-eket egymás után. Ha a megmaradó FF-halmaz nem ekvivalens az eredetivel, akkor nem törölhető az épp aktuális FF.
  3. Egymás után próbáljuk csökkenteni a baloldalakat, és megnézzük, hogy az eredetivel ekvivalens FF-halmazt kapunk-e.

A minimális bázis minden FF-re megad egy sémát a felbontásban.

  • A séma a jobb- és baloldalak uniója lesz ( FF, séma) .
  • Ha a minimális bázis FF-jei által meghatározott sémák ( FF, séma) között nincs szuperkulcs, akkor hozzáadunk a felbontáshoz egy olyan sémát, amely maga egy kulcs az relációra.

3NF vs BCNF

A dekompozícióknak három fontos tulajdonsága lehet:

  1. Veszteségmentes összekapcsolás (információ visszaállíthatóság)
  2. Függőségek megőrzése
  3. Anomáliák kiküszöbölése

Az (1) tulajdonság teljesül a BCNF esetében.

  • A 3NF (1) és (2)-t is teljesíti, de maradhat benne anomália (általában ez nem akkora baj)

  • A BCNF esetén (2) sérülhet, viszont (FF-ek okozta) anomália nem lehet benne

Források

Többértékű függőségek, egyed kapcsolat modell

Többértékű függőségek

A többértékű függőség: az reláció fölött teljesül, ha bármely két sorra, amelyek megegyeznek az minden attribútumán, az attribútumaihoz tartozó értékek felcserélhetők, azaz a keletkező két új sor -beli lesz.

Más szavakkal: minden értéke esetén az -hoz tartozó értékek függetlenek az értékeitől.

Többértékű függőség szabályok

  • Minden funkcionális függőség egyben többértékű függőség is.

    • Ha és két sor megegyezik -en, -on is megegyezik, emiatt ha ezeket felcseréljük, az eredeti sorokat kapjuk vissza, azaz:
  • Komplementálás: Ha és jelöli az összes többi attrubútum halmazát, akkor

  • Ugyanúgy, mint az FF-ek esetében, a baloldalakat nem "bánthatjuk" általában.

  • Az FF-ek esetében a jobboldalakat felbonthattuk, míg ebben az esetben ez sem tehető meg.

Negyedik normálforma

  • A TÉF-ek okozta redundanciát a BCNF nem szünteti meg.
  • Megoldás: a negyedik normálforma
  • A negyedik normálformánál amikor dekomponálunk, a TÉF-eket úgy kezeljük, mint az FF-eket, a kulcsok megtalálásánál azonban nem számítanak.

Triviális TÉFek

Legyen egy reláció, és részhalmazai attribútumainak, jelölés:

  • TÉF automatikusan fennáll, ha
  • TÉF automatikusan fennáll, ha

4NF definíció

Egy reláció 4NF-ben van, ha minden nemtriviális TÉF esetén szuperkulcs

  • Nemtriviális TÉF:
    1. nem részhalmaza -nek
    2. és együtt nem adják ki az összes attribútumot.
  • A szuperkulcs definíciója ugyanaz marad, azaz csak az FF-ektől függ.

BCNF vs 4NF

  • Kiderült, hogy minden FF TÉF is.
  • Így ha 4NF-ben van, akkor BCNF-ben is.
  • De lehet úgy BCNF-ben, hogy közben nincs 4NF-ben.

Dekompozíció és 4NF

Ha megsérti a 4NF-t, akkor -t hasonlóan dekomponáljuk, mint a BCNF esetén.

  1. az egyik dekomponált reláció
  2. Az -be nem tartozó attribútumok a másik.

TÉF és FFek együttes következtetése

  • Probléma: relációsémához adott a TÉF-ek és FF-ek egy halmaza, kérdés: egy adott FF vagy TÉF következik-e ezekből fölött?
  • Megoldás: használjunk egy táblázatot (tablót), hogy a függőségek hatásait feltárjuk. (A chase mögötti ötletet terjesztjük ki.)

Miért foglalkozunk ilyesmivel?

  1. 4NF azon múlik, hogy van-e olyan TÉF, ami sérti a feltételt.
  • Előfordulhat, hogy a megadott FF-ek és TÉF-ek nem sértik a feltételt, de egy belőlük következő függőség igen.
  1. Amikor dekomponálunk az FF-eket és TÉF-eket is vetítenünk kell.

Következtetés

FF használata

FF alkalmazásánál keressük meg azon sorpárokat, amelyek megegyeznek attribútumain. Az attribútumain is tegyük őket egyenlővé.

  • Egy változót egy másikra cseréljünk.
  • Ha a lecserélt változó a célsorban is megjelenik, ott is cseréljünk.
TÉF használata

Egy TÉF használatánál keressünk két sort, amelyek megegyeznek X attribútumain.

  • Adjuk hozzá a tablóhoz azokat a sorokat, amelyeket az attribútumaihoz tartozó értékek felcserélésével kapunk.
Célok
  • Az ellenőrzésekor akkor nyertünk, ha a megfelelő változók -hez tartozó minden oszlopban egyenlőek.

  • akkor győztünk, ha sikerül egy olyan sort kigenerálni, ami az eredeti két sorból keletkezik értékeinek felcserélésével.

Végjáték
  • Használjuk az összes FF-et és TÉF-et, amíg bármiféle változtatás történhet.
  • Ha nyertünk, nyertünk.
  • Ha nem, egy ellenpéldát kaptunk.
    • A kapott előfordulás az összes előre megadott függőséget teljesíti.
    • Az eredeti két sor megsérti a kikövetkeztetendő függőséget.

TÉFek vetítése

  • Le kell tudnunk vetíteni megadott függőségeket 2 reláció sémára
  • Legrosszabb eset: ki kell próbálnunk minden lehetséges FF-et és TÉF-et a felbontott relációkra
  • Chase teszt alkalmazása; Cél egy TÉF ellenőrzésénél: olyan sor előállítása a tablóban, amely indexeletlen betűket tartalmaz a felbontott reláció oszlopaira

Egyed kapcsolat modell

  • Egyed kapcsolat modellekkel adatbázissémát vázolhatunk fel.
  • A főbb részek felvázolásával hatékonyabb lehet egy működő adatbázist.

Egyedhalmazok

  • Egyed (entity)
  • Egyedhalmaz
    • Az objektum-orientált nyelvek osztály fogalmához hasonló
  • Attribútum
    • Atomi értékűek, nem rekordok, tömbök

Diagrammok

  • Az egyed kapcsolat diagramban:
    • egyedhalmaz: téglalap
      • alosztályok: háromszög (nincs töbszörös öröklés)
    • attribútum: ovális
      • kulcs(ok): aláhúzás
    • sok-sok, sok-egy, egy-egy kapcsolat (rombusz)
    • kapcsolathalmaz
    • ezek össze vannak kötve

Források

Egyed-kapcsolat modell befejezése, objektum-relációs adatbázisok elkezdése

Egyed-kapcsolat tervezési technikák

  1. Redundancia elkerülése
  • helypazarlás
  • növeli az inkonzisztencia veszélyét
  1. A gyenge egyedhalmazok óvatos használata
  • jobb lehetőség lehet egyedi azonosítókat bevezetni (pl.: rendszám)
  • amikor ez nem lehetséges, akkor érdemes gyenge egyedhalmazokhoz fordulni
  1. Ne használjunk egyedhalmazt, ha egy attribútum éppúgy megfelelne a célnak
  • egy egyedhalmaznak többnek kell lennie mint egy egyszerű név, vagy tulajdonság, azaz legalább egy nem kulcs attribútumának kell lennie.
  • Vagy a "sok" végén szerepel egy sok-egy kapcsolatnak

Egyed-kapcsolat diagramok átírása relációsémává

  • Egyedhalmaz reláció
    • Attribútumok attribútumok
    • relációk összevonhatók, ha
      1. Az egyedhalmazból kapott reláció
      2. valamint azon sok-egy kapcsolatok relációi, melyeknél az a "sok" oldalon szerepel
    • Egy gyenge egyedhalmazból kapott relációnak a teljes kulcsot tartalmaznia kell, valamint a saját, további attribútumokat.
      • A támogató kapcsolatot nem írjuk át, redundancióhoz vezetne.
  • Kapcsolat relációk, melyeknek az attribútumai csak:
    • az összekapcsolt egyedhalmazok kulcs-attribútumai
    • és a kapcsolat attribútumait tartalmazzák
  • Egyed alosztályok
    1. objektumorientált
    • a "szülő" attribútumait is tároljuk az alosztályban
    • pl.: Teák(név, gyártó) Gyógyteák(név, gyártó, szín)
    1. null értékek használata
    • minden attribútumot tárolunk, de csak egy reláció van
    • ami az adott egyedre nem releváns, oda NULL értéket helyezünk
    1. E/K style
    • pl.: Teák(név, gyártó), Gyógyteák(név, szín)

Objektum-relációs adatbázisok

Relációs és O-O modell egyesítése

  • Az O-O modell több érdekes adattípust támogat - nem csak egyszerű állományokat
  • A relációs modell magas szintű lekérdezéseket támogat
  • Objektum-relációs adatmodell egy olyan kísérlet, amely mindkét világból a legjobbat szeretné nyújtani

Reláció objektumreláció

  • A reláció alapvető fogalom marad, de
  • Attribútumokhoz szerkesztett struktúrált típusok
  • Metódusok
  • Sorok azonosítói
  • Hivatkozások

Beágyazott relációk

  • Egy reláció attribútumának típusa nem csak atomi típus lehet, hanem pl. egy relációséma is
  • Rekurzív definíció
    • Kiindulás: atomi típus
    • Indukció: reláció típusa séma egy vagy több attribútumnévvel és hozzátartozó típussal, az utóbbi lehet séma is
  • Az atomi típusokat általában nem jelöljük külön, de a séma típusú attribútumot annak nevével és zárójelben a sémához tartozó attribútumok zárójelezett listájával adjuk meg
    • Pl. Rel1(Attr1, Attr2(Attr2A, Attr2B), Attr3), ahol Attr2(Attr2A, Attr2B) egy relációséma

Források

9. Objektum-relációs adatbázisok

Hivatkozások

  • Kell, hogy egy objektumra több hejről tudjunk hivatkozni annélkül, hogy többször eltárolnánk (redundancia csökkentése inkonzisztencia elkerülése).
  • Újabb indukciós szabály: egy attribútum típusa egy adott sémájú sorra történő hivatkozás vagy adott sémájú sorokra történő hivatkozási halmaz is.
  • Jelölés:
    • ha attribútum típusa egy relációsémájú sorra történő hivatkozás
    • ha attribútum tíousa egy séma soraira vonatkozó hivatkozási halmaz alakban jelenik meg.

Felhasználó által definiált adattípus

  • Egy O-O osztály definíciója, amely egy adatszerkezet és metódusai.

    • Azonos "típusú" objektumok egy osztályt definiálnak
    • Viselkedés: metódusok halmazával kifejezve, amelynek az osztályhoz tartozó objektumokon hajthatóak végre
  • Használati módok:

    1. Sortípus, vagyos egy reláció, mint adattípust kezelünk
    2. Egy reláció attribútumának a típusa
CREATE TYPE <typename>
AS OBJECT (<list of attribute pairs>);
  

Hivatkozások UDT-kre

  • Ha egy UDT, akkor a -re történő hivatkozás típusa.
  • Ezt OID-nek is hívják O-O rendszerekben
  • Az OID élete végéig azonosít egy objektumot.
  • Azonban az OID-től eltérően REF látható, bár általában nehezen értelmezhető.

UDT-k mint sortípusok

  • Egy relációs táblát egy sortípus segítségével mint sémával lehet definiálni, az elemeinek felsorolása helyett.
  CREATE TABLE <table name> OF <typename>;

UDT-k, mint oszloptípusok

  • UDT lehet egy attribútum típusa
  • Akár egy UDT deklarációban, vagy egy CRATE TABLE utasításban, az UDT típus neve úgy használható mint az attribútum típusa.

Metódusok

  • Az osztályok többek mint adatszerkezetek, lehetnek metódusaik.
  • A metódusokat a CREATE TYPE-ban deklaráljuk.
  • Definiálhatjuk a CREATE TYPE BODY utasításban
CREATE TYPE BODY <typename> AS
  <method definitions = PL/SQL method definitions, using "MEMBER FUNCTION" in place of "PROCEDURE">
  END;

Rendező metódusok (ORACLE)

  • Bármilyen UDT típusra bármelyik metódust rendező metódusnak deklarálhatjuk.
  • A rendező metódusok visszatérő értéke <0, =0, vagy >0 lehet, ahogy a SELF objektumhoz viszonyítva az argumentum értéke <, =, vagy >

Példa:

CREATE TYPE BODY TeázóTípus AS
  ORDER MEMBER FUNCTION
    before(teázó2 TeázóTípus) RETURN INT IS
  BEGIN
    IF SELF.név < teázó2.név THEN RETURN –1;
    ELSIF SELF.név = teázó2.név THEN RETURN 0;
    ELSE RETURN 1;
    END IF;
  END;
END;

Oracle beágyazott táblák

  • Megengedi, hogy a sorok egyes komponensei teljes relációk legyenek.
  • Ha egy UDT, létrehozhatunk egy típust, amelynek az értékei relációk, amelyeknek a sortípusa viszont : CREATE TYPE S AS TABLE OF T;

Beágyazott relációk eltárolása

  • Oracle valójában nem tárolja el a beágyazott relációkat külön relációkként – még ha így is tűnik.
  • Ehelyett, egy reláció van, amelyben egy attribútumra az összes beágyazott táblázatot és azok összes sorát eltárolja.
  • Deklaráció a CREATE TABLE-ben: NESTED TABLE A STORE AS R;

Források

XML séma

Félstruktúrált adat

  • Fán alapuló adatmodell
  • Motiváció: adatok rugalmas megjelenításe, dokumentumok megosztása rendszerek és adatbázisok között.

Gráf

  • Pontok = objektumok.
  • Az élek címkéi tulajdonképpen az attribútumnevek, kapcsolatok.
  • Az atomi értékek a levelekben tárolódnak.

XML

  • Extensible Markup Language
  • A dokumentum deklarációval kezdődik, amit egy speciális <?xml ... ?> tag határol.
  • Tagek: nyitó, záró, egymásba ágyazott tagek (case sensitive)
  • Jól formált XML: megengedi, hogy önálló tageket vezessünk be.
    • Nem hiányzik a deklaráció
    • Minden nyitó tagnek megvan a záró párja
    • Nincs átfedés az egymásba ágyazott tagek között
    • Egyetlen gyökérelem van
  • Valid XML: illeszkedik az előre megadott sémára: DTD vagy XML séma.

DTD felépítése

  • Document Type Definition
<!DOCTYPE gyökér elem [
<!ELEMENT elem név(összetevők)>
. . . további elemek . . .
]>
  • ELEMENT: egy-egy elem leírása az elem nevét és zárójelek között az alelemek megadását jelenti. (sorrend, multiplicitás), a levelek (szöveges elemek) típusa (#PCDATA)

  • Elem leírások:

    • Az alelemek a felsorolás sorendjében kell, hogy kövessék egymást
    • Egy elemet a felsorolásban egy további szimbólum követhet megadva a multiplicitást (*,+,?)
    • A | szimbólum jelentése: vagy
  • Attribútumok:

    • Az XML-ben a nyitó tag-ek mellett szerepelhetnek attribútumok.
    • Egy DTD-ben, <!ATTLIST E A1 type1 value1 A2 type2 value2...> az taghez tartozó attribútumokat adja meg.
    • Mindegyik attribútumhoz meg kell adni, hogy mi legyen a típusa, és mi legyen igaz az értékére.
  • ID és IDREF attribútumok:

    • ID: <E A = "xyz"> - elem egy attribútuma, aminek típusa ID$
    • IDREF: Egy $F$ elem az IDREF attribútum segítságável hivatkkozhat egy másik elemre annak ID attribútumán keresztül (IDREFS attribútummal tövvre is)

XML séma felépítése

  • Az XML sémák segítségével szintén XML dokumentumok szerkezetét adhatjuk meg. Itt több megszorítást lehet előírni, mint a DTD-k esetén.
  • Az XML séma maga is egy XML dokumentum.
  • xs:element:
    1. name = a definiált elem neve
    2. type = az elem típusa
    • Lehyet XML séma típus, pl.: xs:string
    • vagy egy olyan típus, amit az adott XML sémában deklaráltunk
  • Összetett típusok:
    • létehozás: xs:complexType
      • a name attribútummal nevet adhatunk ennek a típusnak
    • az xs:complexType`` egy tipikus aleleme az xs:sequence, amihez xs:element``` elemek egy sorozata tartozik
  • xs:attribute:
    • elemek használatával az összetett tpuson belül a típushoz tartozó elemek attribűtumait adhatjuk meg
    • az xs::attribute elem attribútumai:
      • name és type
      • use = "required" | "optional"
  • Elem megszorítások:
    • az xs:simpleType segítségével felsorolásokat adhatunk meg és az alaptípusra vonatkozó megszorításokat.
    • name attribútuma van és xs:restriction aleleme
  • xs:restriction
    • a base attribútum adja meg, hogy melyik egyszerű típusra vonatkozik (pl.: xs:integer)
    • {min, max}{Inclusive, Exclusive} a nény attribútum használatával alsó és felső korlátokat adhatunk meg.
    • xs:enumeration alelem, a value attribútum után megadhatjuk a felsorolás elemeit.
  • Kulcsok:
    • Az xs:element elemhez tartozhat xs:key alelem.
    • Jelentése: ezen az elemen belül, minden elem, ami egy adott szelektor ösvényen keresztül elérhető, egyedi értékekkel kell, hogy rendelkezzen a megadott mezőonek kombinációin (alelem, attribútum)
  • Idegen kulcsok:
    • A xs:keyref alelem az xs:element elemen belül előírja, hogy ezen az elemen belül bizonyos értékek, melyeket ugyanúgy a szelektor és mezők használatával adhatunk meg, egy kulcs értékei között kell, hogy szerepeljenek.

Keretrendszer

  1. Információintegráció: A különböző helyekről származó adatbázisokat úgy üzemeltetni, mintha egységes egészet alkotnának.
  2. Félig-strukturált adat: Viszonylag új adatmodell, amely segít megbirkózni az adatintegráció problémájával.
  3. XML: Szabványos nyelv a félig-strukturált adatok leírására.

Információintegrációs probléma

  • Egymáshoz kapcsolható adatelemek sok helyen léteznek és elvileg együttműködésre alkalmasak volnának:
  • De a különböző adatbázisok több tekintetben különböznek:
  1. Adatbázis modellek (relációs, objektum-orientált, NoSQL, dokumentum stb.)
  2. Séma (normalizált, nem normalizált)
  3. Szakkifejezések: tanácsadó alkalmazott-e? Visszavonult nyugdíjas-e? Alvállalkozó?
  4. Konvenciók (méter kontra láb [metrikus (SI, CGI), birodalmi].

Két megközelítés az integrációra

  1. Adattárház: Az adatforrásokról egy központi másolatot készít, és egy közös adat sémává transzformálja.
  • Az adatokat naponta, hetente frissítik, de ennél nem szabad nagyobb pontosságot megcélozni.
  1. Mediáció, közvetítés: Az összes adatforrásra egy nézetet kell létrehozni, mintha egy integrált rendszer részei volnának:
  • A nézetre vonatkozó lekérdezést úgy lehet megválaszolni, hogy a lekérdezést az egyes adatforrások szakkifejezéseire fordítják le és azután kérdezik le az eredeti adatforrásokat

Források

XML lekérdezőnyelvek

Az XPath/XQuery adatmodell

  • A relációk megfelelője ebben a környezetben
  • Ez azt jelenti, hogy a bemenetet, a köztes lépések eredményeit és a végeredményt is tételek listájaként kezeljük.
  • Egy tétel lehet:
    1. egyszerű érték
    2. csomópont

A csomópont fő típusai

  1. A dokumentum-csomópontok a teljes dokumentumot reprezentálják
  • A doc(url) parancs hatására jön létre
  • Minden XPath (és XQuery) lekérdezés hivatkozik egy dokumentum-csomópontra
  1. Elemcsomópontok: a tagek és a közöttük lévő dokumentumrészlet
  2. Attribútumok: a nyitó tagekben szerepelnek és ott kapnak értéket

Utak az XML dokumentumban

  • Az XPath segítségével az XML dokumentumokat járhatjuk be. Más szóval utakat adhatunk meg.
  • Az utak mindig tételek egy listáját választják ki.

Út kifejezések

  • Egyszerű formájában az utak perjel és tagek sorozatából állnak. A kifejezés perjellel kezdődik.
    • Példa: /teázók/teázó/ár
  • Informális jelentés: a dokumentum csomópontból kiindulva balról-jobbra haladva kövessük a tageket sorra.
  • Attribútumok az utakban: @-jel jelöli

Utak, melyek akárhol kezdődhetnek

  • Ha az út a dokumentum pontból indul, akkor a //X útkifejezés megtalálja az összes X gyerekelemet a beágyazottság bármely szintjén, és visszaadja abban a sorrendben, ahogy az a dokumentumban megjelenik,
  • illetve ha ez a útkifejezés folytatódik: //X/…, akkor bármely olyan részelemből fog indulni, aminek a tagje X.
  • Wildcard: *-karakter

Szűrési feltétel

  • A tageket feltételek követhetik.
  • Ilyenkor csak azok az útkifejezésre illeszkedő utak kerülnek be az eredménybe, melyek a feltételt is kiekégítik.

Tagek atomi értékű törzsének kiválasztása:

  • Ehhez a text() függvényt kell használni
  • A hivatalos XPath specifikációban [text()] kifejezést kell írni, a text() függvény igazzal tér vissza, ha a tétel atomi érték.

Tengelyek:

  • Általánosan: az útkifejezésekben minden egyes lépésnél tengelyekkel (axes) adhatjuk meg a következő lépésnél feldolgozandó pontok listáját.
  • A default tengely a child:: – ami az összes gyermekét veszi az aktuális pontoknak.

XQuery

  • Az XQuery egy SQL-hez hasonló lekérdezőnyelv, ami XPath kifejezéseket használ.
  • Ugyanúgy a tételek listája adatmodellt használja.
  • Az XQuery egy funkcionális nyelv.

Tételek listája

  • Az XQuery-ben előfordulhat, hogy listák listája generálódik.
  • Az ilyen listákat a rendszer "sima" listává alakítja át. (flatten)

FLWR kifejezések

  1. Egy vagy több for és/vagy let záradék.
  2. Ezek után opcionálisan egy where záradék.
  3. Végül egy return záradék.
  • Mindegyik for egy ciklust generál.
  • a let a cikluson belüli hozzárendeléseket adja meg.
  • Minden iterációjánál a beágyazott ciklusnak, ha van ilyen, ki kell értékelni a where záradékot.
  • Ha a where záradék IGAZ, a return záradéknak megfelelő értéket a végeredményhez kapcsoljuk.

FOR záradék

  • for <változó> in <kifejezés>, . . .
  • A változók $ jellel kezdődnek.
  • A for változója egy ciklusban sorra bejárja a kifejezés eredményének összes tételét.
  • A for után megadott részek tehát minden egyes tételre végrehajtódnak egyszer.

LET záradék

let <változó> := <kifejezés>, . . .

  • A változó értéke tételek listája lesz, ez a lista a kifejezés eredménye.
  • A let záradék hatására nem indul el egy ciklus; a for záradék hatására igen.

Order-By záradék

  • Az FLWR valójában FLWOR, ahol egy order-by záradék előzheti meg a return záradékot.
  • Alakja: order by <kifejezés>
  • A kifejezés a változók minden hozzárendelésére kiértékelődik.
  • A végeredmény listájának sorrendjén változtat.

Predikátumok

  • A feltételekben a "létezést" követeljük meg.
  • Példa: ```/teázók/teázó[@név]`` jelentése "az összes olyan teázó, aminek létezik neve."
  • Példa: /teázók/tea[@árulja = ”JoeTeázója”] azon teázók listáját adja vissza, melyeket Joe teázójában megkaphatunk.

Az elemek adatainak kinyerésére

  • Tegyük fel, hogy elemek értékeit szeretnénk összehasonlítani.
  • Az $E$ elem értékét a data függvény használatával kaphatjuk meg: data(E).

Ismétlődések kiszűrése

  • Használjuk a distinct-values függvényt, aminek a paramétere: elemek listája.
  • Finomság: a függvény a tagek nélkül veszi az értékeket és ezek szöveges értékét hasonlítja össze.

Halmazműveletek

  • A union, intersect, except itt is alkalmazhatóak pontok listájára.
    • A jelentés hasonló SQL-beli jelentéshez.
    • Az ismétlődések itt is törlődnek.
    • Az eredmény elemei dokumentum sorrendben jelennek meg.

Összesítések

  • Összesítő függvények: count, sum, max, min, avg itt is megvannak
  • Ezek bemenete tételek listája
  • Ez lehet üres lista is, viszont ennek a kezelésében már eltérő viselkedést mutatnak

Összekapcsolások

  • Az XQueryben össze lehet kapcsolni két dokumentumot
  • Változók kellenek a megfelelő dokumentumokra
  • A for záradék kell egy dokumentum elemeinek előállítására

Források

12. Extra - Analitikus adatfeldolgozás

  • Döntéstámogató rendszerek

    • Kevesebb, de kölcségesebb kérések (OLAP kérések)
  • Bitmap indexek

    • a dimenziótáblák mindegyik olyan attribútumára, amelyeket várhatóan részt fognak venni egy keresésben. (pl.: minden gyártóra a Tea relációban), eg bitvektor létrehozása, amely megmondja, hogy mey sorok tartalmazzák ezt az értéket
  • Materializált nézetek:

    • olyan nézetek, amelyek több lekérdezés megválaszolásához hasznosak magában az adatbázisban eltárolják

Adatbázisok I. gyakorlat

Alapadatok

Idő: Kedd, 16:00 - 18:00
Helyszín: Északi Tömb 7.15 (PC11)
Oktató: Varga Dániel, vargadaniel@inf.elte.hu
Csoport: 10

Értékelés

  • Két ZH
    • min 40%
    • egyet lehet javítani (vagy rontani)
  • Folyamatos számonkérés, minden gyakorlaton egy feladat
    • 10-ből 7-nek meg kell lennie
  • Pluszpontok - ZH-khoz adódik hozzá

Források

1. Gyakorlat

Alap SQL kifelyezések: SELECT, FROM, WHERE, CREATE TABLE.

Források

2. Gyakorlat

Otthonról csak tunel-en keresztül lehet elérni az adatbázisokat.

Több SQL szintaxis elemeket ismertünk meg

  • LIKE
  • IN
  • BETWEEN
  • AS
  • DISTINCT
  • UNION
  • INTERSECT
  • MINUS
  • ORDER BY

Relációs algebra bevezetés(lsd.:előadás)

Források

3. Gyakorlat

Összekapcsolások SQL-ben és relációs algebrában.

Források

4. Gyakorlat

Relációs algebra feladatmegoldás.

Otthoni plusz pont

Relációs algebrában: Ki az a dolgozó akinek legnagyobb fizetése?

Források

5. Gyakorlat

SQL gyakorlás, új függvények

Források

6. Gyakorlat

Csoportosítás, alkérdés, kiterjesztett relációs algebra

Források

7. Gyakorlat

Alkérdések, DML, DDL

Források

8. Gyakorlat - ZH

9. Gyakorlat

Források

10. Gyakorlat

PL/SQL alapok

Források

Elmaradt óra

Ez az óra elmaradt, és nem tartottak pótló órát.

12. Gyakorlat

Kurzor, PL/SQL kollekciók

Analízis II. (F) előadás

Alapadatok

Idő: Szerda, 8:00 - 10:00
Helyszín: Déli Tömb 0-803 Szabó József előadó
Oktató: Szili László
Csoport: 1

Értékelés

  • Írásbeli vizsga
    • 15 kérdés: definíciók / tételek
      • min 8 pont
    • 2 tétel megfogalmazása és bizonyítása
      • legalább az egyik kimondása és bizonyítása megfelelő.
    • Ha megvan a 2-es, szóban lehet javítani

Források

Differenciálszámítás I.

Emlékeztető a függvény határértékről

Most a legfontosabb határérték végesben vett véges határérték lesz.

Határértéket torlódási pontban értelmezünk.

Derivált

Motiváció

  1. Függvények töréspontjának elemzése
    • Szelő meredeksége:
    • Ha , akkor a fügvvény deriválható pontban.
  2. Pillanatnyi sebesség

Belső pont

Tegyük fel, hogy Az pont az halmaz belső pontja, ha

Az sziombólummal jelöljük az halmaz belső pontjainak halmazát.

Derivált definíciója

Az függvény az pontban differenciálható, ha létezik és véges a határérték.

Ezt a határértéket nevezzük az függvény pontbeli deriváltjának. ()
Ennek létezésének tényét következőképp fogjuk jelölni:

A folytonosság és a deriválhatóság kapcsolata

Tegyük fel, hogy és ekkor:

  • Az állítás fordítva nem igaz.

Az érintő fogalma

Az függvény grafikonjának az pontban van érintője, ha . Az függvény grafikonjának pontbeli érintőjén az egyenletű egyenest értjük.

Deriválási szabályok

  • , ha
  • , ha

Inverz függvény deriváltja

Legyen egy nyílt intervallum, és . Tegyük fel, hogy:

  • szigorúan monoton és folytonos az intervvalumon,
  • valamilyen pontban és

Ekkor az függvény deriválható a pontban, és

Hatványsor összegfüggvényének deriváltja

Legyen és . Tegyük fel, hogy hatványsor konvergenciasugara pozitív, és jelölje az összegfüggvényt: Ekkor minden pontban és

Derivált függvény

Ha és , akkor az

függvényt az deriváltfüggvénynek nevezzük, és az szimbolummal jelöljük.

Források

Differenciálszámítás II. és függvénytulajdonságok kapcsolata a deriválttal I.

Egyoldali pontbeli deriváltak

Vannak olyan esetek, amikor a differenciálhányados létezését a bal és a jobb oldali határértékek egyezésével szükséges vizsgálni.

Legyen és olyan pont, hogy . Azt mondjuk, hogy az függvény jobbról deriválható az pontban, ha létezik és véges a határérték.

Ezt a határértéket az szimbólummal jelöljük, és az függvény jobb oldali deriváltjának nevezzük.

A bal oldali deriváltat pontban hasonlóképp értelmezzük.

Magasabb rendű deriváltak

Egy függvényt többször is deriválhatunk (rekurzió).

Legyen és . Azt mondjuk, hogy kétszer deriválható az pontban, ha

  • , és
  • az deriváltfüggvény deriválható -ban, azaz

Legyen ekkor az függvény -beli második deriváltja.

Legyen és , és tegyük fel, hogy valamely esetén létezik az -gyel jelölt -edik deriváltfüggvény. Azt mondjuk, hogy -szer deriválható az pontban (jelölése: ), ha

  • , és
  • az deriváltfüggvény deriválható -ban, azaz

Legyen ekkor az függvény -beli -edik deriváltja.

Leibniz-szabály

Ha valamilyen esetén , akkor

  • és
  • és

Lokális szélsőértékek

Az függvénynek az pontban lokális maximuma van, ha

Ekkor az pontot lokális maximumhelyének nevezzük, az függvény-érték pedig a függvény lokális maximuma.

A lokális minimumot hasonlóképp definiálhatjuk.

A lokális szélsőértékre vonatkozó elsőrendű szükséges feltétel

Tegyük fel, hogy és

  • valamilyen -ben
  • -nek -ban lokális szélsőértéke van

Ekkor

Az függvénynek az stacionárius pontja, ha és

A differenciálszámítás középértéktételei

Rolle-féle középértéktétel

Legyen és . Ekkor

Cauchy-féle középértéktétel

Legyen és . Ekkor

Lagrange-féle középértéktétel

A Rolle-féle középértéktétel ezen tétel speciális esete.

Legyen és . Ekkor

Deriváltak egyenlősége

Legyen és .

  1. Tegyük fel, hogy és . Ekkor

  1. Tegyük fel, hogy és . Ekkor

Monotonitás

Az egyszerűség kedvéért csak intervallumon vizsgáljuk.

Az első derivált előjeléből következtethetünk a monotonitásra.

A monotonitás és a derivált kapcsolata

Legyen egy nyílt intervallum. Tegyük fel, hogy . Ekkor

A lokális szélsőértékre vonatkozó elégséges feltételek

A lokális szélsőértékre vonatkozó elsőrendű elégséges tétel

Legyen és . Tegyük fel, hogy

  • egy pontban
  • az deriváltfüggvény előjelet vált -ben.

Ekkor:

  1. Ha az függvény a pontban negatív értékből pozitív értékbe megy át, akkor az függvénynek lokális minimumhelye.
  2. Ha az düggvény a pontban pozitív értékből negatív értékbe megy át, akkor az függvénynek lokális maximumhelye.

A lokális szélsőértékre vonatkozó másodrendű elégséges tétel

Legyen és . Tegyük fel, hogy

  • kétszer deriválható egy pontban, azaz

Ekkor lokális szélsőértékhelye az függvénynek:

  1. Ha , akkor -nek -ben lokális minimuma van
  2. Ha , akkor -nek -ben lokális maximuma van

Források

Függvénytulajdonságok kapcsolata a deriváltal II.

Konvex és konkáv függvények

Legyen és egy intervallum. Ha esetén igaz az, hogy

  • ha , akkor azt modnjuk, hogy az függvény konvex az intervallumon.
  • ha , akkor azt modnjuk, hogy az függvény konkáv az intervallumon.

Szigorú egyenlőtlenségek esetén szigorúan konvex/konkáv függvényekről beszélünk.

A konvexitás-konkávitás és a második derivált kapcsolata

Legyen egy nyílt intervallum. Tegyük fel, hogy . Ekkor

  1. konvex [illetve konkáv] -n [illetve ] -n
  2. ha [illetve ] -n szigorúan konvex [illetve sziorúan konkáv] -n

Inflexiós pont

Legyen egy nyílt intervallum és tegyük fel, hogy . Ekkor azt mondjuk, hogy a pont az függvény inflexiós pontja, ha vagy fordítva.

Aszimptoták

Legyen és . Azt mondjuk, hogy az függvénynek van aszimptotikája ()-ben, ha elsőfokú függvény, amelyre

Ekkor az egyenletű egyenes az függvény asszimptotikája ()-ben.

Tétel

Legyen . Az függvénynek akkor és csak akkor van asszimptotikája ()-ben, ha léteznek és vegesek a következő határértékek:

Ekkor az egyenes az függvény asszimptotikája ()-ben.

L'Hospital szabályok

0/0 esetben

Legyen , illetve . Ekkor

  • és

Végtelen/Végtelen esetben

Legyen , illetve . Ekkor

  • és

Teljes függvényvizsgálat

  1. Kezdeti vizsgálatok (Deriválhatóság, zérushelyek, előjelvizsgálat, paritás, periodicitás megállapítása)
  2. Lokális szélsőértékek ls monotonitási intervallumok
  3. Konvexitási intervallumok és inflexiós pontok
  4. Határértékek és aszimptoták
  5. A függvény grafikonjának felrajzolása

Források

Speciális függvények

Már elemzett speciális függvények

Analízis I tárgyból, már vizsgáltunk pár speciális függvényt, de a konvexitásukra a deriválás ismeretének hiányában nem tudtunk kitérni.

Exponenciális függvény

Az függvény szigorúan konvex -en, ha és . Ez abból következik, hogy minden esetén

Ha , akkor az lineáris függvény egyszerre konvex és konkáv -n, de nem szigorú értelemben.

Logaritmus függvény

A függvény szigorúan konkáv -n, ha , és szigorúan konvex -n, ha , hiszen minden esetén

  • , ha
  • , ha

Mivel , ha , illetve , ha .

Hatványfüggvény

Az függvény konvexitása is függ az értékétől.

Minden esetén

(x^{\alpa})^{\prime\prime} = (\alpha x^{\alpha - 1})^{\prime} = \alpha(\alpha - 1)x^{\alpha - 2}

Tehát az előjelén múlik a függvény konvexitása.

Ha vagy , akkor , és így az függvény konvex -n.

Ha , akkor , és így az függvény konkáv -n.

Ha vagy , akkor lineáris függvény, azaz egyszerre konvex és konkáv -n, de nem szigorú értelemben.

Trigonometrikus függvények

A sin és cos függvény

  1. Paritás: a függvény páratlan, és a függvény páros, azaz

  2. Addíciós képletek: minden esetén:

  1. Két szinusz és koszinusz összege szorzattá alakítható
  1. Minden esetén:

  2. Négyzetes összefüggés:

  3. Folytonosság: A és a függvény folytonos -en.

  4. szám értelmezése: legyen a függvény egyetlen zérushelye a intervallumon.

  5. Az addíciós tételből a következő kapcsolat adódik:

  6. Periodicitás: A és a függvény szerint periodikus.

  7. Differenciálhatóság: A és a függvény differenciálható -en és

Szinusz és koszinusz monotonitásáról és konvexitásáról szóló tétel

  1. -en, -n és szigorúan konkáv -n
  2. -n, szigorúan konkáv -en és szigorúan konvex -n

A szinusz függvény

  • -en, -en és -n
  • szigorúan konvex -n
  • inflexiós pont.

A koszinusz függvény

  • -n és -n

  • szigorúan konvex -en

  • szigorúan konkáv -en

  • szigorúan konvex -n

  • inflexiós pontok

A tangens és kotangens függvény

  1. páratlan függvény, azaz
  2. a függvény szerint periodikus
  3. a függvény zérushelyei:
  4. -en
  5. szigorúan konkáv -en
  6. szigorúan konvex -en
  7. inflexiós pont
  8. és

  1. páratlan
  2. szerint periodikus
  3. \arrowdown (0, \pi)-n
  4. szigorúan konvex -n
  5. szigorúan konkáv -n
  6. infleciós pont
  7. és

Trigonometrikus függvények inverzei

  1. folytonos -en
  2. deriválható -en és
  3. -en
  4. szigorúan konkáv -en
  5. szigorúan konvex -en
  6. inflexiós pont

  1. folytonos -en
  2. deriválható -en és
  3. -en
  4. szigorúan konvex -en
  5. szigorúan konkáv -en
  6. inflexiós pont

  1. folytonos és deriválható -en és
  2. -en
  3. szigorúan konvex -n
  4. szigorúan konkáv -en
  5. inflexiós pont
  6. aszimptota a -ben

  1. folytonos és deriválható -en és
  2. -en
  3. szigorúan konkáv -n
  4. szigorúan konvex -en
  5. inflexiós pont
  6. aszimptota a -ben
  7. aszimptota a -ben

Hiperbolikus függvények

  1. páratlan függvény
  2. folytonos és deriválható -en és
  3. -en
  4. szigorúan konkáv -n
  5. szigorúan konvex -en
  6. inflexiós pont

  1. páros függvény
  2. folytonos és deriválható -en és
  3. -en és -en
  4. szigorúan konvex -n
  5. abszolút minimumhely

  1. páratlan függvény
  2. folytonos és deriválható -en és
  3. -en
  4. szigorúan konvex -n
  5. szigorúan konkáv -en
  6. inflexiós pont
  7. aszimptota -ben

  1. páratlan függvény
  2. folytonos és deriválható -en és
  3. -en és -n
  4. szigorúan konkáv -n
  5. szigorúan konvex -en
  6. aszimptota -ben

Hiperbolikus függvények inverzei

Tétel

Források

Jegyzet - pdf

Taylor polinomok és Taylor sorok

Lineáris közelítés

Gyakori jelenség, hogy valamely problémánál fellépő függvénnyel dolgozva egyszerűbb és áttekinthetőbb eredményhez juthatunk, ha a függvény helyett egy másik, az eredetit "jól közelítő", de egyszerűbb típusú függvényt tekintünk. Az egyik legegyszerűbb függvénytípus az elsőfokú polinom (vagyis az függvény). Megmutatjuk, hogy egy függvény deriválhatósága az pontban éppen azt jelenti, hogy a függvény bizonyos értelemben "jól közelíthető" elsőfokú polinommal.

Legyen és . Ekkkor

Taylor polinomok

Ha a lineáris közelítés nem elég pontos, akkor magasabb fokszámú polinomokkal is próbál- kozhatunk. Jobbnak tűnik az típusú közelítés, ahol és egy legfeljebb -ed fokú polinom.

A továbbiakban feltételezzük, hogy és az függvény -szer deriválható az pontban. Ekkor értelmezhető az alábbi polinom.

Ha és , akkor a polinomot az függvény ponthoz tartozó -edik Taylor-polinómjának nevezzük.

A Taylor polinom úgy van kitalálva, hogy -dik deriváltja megegyezik a függvénx -fik deriváltjával az pontban.

Taylor formula

A Taylor-polinommal történő közelítés becsléséhez szükségünk lesz a következő állításra.

Legyen és tegyük fel, hogy Ekkor a fenti képlet jobb oldalán álló függvényt Lagrange-féle maradéktagnak nevezzük.

Taylor sorok

Egy adott függvényt vajon elő lehet-e állítani hatványsor összegfüggvényeként? Ha igen, akkor a függvény ismeretében hogyan lehet az együtthatókat meghatározni?

Ha és , akkor a hatványsort az függvény ponthoz tartozó Taylor sorának nevezzük.

Minden pozitív konvergenciasugárral rendelkező hatványsor összefüggvénye a Taylor sorával egyenlő a konvergenciahalmaz belsejében.

Elégséges feltétel függvények Taylor sorral történő előállítására

Legyen , és tegyük fel, hogy valós szám, amire teljesül. Ekkor -nek az ponthoz tartozó Taylor sora a halmazon előállítja az függvényt, vagyis fennáll a következő egyenlőség:

Források

Integrálszámítás I

A határozatlan integrál fogalma

Legyen adott nyílt intervallumon értelmezett függvény.
Azt mondjuk, hogy a függvény primitív függvénye, ha és

Tétel

Legyen nyílt intervallum és adott függvény.

  1. Ha az függvénynek egy primitív függvénye, akkor minden esetén a függvény is primitív függvénye -nek
  2. Ha primitív függvényei az függvénynek, akkor azaz a primitív függvények csak konstansban különböznek egymástól.

Ennél a tételnél fontos, hogy intervallumon legyen értelmezve!

Az nyílt intervallumon értelmezett függvény primitív függvényeinek a halmazát határozatlan integráljának nevezzük, és így jelöljük: Ilyenkor -re az integrandus, illetve az integráló függvény elnevezéseket használjuk.

Határozatlan integrálra vonatkozó szabályok

A határozatlan integrál linearitása

Legyen nyílt intervallum.
Ha az függvényeknek létezik primitív függvénye, akkor tetszőleges mellett -nek is létezik primitív függvénye és

Az első helyettesítési szabály

Legyenek nyílt intervallumok és függvények.
Tegyük fel, hogy és az függvénynek van primitív függvénye. Ekkor az függvénynek is van primitív függvénye és

Parciális integrálás

Legyen nyílt intervallum. Tegyük fel, hogy és az függvénynek létezik primitív függvénye -n. Ekkor az függvénynek is van primitív függvénye ls

A második helyettesítési szabály

Legyenek nyílt intervallumok.
Tegyük fel, hogy -n
és az függvénynek van primitív függvénye.
Ekkor az függvénynek is van primitív függvénye és

Források

Integrálszámítás II

Határozott integrál

Tegyük fel, hogy és egy korlátos függvény. Azt mondjuk, hogy Riemann-integrálható az intervallumon, ha Ekkor az számot az függvény intervallumon vett Rienmann-integrálnak nevezzük. Az intervallumon Riemann-integrálható függvények halmazát az szimbólummal fogjuk jelölni.

Ha a korlátos függvény Riemann-integrálható az intervallumon és , akkor az grafikonja alatti síkidomnak van területe, és a területét így értelmezzük:

A határozott integrál tulajdonságai

  • Legyen és tegyük fel, hogy az halmaz véges. Ekkor

    1. ha , akkor
  • Legyen . Tegyük fel, hogy az függvény folytonos.
    Ekkor , azaz minden folytonos függvény integrálható ()

  • Legyen . Ha az függvény szakaszonként folytonos, akkor és

  • Tegyük fel, hogy . Ekkor

    1. minden esetén

    2. ha valamilyen állandóra fennáll az egyenlőtlenség, akkor függvény is integrálható az intervallumon.

  • Tegyük fel, hogy . Ekkor

    1. ha és , akkor
    2. , és

Intervallum szerinti additivitás

Legyen valós számok és korlátos függvény. Ekkor akkor és csak akkor, ha Ekkor

Az integrálfüggvény

Tegyük fel, hogy és . Az függvény az függvény pontban eltűnő integrálfüggvénynek nevezzük.

Az integrálfüggvény folytonossága

Legyen és a függvény pontban eltűnő integrálfüggvénye. Ekkor

Az integrálfüggvény deriválhatósága

Legyen és az függvény pontban eltűnő integrálfüggvénye. Tegyük fel, hogy olyan pont, amire teljesül.
Ekkor és

A határozott integrál kiszámítása

Legyen korlátos és zárt intervallum. A függvény az függvény egy primitív függvénye az intervallumon, ha

  • és

Newton Leibniz formula

Tegyük fel, hogy

  • és
  • az függvénynek van primitív függvénye az intervallumon Ekkor ahol az függvény egy primitív függvénye.

A határozott integrál alkalmazása

Ívhossz

Legyen és adott függvény. Azt mondjuk, hogy a függvénygrafikon rektifikálható (van ívhossza), ha Ezt a valós számot a szóban forgó függvénygrafikon ívhosszának nevezzük.

Legyen és tegyük fel, hogy Ekkor az függvény grafikonjának van ívhossza, és az egyenlő az határozott integrállal.

Forgástest térfogata

Legyen . Ekkor grafikonjának az tengely körüli megforgításával adódó forgástestnek van térfogata, és az egyenlő a integrállal.

Legyen és tegyük fel, hogy . Ekkor grafikonjának az -tengely körüli forgatásával adódó forgásfelületnek van felszíne, és értéke

Improprius integrálok

Legyen és . Tegyük fel, hogy minden esetén. Vezessük be a függvényt. Azt mondjuk, hogy függvény impropriusan integrálható, ha véges határérték. Ekkor az számot az improprius integráljának nevezzük.

Legyen és . Tegyük fel, hogy minden esetén. Azt mondjuk, hogy az függvény impropriusan integrálhatóm ha minden esetén és impropriusan integrálható. Ekkor legyen

Források

Többváltozós függvénytan I

Konvergencia az euklideszi térben

Az függvényt -beli sorozatnak nevezzük. Az helyettesítési érték a sorozat k-adik vagy k-indexű tagja. A tag sorszámát jelző szám a tag indexe.

Legyen . Azt mondjuk, hogy az euklideszi tér sorozata konvergens, ha Ha létezik, akkor az egyértelmű, és -t az sorozat határértékének nevezzük. Az sorozat divergens, ha nem konvergens.

Tétel

Legyen . Egy -beli sorozat akkor és csak akkor konvergens, ha a sorozat minden koordinátasorozata konvergens, és a határértéke a határvektor megfelelő koordinátája, azaz pontosan akkor ogaz, ha minden koordinátára

Cauchy féle konvergenciakritérium

Legyen Az euklideszi tér sorozata akkor és csak akkor konvergens, ha Cauchy-sorozat, azaz

Bolzano-Weierstrass kiválasztási tétel

Az euklideszi térben minden korlátos sorozatnak van konvergens részsorozata.

típusú függvények folytonossága

Azt mondjuk, hogy az függvény folytonos az pontban, ha

Folytonosságra vonatkozó átviteli elv

Legyen és . Ekkor

Tétel

Legyen és a \in \mathxal{D}_f. Ekkor ahol az függvény koordinátafüggvényei.

Weierstrass tétele

Legyen és tegyük fel, hogy

  1. korlátos és zárt halmaz az euklideszi térben
  2. Ekkor az függvénynek vannak abszolút szélsőértékhelyei, azaz \eixsts x_1 \in \mathcal{D}_f, \ \forall x \in \mathcal{D}_f : f(x) \leq f(x_1) \eixsts x_2 \in \mathcal{D}_f, \ \forall x \in \mathcal{D}_f : f(x_2) \leq f(x)

típusú függvények határértéke

Az függvények az pontban van határértéke, ha , hogy Ekkor -t a függvény pontbeli határértékének nevezzük.

A határértékre vonatkozó átviteli elv

Legyen és a \in \matcal{D}_f^{\prime}. Ekkor

Tétel

Tegyük fel, hogy és Ekkor

Források

9. Többváltozós függvények deriválása I

Parciális deriváltak typusú függvényekre

Tegyük fel, hogy f \in \R^n \to \R (n \in \N^+), \ a \in \ int\mathcal{D}_f és a kanonikus bázis -ben. Az függvénynek az -ban létezik az -dik változó szerinti parciális deriváltja, ha az valós-valós függvény deriválható a pontban. A valós számot az függvény pontbeli, -edik változó szerinti parciális deriváltjának nevezzük, és az alábbi szimbólumok valamelyikével jelöljük:

Iránymenti deriváltak típusú függvényekre

Legyen és . Tegyük fel, hogy egy egységvektor: . A függvénynek az pontban létezik a irányú iránymenti deriváltja, ha a valós-valós függvény deriválható a pontban. A valós számot az függvény pontbeli irányú iránymenti deriváltjának nevezzük, és a vagy a szimbólumokkal jelöljük.

Tétel

Tegyük fel, hogy , illetve az függvénynek léteznek a parciális deriváltjai egy környezetben, és ezek folytonosak az pontban. Ekkor az függvénynek az pontból induló tetszőleges egységvektor irányban létezik az iránymenti deriváltja, és ahol az úgynevezett gradiensvektor és egységvektor, azaz

A totális derivált típusú függvényekre

Az függvény totálisan deriválható az pontban, ha Ekkor az függvény deriváltmátrixa az pontban.

Tétel I

Tegyük fel, hogy és . Ekkor az deriváltmátrix egyértelműen meghatározott.

Tétel II

Tegyük fel, hogy és . Ekkor

Tétel III

Legyenek az függvények koordinátafüggvényei , ahol , illetve . Ekkor Továbbá , azaz az mátrix -edik sora.

A deriváltmátrix előállítása

Legyen , ahol az függvény -edik koordinátafüggvénye. Ha , akkor a Jacobi-mátrix

Elégséges feltétel a totális deriválhatóságra

Legyen és . Tegyük fel, hogy az pontnak létezik olyan környezete, amelyre minden index esetén a következők teljesülnek:

  1. minden pontban
  2. a parciális deriváltfüggvény folytonos az pontban.

Ekkor az függvény totálisan deriválható az pontban.

A totálisan derivált és az iránymenti derivált kapcsolata

Tegyük fel, hogy és . Ekkor minden irányban vett iránymenti deriváltja létezik az pontban, és az úgynevezett gradiensvektor és egységvektor,azaz

Felület érintősíkja

Az függvény grafikonjának az pontban van érintősíkja, ha . Az érintősík egyenlete: amelynek egyik normálvektora:

Deriválási szabályok

Algebrai műveletekre vonatkozó deriválási szabályok

  • Ha és f,g \in \D{a}, akkor esetén
  • Ha , akkor az és az függvényekre az egyváltozós esethez hasonló deriválási szabályok teljesülnek.

Az összetett függvény deriválhatósága, láncszabály

Legyen . Ha és , továbbá és , akkor és

Források

Többváltozós függvények deriválása II

A gradiens vektor

Legyen és . Ekkor vektort gradiens vektornak nevezzük.

Magasabb rendű deriváltak

Az függvény kétszer deriválható az pontban, ha

  1. , hogy minden pontban és
  2. indexre

Ha az függvény kétszer deriválható az pontban, akkor az függvény pontbeli Hesse-féle mátrixa, ahol

Young tétel

Ha és , akkor

A Taylor-formula a Peano-féle maradéktaggal

Legyen és tegyük fel, hogy és . Ekkor van olyan feltételnek eleget tevő függvény, hogy

típusú függvények szélsőértékei

Azt mondjuk, hogy az függvénynek az ponban abszolút maximuma van, ha Ekkor az függvényértéket az abszolút maximumának nevezzük.

Azt mondjuk, hogy az függvénynek az pontban lokális maximumhelye van, ha van olyan környezet, hogy Ekkor az függvényértéket az függvény lokális maximumának nevezzük.

Elsőrendű szükséges feltétel a lokális szélsőértékre

Tegyük fel, hogy és Továbbá

  • és
  • az függvénynek az pontban lokális szélsőértéke ban Ekkor , azaz

Az pont az függvény stacionárius pontja, ha és

Másodrendű elégséges feltétel a lokális szélsőértékekre

Legyen és egy szimmetrikus mátrix. Ekkor a függvény az mátrix által meghatározott kvadratiks alaknak nevezzük.

Azt mondjuk, hogy az szimmetrikus mátrix, illetve a hozzá tartozó kvadratikus alak

  • pozitív definit, ha esetén
  • negatív definit, ha esetén

Tétel

Legyen és . Tegyük fel, hogy

  • az Hesse-féle mátrix pozitív (negatív) definit. Ekkor az függvénynek az pontban lokális minimuma (maximuma) van.

Másodrendű szükséges feltétel a lokális szélsőértékre

Azt mondjuk, hogy az szimmetrikus mátrix, illetve a hozzá tartozó kvadratikus alak

  • pozitív szemidefinit, ha esetén ,
  • negativ szemidefinit, ha esetén ,
  • indefinit, ha pozitív ls negatív értéket is felvesz

Tétel

Legyen és . Ha az függvénynek az pontban lokális minimuma (maximuma) van, akkor

  • az Hesse-féle mátrix pozitív (negatív) szemidefinit.

Sylvester-kritérium

Legyen n \in \N^+, \ A \in \R^{n \times \n} egy szimmetrikus mátrix és az által meghatározott kvadratikus alak. Jelölje az mátrix "bal felső sarokmátrixainak" a determinánsa. Ekkor az mátrix, illetve a kvadratikus alak

  • pozitív definit ha esetén
  • negatív definit ha esetén

Abszolút szélsőértékek

Legyen korlátos és zárt halmaz. Tegyük fel, hogy az függvény folytonos, illetve deriválható minden belső pontjában. Ekkor a legnagyobb (legkisebb) értékét vagy a halmaz határán veszi fel, vagy pedig egy olyan belső pontban, ahol teljesül minden indexre.

Források

Többváltozós függvények deriválása III

Az inverzfüggvény-tétel

Legyen nyílt halmaz és . Tegyük fel, hogy

  1. folytonosan deriválható -n
  2. az pontban

Ekkor

  1. lokálisan invertálható az pontban, azaz vannak olyan és nyílt halmazok, hogy az függvény bijekció (következésképpen invertálható)
  2. az inverz függvény folyamatosan deriválható -n és

Implicit függvények

Egyváltozós implicitfüggvény-tétel

Legyen nyílt halmaz és . Tegyül fel, hogy

  1. folyamatosan deriválható -n
  2. az pontban és

Ekkor

  1. van olyan környezet és nyílt halmaz -ben, hogy minden ponthoz létezik egyetlen , amelyre f(x, \varhi(x)) = 0 teljesül
  2. az így definiált függvény folytonosan deriválható -n és

Implicitfüggvény-tétel az általános esetben

Legyenek és nyílt halmazok , illetve . Tegyük fel, hogy

  1. folytonosan deriválható az halmazon
  2. az pontban és

Ekkor

  1. létezik -nak olyan környezet és nyílt halmaz, hogy minden ponthoz létezik egyetlen , amelyre
  2. az így definiált függvény folytonosan deriválhatü -n és

típusú függvények feltételes szélsőértékei

Legyen nyílt halmaz. Tegyük fel, hogy adott függvények és

Azt mondjuk, hogy az függvénynek a feltétel mellett az pontban

  • feltételes abszolút maximuma van, ha
  • feltételes lokális maximuma van, ha

Szükséges feltétel a feltételes lokális szélsőértékre

Tegyük fel, hogy

  1. nyílt halmaz és az függvényeknek léteznek a parciális deriváltjaik, és ezek folytonosak az halmazon (f,g \in \C^1(U))
  2. az pontban az függvénynek a feltételre vonatkozóan feltételes lokális szélsőértéke van.
  3. Ekkor can olyan valós szám (Lagrange-szorzó), hogy az Lagrange-függvénynek stacionárius pontja, azaz

Feltételes lokális szélsőértékre vonatkozó másodrendű elégséges feltétel

Tegyük fel, hogy

  1. nyílt halmaz és az függvényeknek léteznek másodrendű parciális deriváltjaik és ezek folytonosak az halmazon.
  2. az pontban a számmal teljesül a szükséges feltétel.

Tekintsül ezzel a \lamba_0 számmal az Lagrange-függvényt. Legyen

Ekkor

  • feltételes lokális maximumhely
  • feltételes lokális minimumhely

Források

Analízis II. (F) gyakorlat

Alapadatok

Idő: Hétfő, 10:00 - 12:00
Helyszín: Északi Tömb -1.62
Oktató: György Szilvia
Csoport: 1

Értékelés

  • 10 kisZH (definíció, tétel előadásból és órai/házi feladat)
    • max 40 pont
    • min 16
  • 2 ZH (ápr 6-7 és máj 25-26)
    • max 40 - 40 pont
    • min 11 pont
  • Megajánlott vizsgajegy:
    • ZH-kon tételek (min 5p)
    • Gyak jegy
    • kisZH 12p tételekre, definíciókra

Források

1. Gyakorlat

Deriválás definíciójával ekvivalens határérték

Derivációs feladatok

  • Deriválható-e egy adott függvény adott pontban?
    • Ha a függvény definíciója miatt adott pontban két határértéket kell vizsgálni, akkor csak akkor deriválható, ha jobbról és balról is van határértéke adott pontban, és ezek a határértékek megegyeznek.
  • Deriválás deriválási szabályokkal
  • Összetett függvények deriválása

Deriválási szabályok

  • , ha

Ajánlott házi feladatok

Feladatsor órai részéből:

    1. c,d
    1. c
    1. b,d
    1. c,d

Források

2. Gyakorlat

Feladatok

  • Egyenes érintője pontban.
  • Inverz függvény deriváltja pontban.
  • Inverz függvény deriváltfüggvénye.
  • Egyoldali pontbeli deriváltak.

Ajánlott házi feladatok

Feladatsor órai részéből:

    1. b
    1. c,d
    1. b

(a 6,7. feladatok nem ZH típusfeladatok)

Források

3. Gyakoralt

Feladatok

  • Monotonitási intervallumok megadása
  • Lokális szélsőértékek és szélsőértékhelyek
  • Abszolút szélsőértékek és szélsőértékhelyek

Ajánlott házi feladatok

    1. kiszámítása

Források

4. Gyakorlat

Feladatok

  • L'Hospital szabályok alkalmazása
    • Már tört alakban lévő függvények határértékeihez
    • Olyan függvényekre, melyeket tört formára kell előbb hozni
    • alakú függvények esetében
  • Konvex / konkáv intervallumok megadása és inflexiós pont

Új deriválási szabály

Ajánlott házi feladatok

    1. c, d: átalakítás nélkül, rögtön L'Hospotal szabállyal
    1. a, c

Források

5. Gyakorlat

Feladatok

  • Aszimptoták számítása
  • Teljes függvényvizsgálat
    • monotonitás
    • lokális/abszolút szélsőértékek
    • konvexitás, inflexiós pont
    • határértékek, aszimptoták
    • ábrázolás
  • Elemi függvények

Ajánlott házi feladadtok

  • Feladatsorokban látott deriválások elvégzése

Források

6. Gyakorlat

Feladatok

  • Lineáris közelítés
  • Taylor polinom
  • Taylor polinom hibabecslése

Ajánlott házi feladatok

    1. a: hibabecslés, c: -ra hibabecslés

Források

Elmaradt óra

Ez az óra elmaradt, és nem tartottak pótló órát.

8. Gyakorlat

Feladatok

  • Határozatlan integrál számítás
  • Határozatlan integrál számítás speciális esetekben

Ajénllott házi feladatok

  • (2 módszerrel)

Források

9. Gyakorlat

Feladatok

  • Határozatlan integrálok parciális integrálással
    • típus
    • típus
    • típus
  • Racionális törtek integrálása

Ajánlott házi feladatok

  • fs1 / 3) a
  • fs1 / 4) b
  • fs1 / 6) a, b

Források

10. Gyakorlat - elmaradt, pótlás várható

11. Gyakorlat

Feladatok

  • Parciális deriválás
  • Másodrendű parciális deriválás
  • Iránymenti deriválás
  • Totális deriválás

Ajánlott házi feladatok

  • Egyszerűsítés gyakorlás
  • Kihagyott feladatok

Források

12. Gyakorlat - nincs jegyzet

Tételbizonyítások

Bizonyítással kért tételek I.

  1. A folytonosság és a deriválhatóság kapcsolata
  2. A szorzatfüggvény deriválási szabálya
  3. A hányadosfüggvény deriválási szabálya
  4. Az inverz függvény deriválási szabálya
  5. A lokális szélsőértékre vonatkozó elsőrendű szükséges feltétel
  6. A Rolle-féle középértéktétel
  7. A Cauchy-féle középértéktétel
  8. A monotonitás és a derivált kapcsolata
  9. A konvexitás és a kétszeres derivált kapcsolata
  10. A L'Hospital-szabály a 0/0 esetben
  11. A deriválhatóság ekvivalens átfogalmazása lineáris közelítéssel
  12. A Taylor-formula a Lagrange-féle maradéktaggal
  13. Elégséges feltétel függvények Taylor-sorral történő előállítása

Bizonyítással kért tételek II.

  1. A határozatlan integrál linearitása
  2. A parciális integrálás szabálya
  3. A második helyettesítési szabály
  4. Az integrálfüggvény folytonossága
  5. Az integrálfüggvény deriválhatósága
  6. A Newton-Leibniz-formula
  7. Egy vektorsorozat és koordinátasorozatai konvergenciájának kapcsolata
  8. A deriváltmátrix egyértelműsége
  9. A deriváltmátrix előállítása
  10. A totális- és az iránymenti derivált kapcsolata
  11. típusú függvényekre vonatkozó elsőrendű szükséges feltétel a lokális szélsőértékre
  12. típusú függvényekre vonatkozó másodrensű elégséges feltétel a lokális szélsőértékre
  13. típusú függvényekre vonatkozó másodrendű szükséges feltétel a lokális szélsőértékre

Források

A folytonosság és a deriválhatóság kapcsolata

Kimondás

Tegyük fel, hogy és Ekkor

  1. ,
  2. Az állítás megfordítása nem igaz.

Bizonyítás

  1. Ha , akkor ez éppen azt jelenti, hogy .

  2. Van olyan folytonos függvény, amelyik egy pontban folytonos, de ott nem deriválható.
    Például az abszolút érték függvény az pontban.

Valóban , de , hiszen minden esetén ami , ha és , ha és így Ezért az függvény pontbeli differenciálhányadosa nem létezik.

A szorzatfüggvény deriválási szabálya

Kimondás

Tegyük fel, hogy és valamilyen pontban.
Ekkor

Bizonyítás

Nyilván , hiszen . Másrészt

A hányadosfüggvény deriválási szabálya

Kimondás

Tegyük fel, hogy és valamilyen pontban.
és
Ekkor

Bizonyítás

. Ha , akkor , ezért a feltétel miatt , hiszen a folytonos függvények előjeltartóak. Mivel , így feltételezhetjük, hogy sugara olyan kicsi, hogy a fentiek mellett is teljesül. Ekkor , és így Másrészt

Az inverz függvény deriválási szabálya

Kimondás

Legyen egy nyílt intervallum, és .
Tegyük fel, hogy

  1. szigorúan monoton és folytonos az intervallumon,
  2. valamilyen pontban és .

Ekkor az függvény deriválható a pontban és

Bizonyítás

Tufjuk, hogy ha szigorúan monoton, akkor invertálható és inverze is szigorúan monoton. Mivel egy nyílt intervallum, illetve szigorúan monoton és folytonos függvény, így is egy nyílt intervallum, ezért , illetve folytonos ennek az nyílt intervallum minden pontjában.

Legyen . Tudjuk, hogy és . Mivel szigorúan monoton, így egyértelmű, ezért alkalmazhatjuk az helyettesítést az alábbi határértékben, ahol , ha és ( folytonossága miatt).

hiszen és

A lokális szélsőértékre vonatkozó elsőrendű szükséges feltétel

Kimondás

Tegyük fel, hogy és

  1. valamilyen -ben,
  2. -nek -ban lokális szélsőértéke van.

Ekkor

Bizonyítás

Tegyük fel, hogy az pont lokális maximumhelye az függvénynek. Ekkor

Tekintsünk az függvény -hoz tartozó különbséghányados-függvényét:

Ha , azaz , akkor (vagyis ) miatt -ben szereplő különbséghányados nem pozitív. Mivel , ezért

Ha , azaz , akkor (vagyis ) miatt -ben szereplő különbséghányados nem negatív. Mivel , ezért

Azt kaptuk tehát, hogy és , ami csak úgy lehetséges, ha .

A bizonyítás hasonló akkor is, ha az pont lokális minimumhelye as függvénynek.

A Rolle-féle középértéktétel

Kimondás

Legyen és . Ekkor

Bizonyítás

Mivel , ezért a Weierstrass tételből következik, hogy

Két eset lehetséges

  • Ekkor állandó -n, így tetszőleges pontban .
  • , tehát

Ha , akkot az abszolút minimumhely az intervallumban van. Világos, hogy egyúttal lokális minimumhelye is az függvénynek. A feltételeink alapján , ezért a lokális szélsőértékre vonatkozó elsőrendű szükséges feltételből következik, hogy . A tétel állítása tehát a választással teljesül.

Ha , akkor a abszolút maximumhely van az intervallumban, és ez egyúttal lokális maximumhely is, tehát . Ebben az esetben a tétel állítása tehát a választással teljesül.

A Cauchy-féle középértéktétel

Kimondás

Legyen és . Ekkor

  • ,
  • ,

Bizonyítás

Először vegyük észre, hogy a Rolle-tételből következik, hogy .
Tekintsük a következő függvényt:

Világos, hogy

Másrészt

Ez azt jelenti, hogy eleget tesz a Rolle-tétel feltételeinek, és így

Azonban tehát

A monotonitás és a derivált kapcsolata

Kimondás

Legyen egy nyílt intervallum. Tegyük fel, hogy . Ekkor

Bizonyítás

  1. Ha -n és egy tetszőleges pont, akkor

hiszen és a monotonitás miatt . Mivel , így

Ha , akkor legyen két tetszőleges pont.
Ekkor , és így a Langrange-féle középértéktétel szerint

Ezért -n.

Az állítás hasonlóan igazolható monoton csökkenő függvények esetében is.

  1. Alkalmazzuk az "éles" egyenlőtlenségeket 1.-ben a irányban.

A konvexitás és a kétszeres derivált kapcsolata

Kimondás

Legyen egy nyílt intervallum. Tegyük fel, hogy . Ekkor

  1. konvex [vagy konkáv] -n [vagy ] -n
  2. ha [vagy ] -n szigorúan konvex [vagy szigorúan konkáv] -n

Bizonyítás

Az alábbi ekvivalens állítások érvényesek:

  • konvex -n -n
  • szigorúan konvex -n -n
  • konkáv -n -n
  • szigorúan konkáv -n -n

Ezek alapján a tétel állítása a monotonitás és a derivált kapcsolatára vonatkozó tételből következik, ha azt az deriváltfüggvényre alkalmazzuk, és figyelembe vesszük azt is, hogy .

Az előző négy állításból csak az elsőt fogjuk igazolni. A többi hasonlóan igazolható.

Legyen tetszőleges és is tetszőleges. Tegyük fel, hogy konvex -n. Ekkor

Egyszerű átrendezésekkel azt kapjuk, hogy

Vegyük itt az , illetve az határátmenetet: Tehát monoton növekedő -n

Tegyük fel, hogy monoton növekvő -n. Legyen , és is tetszőleges. Ekkor a Lagrange-féle középértéktétel szerint és :

Mivel -n, ezért , vagyis

Ez az egyenlőtlenség a következő módon alakítható át:

Ez azt jelenti, hogy konvex -n.

A L'Hospital-szabály a 0/0 esetben

Kimondás

Legyen , illetve . Ekkor

  • és

Bizonyítás

Csak egy esetet (véges) bizonyítunk.

Legyen . Azt kell igazolni, hogy azaz

Az feltétel azt jelenti, hogy

Értelmezzük az és a függvényt az pontban úgy, hogy

A feltételből következik, hogy ekkor

Legyen egy tetszőleges rögzített szám, és a -ben szereplő szám.

Legyen , és egy tetszőleges pont. A Cauchy-féle középértéktétel feltételei az és a függvényre az intervallumon teljesülnek.
Ez azt jelenti, hogy , amire

A állítást tehát bebizonyítottuk. A határérték létezik, és

A deriválhatóság ekvivalens átfogalmazása lineáris közelítéssel

Kimondás

Legyen és . Ekkor

Bizonyítás

Ha és

akkor és ezért a feltétel az választással teljesül.

Most tegyük fel, hogy és , hogy Ebből adódik, ami azt jelenti, hogy és

A Taylor-formula a Lagrange-féle maradéktaggal

Kimondás

Legyen és tegyük fel, hogy Ekkor a fenti képlet jobb oldalán álló függvényt Lagrange-féle maradéktagnak nevezzük.

Bizonyítás

A Cauchy-féle középértéktételt fogjuk felhasznáéni. Legyen

-ből következik, hogy Továbbá, , hiszen , mert egy legfeljebb -ed fokú polinom.

Másrészt, legyen . Ekkor minden esetén

amiből következik, hogy és

Tegyük fel, hogy és például . (Az eset hasonlóan vizsgálható.) Az és függvényekre az intervallumon alkalmazható a Cauchy-féle középértéktétel, következőképpen:

A Cauchy-féle középértéktételt most és a függvényekre az intervallumon alkalmazzuk:

Ha a fenti gondolatmenetet -szer megismételjük, akkor a -dik lépésben :

Az darab lépés során kaptt egyenlőségeket egybevetve azt kapjuk, hogy

hiszen minden esetén és . A konstrukcióból látható, hogy az pont és pont között van, ezért a választással a bizonyítandó állítást kapjuk.

Elégséges feltétel függvények Taylor-sorral történő előállítására

Kimondás

Legyen , és tegyük fel, hogy valós szám, amire teljesül. Ekkor -nek az ponthoz tartozó Taylor sora a halmazon előállítja az függvényt, vagyis fennáll a következő egyenlőség:

Bizonyítás

Legyen egy tetszőleges pont. Azt kell igazolni, hogy Ez a Taylor-formula szerint igaz, hiszen létezik olyan pont és között, hogy

A határozatlan integrál linearitása

Kimondás

Legyen nyílt intervallum. Ha az függvényeknek létezik primitív függvénye, akkor tetszőleges mellett -nek is létezik primitív függvénye és

Bizonyítás

Legyen és . Ekkor , illetve és .

Ekkor az említett deriválási szabályok miatt

Ez azt jelenti, hogy .

A parciális integrálás szabálya

Kimondás

Legyen nyílt intervallum. Tegyük fel, hogy és az függvénynek létezik primitív függvénye -n. Ekkor az függvénynek is van primitív függvénye és

Bizonyítás

Ha , akkor és . Mivel , illetve , ezért és Így valóban fennáll.

A második helyettesítési szabály

Kimondás

Legyenek nyílt intervallumok. Tegyük fel, hogy -n (vagy -n) és az függvénynek van primitív függvénye. Ekkor az függvénynek is van primitív függvénye és

Bizonyítás

Ha -n, akkor szigorúan monoton növekvő, és ha -n, akkor szigorúan monoton csökkenő. Mindkét esetben invertálható, és mivel folytonos és -n, így az inverz függvény deriváltjára vonatkozó tétel szerint a függvény differenciálható minden pontjában, és

Legyen , akkor és . Ekkor az összetett függvény deriválására vonatkozó tétel szerint és

Ez azt jelenti, hogy , amiből a tétel állítása következik.

Az integrálfüggvény folytonossága

Kimondás

Legyen és az függvény pontban eltűnő integrálfüggvénye.
Ekkor .

Bizonyítás

Mivel , ezért az korlátos függvény, így , hogy

Legyen egy tetszőleges pont és olyan sorozat, hogy .

Tegyük fel, hogy . Ekkor a határozott integrál tulajdonságai alapján

Ezért az átviteli elv szerint jobbról folytonos az pontban. Hasonlóan igazolható, hogy balról folytonos az pontban.

Az integrálfüggvény deriválhatósága

Kimondás

Legyen és az függvény pontban eltűnő integrálfüggvénye. Tegyük fel, hogy olyan pont, amire f \in C{\x} teljesül. Ekkor és .

Bizonyítás

Legyen olyan szám, amire teljesül. Ekkor a határozott integrál tulajdonságai alapján

Másrészt, mivel egy rögzített szám, így

Ezért az integrál linearitása alapján

Mivel , így a definíció szerint

Legyen . Ekkor . Így a fentiek és az integrál tulajdonságai szerint

Így

Hasonlóan igazolható, hogy létezik bal oldali deriváltja az pontban, és .
Így

A Newton-Leibniz-formula

Kimondás

Tegyük fel, hogy

  • és
  • az függvénynek van primitív függvénye az intervallumon.

Ekkor ahol az függvény egy primitív függvénye.

Bizonyítás

Legyen , és tekintsük az intervallum egy tetszőlegesen megválasztott felosztását. A Lagrange-féle középértéktétel szerint minden indexre van olyan pont, amelyre

teljesül. Ha ezeket az egyenlőségeket összeadjuk minden indexre, akkoe a bal oldalon minden tag kiesik, kivéve az és az tagokat. Így azt kapjuk, hogy

Mivel , ha , ezért a

egyenlőtlenség minden felosztásra teljesül. Következésképpen

Az (azaz az ) feltételből így az következik, hogy

Egy vektorsorozat és koordinátasorozatai konvergenciájának kapcsolata

Kimondás

Legyen . Egy -beli sorozat akkor és csak akkor konvergens, ha a sorozat minden koordinátasorozata konvergens, és a határértéke a határvektor megfelelő koordinátája, azaz

pontosan akkor igaz, ha minden koordinátára

Bizonyítás

Tegyük fel, hogy , azaz .
Rögzítsük az indexet. Mivel ezért a közrefogási elv szerint , azaz

Tegyük fel, hogy minden indexre , azaz Ekkor az egyenlőtlenség és a közrefogási elv alkalmazásával az kapjuk, hogy ha , azaz .

A deriváltmátrix egyértelműsége

Kimondás

Tegyük fel, hogy és . Ekkor az deriváltmátrix egyértelműen mehatározott.

Bizonyítás

Tegyül fel, hogy az és mátrixko kielégítik a totálisan deriválhatóság definíciójában szereplő feltételeket. Ekkor

A közrefogási elv miatt

Így , azaz minden esetén. Tehát a mátrixok mindegyik -edik oszlopa megegyezik, és így .

A deriváltmátrix előállítása

Kimondás

Legyen , ahol az függvény -edik koordinátafüggvénye. Ha , akkor a Jacobi-mátrix.

Bizonyítás

mátrix, hogy Az függvény -edik koordinátafüggvényére a választással azt kapjuk, hogy A parciális derivált értelmezése alapján tehát

A totális- és az iránymenti derivált kapcsolata

Kimondás

Tegyük fel, hogy és . Ekkor minden irányban vett iránymenti deriváltja létezik az pontban, és

az úgynevezett gradiensvektor és egységvektor, azaz

Bizonyítás

Ha , akkor , úgy, hogy

Legyen . Ekkor , hiszen , és így

Ezért

hiszen a függvény korlátos és .

típusú függvényekre vonatkozó elsőrendű szükséges feltétel a lokális szélsőértékre

Kimondás

Tegyük fel, hogy és . Továbbá

  • és
  • az függvénynek az pontban lokális szélsőértéke van.

Ekkor , azaz .

Bizonyítás

Legyen rögzített és tekintsük meg a valós-valós parciális függvényt! Ekkor

  • ha , akkor , és azt is tudjuk, hogy és .
  • ha -nek az pontban lokális szélsőértéke van, akkor , hogy -nek az pontban abszolút szélsőértéke van a környezetben. Azonban ami azt jelenti, hogy -nek az pontban abszolút szélsőértéke can az környezetben, azaz -nek az pontban lokális szélsőértéke van.

Ekkor a valós-valós függvényeknél tanult, a lokális szélsőértékre vonatkozó elsőrendű szükséges feltétel szerint , ami éppen azt jelenti, hogy

típusú függvényekre vonatkozó másodrensű elégséges feltétel a lokális szélsőértékre

Kimondás

Legyen és . Tegyük fel, hogy

  • az Hesse-féle mátrix pozitív (negatív) definit.

Ekkor az függvénynek az pontban lokális minimuma (maximuma) van.

Bizonyítás

A Peano-féle maradéktagos Taylor-formula szerint van olyan a feltételnek eleget tevő függvény, hogy

Ha és akkor a fenti egyenletből:

Ha az mátrix, vagyis a kvadratikus alak pozitív definit, akkor és

A egységvektor, tehát

Ezért

Mivel , így . Ha , akkor

Az helyettesítéssel azt kapjuk, hogy

ami azt jelenti, hogy az függvénynek lokális minimuma van az pontban.

Hasonlóan igazolható, hogy ha negatív definit, akkor az függvénynek lokális maximuma van az pontban.

típusú függvényekre vonatkozó másodrendű szükséges feltétel a lokális szélsőértékre

Kimondás

Legyen és . Ha az függvénynek az pontban lokális minimuma (maximuma) van, akkor

  • az Hesse-féle mátrix pozitív (negatív) szemidefinit.

Bizonyítás

Az elsőrendű szükséges feltétel miatt . A Hesse-féle mátrixszal kapcsolatos állítás igazolásához tegyük fek, hogy -nek az pontban lokális minimuma van (lokális maximum esetén hasonlóan igazolható). Így környezet, hogy minden esetén. Rögzítsünk egy tetszőleges pontot. Ekkor

A Peano-féle maradéktagos Taylor formula szerint vaon olyan , a feltételnek eleget tevő függvény, hogy

Ha és akkor a fenti egyenletből:

ezért

Ekkor

Ez azt jelenti, hogy a kvadratikus alak, illetve az mátrix pozitív szemidefinit.

Operációs rendszerek előadás

Alapadatok

Idő: Hétfő, 17:00 - 18:00
Helyszín: Déli Tömb 0-822 Mogyoródi József Terem
Oktató: Dr. Illés Zoltán, zoltan.illes@elte.hu
Csoport: 91

Értékelés

  • 2 beadandó
  • 2 ZH
    • 1.ZH: 12. hét, az előadás anyaga
    • 2.ZH: Utolsó hét, előadás és gyakorlat anyaga

Források

1. Előadás

Tematika

  • Bevezetés, előzmények (számítógépes alapismeretek, számítógépek felépítése,API)
  • Operációs rendszer fogalma, fejlődése, felhasználói felület
  • Fájlok, könyvtárak, lemezkezelés
  • Folyamatok, ütemezések
  • Bevitel-kivitel, erőforrások, holtpontok kezelése
  • Memóriakezelés
  • Real-Time Operációs rendszer jellemzők
  • Suse Linux Enterprise szerver esettanulmány
  • Windows Core, Azure, Felhő

Források

2. Előadás

Számítógépek hardveres felépítése

  • Tárolt programok, utasítások adatok azonos módon a memóriában helyezkednek el.
  • Vezérlő egység (CPU), aretmetikai-logikai egység (ALU) az utasítások végrehajtását, alapvető aritmetikai műveleteket felügyelik.
  • Szükség van be/kimenetek (I/O) kezelésre.
  • Összekötő kapocs: busz (sín, adat, cím, vezérlő)

Processzor utasítások

A rendszer gyakorlatilag minden eleme intelligens, de a kulcsszereplő a processzor, mikrokontroller.

Regiszterek: speciális memória a processzoron belül. (általános, jelző, )

Utasításcsoportok:

  • Adatmozgató utasítások
  • Ugró utasítások (abszolút, relatív)
  • I/O port kezelés
  • Megszakítás kezelés

Védelmi szintek

  • Kernel mode (interrupt, I/O, bizonyos memória kezelése)
  • User mode

Adatok, utasítások a memóriában, ezeket a CPU végrehajtja.

Számítógépek szoftveres felépítése

  1. Logikai áramkörök
  2. CPU, mikroprogram, mikroarchitektúra szint
  3. Számítógép, gépi elemek gépi kódja
  4. Operációs rendszer
  5. Rendszeralkalmazások
  6. Alkalmazások

Operációs rendszer fogalma, feladata

Operációs rendszer: Olyan program ami egyszerű felhasználói felületet nyújt, eltakarva a számítógép(rendszer) eszközeit.

  • Absztrakt, virtuális gép
    • pl.: mindegy hogyan, de át akarok másolni egy képet.
  • Erőforrás menedzser
  • Felhasználói felület biztosítása
  • Kommunikáció perifériákkal
    • Lekérdezéses átvitel (polling): I/O portok folyamatos lekérdezése
    • Interrupt használat: A kívánt esemény bekövetkezésekor a megadott programrész kerül végrehajtásra.
    • DMA, közvetlen memória elérés

Programkönyvtárak

Lehetnek gépi kódban írtak, de leggyakrabban C-API-t biztosítanak.

Jellemzően réteges szerkezetű:

  • Rendszer szintű hívás (pl.: kommunákció a perifériákkal)
  • Felhasználói hívás

Firmware: Hardverbe a gyártó által épített szoftver

Middleware: OS feletti réteg, pl.: JVM

POSIX

POSIX = Portable Operating System Interface for uniX (IEEE 1003, ISO 9945)

Valójában egy minimális rendszerhívás API.

Szabvány ANSI C-vel azonos függvénykönyvtár.

Manapság mindens OS POSIX kompatibilis.

Fontosabb POSIX témakörök:

  • Fájl, könyvtárműveletek
  • Folyamatok kezelése
  • Szignálok
  • Csövek
  • Standard C függvénykönyvtár
  • Órák, időzítők
  • Szálak kezelése

Függvénycsoport példák

  • Matematikai függvények: pl. sin, cos, tan, atan, atan2, log, exp stb.
  • Állománykezelő függvények: pl. creat, open, fopen, close, read, write, unlink stb.
  • Könyvtárkezelő függvények: pl. opendir, closedir, mkdir, rmdir, readdir stb.
  • Karakterfüzér‐kezelő függvények: strcpy, strlen strcmp, strcat, strchar, strstr stb.
  • Memória-kezelők: malloc, free, memcpy stb.
  • Belső kommunikációs függvények: msgsnd, msgrcv, shmat, semop, signal, kill, pipe stb.

Források

3. Előadás

Operációs rendszer generációk

  1. Történelmi generáció, tisztán mechanikus, nincs oprendszer
  2. Első generáció (1940-1955), kapcsolótála, relé, vákumcső
  • Egedi gépek
  • Neumann modell
  • Gépi kód
  • Lyukkártya
  1. Második generáció (1955-1965) tranzisztoros rendszerek
  • Megbízható elemk
  • Géptermek (mainframe)
  • Szalagos egységek, üzemeltetési fázisok elkülönítése
  • FORTRAN nyelv
  • Oprendszerek
  1. Harmadik generáció (1965-1980), intrgrált áramkörök
  • Azonos rendszerek, felépítések, kompatibilitás
  • Multiprogramozás, multitask megjelenése
  • Spooling, időosztás
  1. 1980-napjainkig személyi számítógépek, Windows
  • Large Scale Integration áramkörök, CPU fejlődés
  • Hálózati osztott rendszerek
  • GUI

MINIX 3

AT&T engedélye alapján használható volt

Linus Torvalds fejlseztette ez alapján a Linuxot.

Rendszerhívások

Azok a szolgáltatások, melyek az operációs rendszer ésa felhasználói programok közti kapcsolatot biztosítják.

Két csoportja:

  • Folyamat kezelő csoport
  • Fájlkezelő csoport

Process kezelés

Processz: végrehajtás alatt lévő program

  • Saját címtartomány
  • Processz táblázat (cím, register)
  • Processz indítás, megszüntetés
  • Processz felfüggesztés (memóriatérkép + táblázat mentés)
  • Processzek kommunikációja (signalok)

Fájlkezelés

Egy főkönyvtár, fastruktúra (fájl, könyvtár)

Jogosultságok, műveletek

Speciális fájlok: adatcső

Operációs rendszer struktúrák

Monolitikus rendszerek

Rendszerkönyvtár egyetlen rendszer, így mindenki mindenkit láthat.

Információelrejtés nem igazán van.

Rendszerhívás során gyakran kernel módba kapcsolja a CPU-t

Rétegelt szerkezet

  1. Gépkezelő
  2. Felhasználói programok
  3. I/O kezelés
  4. Gépkezelő-folyamat
  5. Memória és dobkezelés
  6. Processzorhozzáférés és multiprogramozás

Kliens/szerver modell

Felhasználói program: kliens program Kiszolgáló program: szerver program

Mindegyik felhasználó módban fut egyre kevesebb funkció marad a kernelben

Virtuális gépek

Eredetileg az IBM-től származik az ötlet Virtuális gép monitor: a hardvert pontosan másolja Ezt tetszőleges példányban képes volt sokszorozni

Virtualizációs fogalmak

  • host rendszer
  • paravirtualizáció - vendég rendszerben módosítják a kritikus utasításokat, ma már nem igazán használt.
  • szoftveres virtualizáció
  • hardveres virtualizáció
  • konténerizáció

Operációs rendszer elvárások

  • Hatékonyság
  • Megbízhatóság
    • adatok megőrzése
    • rendelkezésre állás
    • hibatűrés
  • Biztonság
  • Kompatibilitás, hordozhatóság
  • Alacsony energia felhasználás
  • Rugalmasság
  • Kezelhetőség

Források

4. Előadás

Háttértárak

  • Mágneses
    • Mágnesszalagok
    • Mágneslemezek
      • Merevlemez
      • Floppy
  • Optikai
    • CD, DVD, Blu-Ray
  • Félvezető (flash)
    • USB drive, memóriakártya
    • SSD

Mágnesszalag fizikai felépítése

  • Lineáris felépítés
    • 9 bites keret (8bit + paritás)
    • Keretek rekordokba szerveződnek
    • Rekordok között: rekord elválasztó (record gap)
    • Egymás utáni rekordok után, fájl elválasztó (file gap)
    • Szalag elején könyvtárszerkezet
  • Jellemző használat:
    • Biztonsági mentés
    • Nagy mennyiségű adattárolás
  • Nem igazán olcsó

Mágneslemezek felépítése

  • FDD - Floppy Disk Drive
    • jellemzően egy lemez
  • HDD - Hard Disk Drive
    • jellemzően több lemez
  • Kör alakú lemez - sávos felosztás
  • Sávok szektorokra oszthatók - blokk
    • Klaszter - több blokk
  • Több lemez - egymás alatti sávok: cilinder
  • Logikailag egy folytonos blokksorozat
  • A fizikai működést a meghajtó (firmware) eltakarja.

Címzés: CHS (Cilinder-Head-Sector), LBA (Logical Block Addressing)

Optikai tárolók

  • 8 vagy 12 cm átmérőkű optikai lemezek
  • Működési elv: Fény visszaverődés idő különbség alapján.
    • Belső résztől spirális "hegyek - völgyek" (pit-land) sorozata.
    • Írás: fény törésmutatóját változtatja meg, így más lesz a fény terjedési sebessége.

Eszközmeghajtó

  • Az a program, amely a közvetlen kommunikációt végzi.
  • A kernelnek, az operációs rendszer magjának része.
  • A lemezek írása-olvasása során jellemzően DMA-t használnak
    • Megszakítás üzenet, tipikusan azt jelzi, ha befejeződött az írás-olvasás művelet
    • I/O portokon az írás, olvasási paraméterek beállítását végzik.
  • Réteges felépítés

Formázás

Mágneslemez formázása

  • Sávos-szektoros rendszer kialakítása
  • Jellemzően egy szektor 512 byte
  • Gyárilag a lemezek "elő vannak készítve"
  • Quick format - Normal format
    • A normál hibás szektorokat keres.
  • Szektor = Szektorfej + adatblokk + lábléc
    • Szektorfej: sáv száma, fej száma, szektor száma
    • Lábléc: hibajavító blokk
  • A szektorok kialakítását alacsonyszintű formázásnak nevezzük.

Logikai formázás

  • Partíciók kialakítása
    • Egy lemezen, több logikai lemezrész kialakítható (PC-s rendszeren 4)
      1. szektor - MBR (Master Boot Record)
      • 2 részből áll, 512 bájt
        • Bootloader (446 bájt)
        • Max 4 partíció adatai (4x 15 bájt)
        • 2 bájt, mindig 0x55 0xAA
      • Elsődleges partíció - erről tölthető be az operációs rendszer
      • Kiterjesztett partíció - több logikai meghajtó lehet
      • Swap partíció
      • UEFI esetén is létezik - Protektív MBR-es teljes méretet megadó partíciós bejegyzés-
    • A partíción a szükséges adatszerkezet kialakítása.

Boot folyamat

  • ROM-BIOS megvizsgálja, lehet-e operációs rendszert betölteni, ha igen betölti a lemez MBR programját a 7c00h címre.
  • Egy elsődleges partíció lehet aktív, az MBR programja megvizsgálja melyik az.
  • Az aktív partíció boot szektorát (1. szektor) betölti a memóriába.
  • Ez már a partícióra installált operációs rendszer betöltő programja Pl. LILO, NTFS boot
  • A boot program tudja, hogy a partíció melyik fájljait kell a memóriába tölteni, majd elindít egy „rendszerstartot”
  • Többszintű folyamat, rendszerfüggő.

UEFI vs Legacy vs BIOS

  • BIOS probléma: MAX. 2TB háttértár kezelés
    • Basic Input-Output System, IBM PC alap firmware
  • UEFI (BIOS utód) – Unified Extensible Firmware Interface
    • BIOS x86 valós módban fut mindenhol, UEFI natívban (x86- 32, x64)
    • 2TB-nál nagyobb meghajtók, 128 partíció, nagyobb RAM
    • MBR nem használt, helyette GPT (GUID Partition Table)
      • OS betöltő saját fájlrendszerben .efi kiterjesztés
      • Csak 64 bites OS betöltő!
      • Secure boot(csak digitálisan aláírt driverek, OS boot betöltő engedélyezés)
      • Általános boot lehetőségek: Legacy boot (BIOS), UEFI boot, Dual (Compatibility Support Module)

UEFI GPT táblázat

  • Az MBR (0.szektor) Protective MBR, 0xEE GPT típus az egész lemez méretre vonatkozik
    1. szektor- GPT fejléc (header) , lemez GUID, stb.
    1. szektortól- 32 szektor, 128 byte egységenként a partíciós bejegyzések (Partition Entry Array)
    • 128 partíció, 128/4=32
  • Partíció végén a partíciós bejegyzések másolata és a fejléc másolata.

Források

5. Előadás

Lemez elérés fizikai jellemzői

  • Forgási sebesség (ma tipikusan 5400-15000/perc)
  • Fej mozgási sebesség
  • Az írás olvasás ütemezés feladata a megfelelő kiszolgálási sorrend meghatározása.
    • Válaszidő csökkentése
    • Sávszél növelése

I/O műveletek

  • Alacsonyszintű hívás során az alábbi adatok szükségesek:
    • Beolvasandó (írandó) blokkok sorszáma
    • Memóriaterület címe, ahova be kell olvasni
    • Bájtok száma

Ütemezés

  • Alacsonyszintű (kernel) feladat paraméterek
    • Kérés típusa (írás-olvasás)
    • A blokk kezdőcíme (LBA cím vagy sáv, szektor, fej száma)
    • DMA memoriacím
    • Mozgatandó bájtok száma
  • Több folyamat is használná a lemezt?
    • Ütemező feladata: Kit szolgáljunk ki elősször?
    • Fejmozgás figyelembevétele

Sorrendi ütemezés (FCFS)

  • First Come - First Serve
  • Ez a legegyszerűbb stratégia
  • Biztosan minden kérés kiszolgálásra kerül
  • Nem törődik a fej aktuális helyzetével
  • Nem igazán hatékony
  • Kicsi az sávszél
  • Átlagos válaszidő, kis szórással

SSTF ütemezés

  • Shortest Seek Time First
  • A legkisebb fejmozgást részesíto előnyben
  • Átlagos várakozási idő kicsi, de szórása nagy
  • Átviteli sávszél nagy
  • Fennáll a kiéheztetés veszélye

Pásztázó ütemezés

  • SCAN módszer
  • A fej állandó mozgásban van, és a mozgás útjába eső kéréseket kielégíti
  • A fej mozgás megfordul, ha a mozgás irányában nincs kérés, vagy a fej szélső pozíciót ért el
  • Rossz ütemben érkező kérések kiszolgálása csak oda-vissza mozgás után kerül kiszolgálásra.
    • Várakozási idő közepes, szórás nagy
  • Középső sávok elérés szórása kicsi

Egyirányú pásztázás

  • Circular SCAN, C-SCAN
  • A SCAN javítása, írás-olvasás, csak a fej egyik irányú mozgásakor történik.
  • Gyorsabb fejmozgás
  • Nagyobb sávszélesség
  • Az átlagos várakozási idp hasonló, mint a SCAN esetén, viszont a szórás kicsi

Ütemezés javítások

  • FCFS módszernél, ha az aktuális sorrendi kérés kiszolgálás helyén van egy másik kérés blokkja, akkor szolgáljuk ki azt is.

  • Egy folyamat adatai jellemzően egymás után vannak, így egy kérés kiszolgálásánál várva egy kicsit, a folyamat az adatainak további részét is kéri a folyamat.

    • Előlegező ütemezésnek is nevezzük
  • A lemez közepe általában hatékonyan elérhető

  • A DMA maga is memória

  • Memória buffer használata:

    • Kettős körszerű használat
    • Olvasás: Ütemező tölti, felhasználói folyamat üríti
    • Írás: Felhasználó folyamat tölti, ütemező üríti
  • Disc cache

    • Előre dolgozik az ütemező, a memóriába tölti a kért adatok "környéki" lemezterületet is
    • Operációs rendszernek jelent plusz feladatot

SLE Block device ütemezés

  • CFQ - Completely Fair Queuing
    • Minden folyamat saját I/O sort kap.
    • Ezen sorok között azonosan próbálja az ütemező elosztani a sávszélességet
    • Ez az alapértelmezett ütemező
  • Létezik még:
    • NOOP: Egy sor van, amit a (RAID) vezérlők gyorsan teljesítenek
    • Deadline: egy kéréshez határidő tartozik, két sort használ. Egy blokksorrend alapján készített sort (SSTF) és egy határidő alapján készített sort. Alapból a blokksorrend a lényegesm de ha határidő van, akkor az kerül sorra

Ütemezés választás

  • A fenti algoritmusok csak a fejmozgás idejét vették figyelembe, az elfordulást nem.
  • A sorrendi ütemezés tipikusan egy felhasználós rendszernél használt
  • SSTF, kiéhezés veszélye nagy
  • C-SCAN, nagy IO átvitel, nincs kiéheztetés
  • Beépített ütemező: Pl.: SCSI vezérlők

Ütemezés kulcsfeladata

  • Minél gyorsabban kiszolgálni a kéréseket.
  • Ezt mi is segíthetjük:
    • Összetartozó adatok együtt legyenek
    • Sávszélesség a lemez közepén a legnagyobb
    • Leggyorsabban a lemez közepét érhetjük el
    • Lemez gyorsító tár a memóriában
    • Adattömörítés

Lemezek megbízhatósága

  • Az adatok redundás tárolása, hogy lemezsérülés esetén se legyen adatvesztés
  • Operációs rendszer szolgáltatás
    • Dinamikus kötet: több lemezre helyez egy logikai meghajtót, méret összeadódik
    • Tükrözés: két lemezre helyez egy meghajtót, mérete az egyik lemez mérete lesz
  • Hardware szolgáltatás:
    • Intelligens meghajtó szolgáltatás
    • A SCSI eszköz világában jelent meg elősször (RAID)

RAID

  • Ha az oprendszer nyújtja, gyakran SoftRaid-nek nevezik.
  • Több lemezt fog össze, és egy logikai egységként látja az operációs rendszer
  • Több "összefogási" elv létezik: RAID 0-6

RAID 0 (striping)

  • Nem redundáns
  • Több lemez logikai összefűzésével egy meghajtót kapunk
  • A lemezkapacitások összege adja az új meghajtó kapacitását
  • A logikai meghajtó blokkjait szétrakja a lemezekre (striping), ezáltal egy fájl írása több lemezre kerül.
  • Gyorsabb I/O műveletek
  • Nincs meghibásodás elleni védelem

RAID 1 (mirroring)

  • Két független lemezből készít egy logikai egységet
  • Minden adatot párhuzamosan kiír mindkét lemezre
  • Tárolókapacitás felére csökken
  • Drága megoldás
  • Jelentős hibatűrő képesség

RAID 1+0, RAID 0+1

  • RAID 1+0: Tükrös lemezekből vonunk össze többet
  • RAID 0+1: RAID 0 összevont lemezekcsoportokból vegyünk kettőt
  • A vezérlők gyakran nyújtják egyiket, másikat, mivel így is, úgy is tükrözés van, azaz drága, így ritkán használt.

RAID 2,3,4

  • RAID 2: Adatbitek mellett hibajavító biteket is tartalmaz, pl.: 4 lemezhez 3 javító lemez
  • RAID 3: Elág egy plusz paritáslemez, n+1 lemez
  • RAID 4: RAID 0 kiegészítése paritáslemezekkel
  • Ma ezen megoldások nem gyakran használatosak

RAID 5

  • Nincs paritáslemez, ez el van osztva a tömb összes elemére
  • Adatok is elosztva ketülnek tárolásra
  • Intenzív vezérlő CPU igény
  • Redundáns tárolás, 1 lemez meghibásodása nem okoz adatvesztést
  • N lemez RAID 5 tömbben, N-1 lemez méretű logikai meghajtót ad

RAID 6

  • A RAID 5 paritásblokkhoz, hibajavító kód kerül tárolásra (+1 lemez)
  • Még intenzívebb CPU igény
  • Két lemez egyidejű kiesése sem okoz adatvesztést
  • N lemez RAID 6-os tömbjének kapacitása N-2 lemez kapacitásával azonos
  • Elvileg általánosítható módszer X lemez kiesésére

Források

6. Előadás

Fájlrendszer

  • Fájl: adatok egy logikai csoportja, névvel egyéb paraméterekkel ellátva.
  • Könyvtár: fájlok (könyvtárak) logikai csoportosítása.
  • Fájlrendszer: módszer, a fizikai lemezünkön, kötetünkön a fájlok és könyvtárak elhelyezés rendszerének kialakítására.

Fájl

  • A fájl az információtárolás egysége.

  • Névvel hivatkozunk rá.

  • Jellemzően egy lemezen helyezkedik el, de általánosan az adathalmaz, adatfolyam akár képernyőhöz, billentyűzethez is köthető.

  • A lemezen általában 3 féle fájl, állomány található:

    • Rendes, normál felhasználói (alkalmazói) állomány.
    • Ideiglenes állomány
    • Adminisztratív állomány. Ez a működéshez szükséges, általában rejtett.
  • Fájlnév: Karaktersorozat

    • Operációs rendszer függvénye, hogy milyen a szerkezete(hossza, megengedett karakterek, kis- nagybetű különbözőség)
  • Egyéb attribútumok (információ):

    • Mérete, tulajdonosa, utolsó módosítás ideje, rejtett (hidden) fájl-e, rendszer fájl-e, hozzáférési jogosítványok, tulajdonos,
  • Fizikai elhelyezkedés:

    • Valódi fájl, link (hard), link (soft)

Könyvtár

  • Valójában egy speciális bejegyzésű állomány, tartalma a fájlok nevét tartalmazó rekordok listája.
  • Könyvtár szerkezetek
    • Katalógus nélküli rendszer, szalagos egység
    • Egyszintű, kétszintű katalógus rendszer (nem igazán használt)
    • Többszintű, hierarchikus katalógus rendszer
      • Fa struktúra
      • Hatékony keresés
      • Ma ez a tipikusan használt.
  • Abszolút, relatív hivatkozás
    • PATH környezeti változó

Hozzáférési jogok

  • Nincs általános jogosítvány rendszer
  • Jellemző jogosítványok:
    • Olvasás
    • Írás, létrehozás, törlés
    • Végrehajtás
    • Módosítás
    • Full control
  • Jogok nyilvántartása:
    • Attribútumként
    • ACL
      • NFS-AFS különbözőség, hasonló elv, különböző implementáció

Fájlok elhelyezése

  • A partíció elején, az un. Szuperblokk (pl. FAT esetén a 0. blokk ) leírja a rendszer jellemzőit.
  • Általában következik a helynyilvántartás (FAT, láncolt listás nyilvántartás)
  • Ezután a könyvtárszerkezet (inode), a könyvtár bejegyzésekkel, fájl adatokkal. (FAT16-nál a könyvtár előbb van, majd utána a fájl adatok.)

Folyamatos elhelyezésű

  • First Fit (első szabad hely, ahová befér)
  • Best Fit (arra a helyre, ahol a legkevesebb szabad hely marad)
  • Worst Fit (Arra a helyre illesztjük, ahol a legtöbb szabad hely marad)
  • Mindegyik veszteséges.

Láncolt tárolás

  • Nincs veszteség (csak a blokk méret).
  • A fájl adatai egy láncolt blokk listában vannak.
    • Az utolsó blokk elérése lassú.
  • Szabad-foglalt blokkok: File Allocation Table, FAT
    • Nagy méretű lehet és a FAT mindig a memóriában van!

Indextáblás elhelyezés

  • A könyvtár katalógus a file node-ok címét tartalmazza
  • Az inode cím mutat a fájl adatokra.

Könyvtár megvalósítása

  • A fő funkciója, hogy a névből meghatározza az adatok helyét. (keresés: lineáris, hash táblás, cache- elt)
  • A könyvtárbejegyzés tartalmazhatja a:
    • A címét a teljes fájlnak (folyamatos elhelyezésnél)
    • Az első blokk címét (láncolt listánál)
    • Az i-node számot.
  • Hogyan tárolja az attributumokat?
    • Bejegyzések hossza azonos, rögzített
    • i-node-okban

Fájlnév tárolás

  • Korábban – fix hosszúságú (8+3)
  • Ma – általában max 255 karakter hosszú
  • Helytakarékos megoldások:
    • Különböző hosszúságú bejegyzések. Az első helyen a bejegyzés hossza, majd az attribútumok, majd a név.
    • Egyforma hosszú bejegyzések, mutató a fájlnévre.

Lemez kvóták

  • A felhasználói felnyitáskor
    • Megnyitja a fájl táblát a memóriában
    • A kvóta táblát a memóriában
  • Ha új blokkot foglal -> változik a kvóta tábla
  • Bejelenkezéskor ellenőrzés
    • Szoft limit átlépésekor bejelentkezhet (kivéve túllépte a lehetséges figyelmeztetések számát)
    • Hard limit átlépésnél – be sem jelentkezhet

Megosztott fájlok

  • Megoldandó, hogy mindenki számára minden változás látszódjon!
  • Két módszer használatos:
    • A fájl blokkjai egy struktúrában találhatóak és erre mutat a könyvtárbejegyzés (nem a blokkok maguk vannak felsorolva a bejegyzésben) (pl. UNIX, i-node) A user1 és user2 ugyanarra a struktúrára mutat. (Mi történik törlésnél?)
    • Új link fájl létrehozásával. (symbolic link) (lassú elérés.)

Titkosított fájlrendszer

  • CPU támogatás
    • AES-NI (New Instructions) utasításkészlet
    • Szimmetrikus kulcs
  • Windows 2000 óta létezik NTFS-ben (EFS)
  • Windows Jelenleg: Bitlocker
    • Beépített win10 prof.
  • Checkpoint Pointsec- független titkosító
  • Linux – dm-crypt
    • 2.6.4 kernel óta, alapértelmezett titkosítás

Mentések

  • Fizikai mentés(Full backup) (mindent lemásol)
    • Előny (simple, quick)
    • Hátrány (felesleges mentés, pl. szabad blokkok..)
  • Logikai mentés (csak a módosítottat menti)
    • Előny (Igény esetén egy adott fájl vagy könyvtár is
      visszaállítható nemcsak az egész)
    • Hátrány (bonyolult algoritmus)
  • Vegyes használat
    • Időnként fizikai mentés
    • Sűrűbben logikai mentés
  • Visszaállítás (fizikai mentés, első logikai mentés, …., utolsó logikai mentés

Logikai mentés

  • A UNIX rendszerekben gyakran használt algoritmus

    • Minden módosított fájl és minden könyvtár megjelölése
    • Eltávolítjuk azokat a könyvtár jelöléseket, amelyekben
      (vagy amelyek alkönyvtáraiban) nem volt módosítás.
    • Mentjük a megjelölt könyvtárakat attribútumokkal).
    • Mentjük a megjelölt fájlokat attribútumokkal.
  • A szabad blokk lista nem fájl (nincs mentve). (Visszaállítható, hiszen a komplementere a foglaltaknak.)

  • Linkek – minden könyvtárban, ahol a módosított állományra volt link, azt vissza kell állítani.

  • A fájlok lyukakat tartalmazhatnak (pl. seek+write) – Visszaállításnál a nem használt helyeket nem kell lefoglalni!

  • Nem valódi fájlokat pl. nevesített csővezetékeket nem kell menteni.

Fájl, könyvtár műveletek

  • Fájl
    • Megnyitás
    • Műveletek: Írás, olvasás, hozzáfűzés
    • Lezárás
  • Adatok
    • Bináris- bájt sorozat
    • Szöveges- karakter sorozat
  • Elérés módja, szekvenciális, random
  • Könyvtár műveletek
    • Létrehozás, tartalom listázása, állomány törlés

Fájlrendszer típusok

  • Merevlemezen alkalmazott fájlrendszer
    • FAT, NTFS, EXT2FS, XFS, stb.
  • Szalagos rendszereken (elsősorban backup) alkalmazott fájlrendszer
    • Tartalomjegyzék, majd a tartalom szekvenciálisan
  • CD, DVD, Magneto-opto Disc fájlrendszere
    • CDFS, UDF (Universal Disc Format), kompatibilitás
  • RAM lemezek (ma már kevésbé használtak)
  • FLASH memória meghajtó (FAT32)
  • Hálózati meghajtó
    • NFS,AFS
  • Egyéb pszeudó fájlrendszerek:
    • Zip, tar.gz, ISO

Naplózott fájlrendszerek

  • Fájlrendszer sérülés, áramszünet stb. esetén inkonzisztens állapotba kerülhet.
  • Gyakran nevezik: LFS-nek (Log-structured File System) vagy JFS-nek(Journaled)
  • Adatbázis kezelők mintájára: művelet + log
    • Tranzakciós alap
    • Leállás, hiba esetén a log alapján helyre lehet állítani.
    • Célszerűen a log másik lemez (másik partíció)
  • Nagyobb erőforrás igény- nagyobb megbízhatóság
  • Adatmódú – Metaadat alapú naplózás

Fájlrendszer támogatás

  • Mai operációs rendszerek "rengeteg" típust támogatnak
    • PL: Linux 2.6 kernel több mint 50-et.
  • Fájlrendszer csatolása
    • Mount, eredményeképpen a fájlrendszer állományok elérhetők lesznek.
    • Automatikus csatolás (pl. USB drive)
    • Kézi csatolás (Linux, mount parancs)
  • Külön névtérben való elérhetőség (Windows)
    • A,B,C,
  • Egységes névtér (UNIX)

Különböző fájlrendszerek együttes használata egy gépen

  • Lehetséges több különböző fájlrendszert használni ugyanazon a gépen.
    • Pl. Windows: NTFS, FAT-32, UDF (DVD,CD) stb.
      • A rendszer egymástól függetlenül használja őket. Az hogy éppen melyiket kell használni, a drive betű határozza meg. (c:, a:)
  • Pl.:UNIX: ext2,ext3, UDF, stb.
    • A modern UNIX rendszerek egységesen kezelik létrehozva egy közbülső réteget a virtuális fájlrendszert! (VFS)

Alkalmazás és lemez kapcsolat

  • Réteges felépítés
    • Alkalmazói szint
      • Az alkalmazás, fejlesztői könyvtárak segítségével megoldja a lemezen tárolt adatok írását-olvasását.
      • Szöveges, bináris fájlműveletek
    • Operációs rendszer szint
      • Fájlrendszer megvalósítás
        • Elérhetőség, jogosultságok
      • Kötetkezelő (Volume manager)
      • Eszközmeghajtó (device driver)
        • BIOS-ra alapozva
    • Hardver eszköz szintje
      • I/O meghajtó,IDE, SATA stb.

FAT

  • File Allocation Table

    • Talán a legrégebbi, ma is élő fájlrendszer!
  • A FAT tábla a lemez foglaltsági térképe, annyi eleme van, ahány blokk a lemezen

    • Pl: Fat12, FDD, Cluster méret 12 bites. Ha értéke 0, szabad, ha nem foglalt.
    • Biztonság kedvéért 2 tábla van.
  • Láncolt elhelyezés

    • A katalógusban a file adatok (név stb.) mellett csak az első fájl blokk sorszáma van megadva.
    • A FAT blokk azonosító mutatja a következő blokk címét.
    • Ha nincs tovább, FFF az érték.
  • Rögzített bejegyzés méret, 32 bájt (max. 8.3 név)

  • System,Hidden,Archive,Read only, könyvtár attribútumok

  • A fájl utolsó módosítás ideje is tárolva van.

  • FAT16, 16 bites cluster leíró, 4 bájt (2x2) írja le a fájl kezdőblokkját

    • Max. 4 GB partíciós méret (64kb blokk méretnél), jellemzően 2 GB.
    • Fájl méret maximum is a 4 (2) GB.
    • Külön könyvtári terület (FDD-n ez a 0. sáv)
      • FDD-n 512 könyvtári bejegyzés
      • HDD-n 32736 könyvtári bejegyzés (16 bit előjelesen)
  • FAT32 (1996-tól elérhető)

    • 28 bites cluster leíró
    • 2 TB partíciós méret (alap szektor mérettel)
  • 32MB-ig, 1 cluster = 1 blokk(512bájt)

    • 64 MB, 1 cluster=1KB (2 blokk), 128MB, 1 cluster=2KB
    • 1 cluster max. 64 KB lehet.
  • Támogatták már a hosszú fájl neveket is

    • Többszörös 8.3 részre fenntartott bejegyzésekkel.
  • Töredezettség mentesítés szükséges.

UNIX könyvtárszerkezet

  • Indextáblás megoldás
  • Boot blokk után a partíció szuperblokkja (fájlrendszer paraméterek)
  • Ezt követi a szabad terület leíró rész.
  • i-node tábla, majd gyökérkönyvtár bejegyzéssel)
  • Moduláris elhelyezés, gyorsan elérhető az információ, sok kicsi táblázat, ez alkotja a katalógust.
  • Egy fájlt egy i-node ír le!
    • 15 rekeszből áll, első 12 a fájl blokkokra mutat.
    • Ha kevés,a 13. rekesz újabb i-node-ra, ami +15 rekesz.
    • Ha ez is kevés, a 14. rekesz újabb i-node-ra ami az első mintáját ismétli.

NTFS

  • New Technology File System

    • FAT-NTFS hatékonysági határ: kb. 400 MB.
  • 255 karakteres fájl név, 8+3 másodlagos név

  • Kifinomult biztonsági beállítások

  • Ahogy a FAT esetén, itt is szükséges a töredezettség mentesítés.

  • Titkosított fájlrendszer támogatása, naplózás

  • POSIX támogatás

    • Hard link (fsutil hardlink parancs), időbélyegek, kis-nagybetűk különböznek
  • Tömörített fájl, mappa, felhasználói kvóta kezelés

  • Az NTFS csak klasztereket tart nyilván, szektort (512bájt) nem

  • NTFS partíció felépítése

    • A Master Table egy táblázat
    • A File System Data szintén

MFT

  • NTFS partíció az MFT (Master File Table) táblázattal kezdődik
    • 16 attribútum ad egy fájl bejegyzést.
    • Minden attribútum 1kb. Ha ez nem elég akkor egy attribútum mutat a folytatásra.
    • Az adat is egyfajta attribútum, így egy bejegyzés több adatsort tartalmazhat. (PL: Betekintő kép)
    • Elvi fájlméret 2^64 bájt lehet
    • Ha a fájl < 1kb, belefér az attribútumba, közvetlen fájl.
    • Nincs fájl méret maximum

Források

Elmaradt óra

Ez az óra elmaradt, és nem tartottak pótló órát.

Elmaradt óra

Ez az óra elmaradt, és nem tartottak pótló órát.

9. Előadás

Ütemezés interaktív rendszerekben

  • Garantált ütemezés
    • Minden aktív folyamat arányos CPU időt kap
  • Sorsjáték ütemezés
    • Mint az előző, csak a folyamatok között "sorsjegyeket" osztunk szét, az kapja meg a vezérlést akinél a kihúzott jegy van.
  • Arányos ütemezés
    • Vegyük figyelembe a felhasználókat is. Mint a garantált, csak a felhasználókra vonatkoztatva.

Windows ütemezés elvek

  • Preemtív, prioritásos
  • Szál alapú
  • Alap a Normal prioritási osztály
  • Osztályon belül folyamat függvényben változhat az időszelet hossza
  • Kiéheztetés elkerülése: Priority Boost

Linux - CFS

  • Completely Fair Scheduler
  • A CPU idő "fair" kiosztása, hasonlít a garantált ütemezésre
  • A CPU idők nyilvántartása egy fa struktúrában, balra kisebb, balra nagyobb idejű folyamatok (red-black tree)
  • Nincs direkt prioritás
  • Mindenki azonos, fair módon részesül a CPU erőforrásokból, de:
    • A nagyobb prioritású folyamat kisebb idő csökkenést szenved el.
  • Nem kell prioritáskénti folyamat nyilvántartás

I/O eszközök vezérlése

Eszközezérlők

  • Az I/O eszközt a számítógéphez kapcsoló elem az eszközvezérlő, vagy adapter.
    • Video vezérlő
    • Soros-párhuzamos vezérlő
    • USB vezérlő
    • HDD vezérlő
  • CPU-eszközvezérlő kommunikációja
    • Memórialeképezésű I/O, Megszakítás. DMA

Megszakítások

  • Ha egy I/O eszköz "adatközlésre kész", ezt egy megszakításkéréssel jelzi.
  • Szoftveres vs hardveres megszakítás
    • szoftveres: gépi kódú utasítás végzu, multitask esetén trap-nek hívják
  • Megszakításnak száma van
  • Interrupt request level:
    • minden CPU tartalmaz egy regisztert ami az aktuális IRQL értéket tartalmazza
    • Egy folyamat prioritása nem azonos az IRQL értékkel
    • A 0 szint a folyamatok IRQL szintje (kernel, user folyamatok is)

Források

Elmaradt óra

Ez az óra elmaradt, és nem tartottak pótló órát.

11. Előadás - ZH

12. Előadás - ZH

Operációs rendszerek gyakorlat

Alapadatok

Idő: Kedd, 15:00 - 16:00
Helyszín: Déli Tömb 2-108 (PC5)
Oktató: Bende Imre
Csoport: 12

Értékelés

  • 2 évfolyam zárthelyi
      1. elméleti kvíz előadás anyagából
      1. kódolós a félév végén
  • 2 beadandó
    • Nincs rá pont, csak teljesítés a fontos

Források

C bevezető

A C nyelv alakpjait ismételtük át (argumentumok, random szám generálás, stringek)

Források

Rendszerhívások, fájlkezelés

Fontos függvények

FüggvényLeírás
statFájl statisztikák
ctimeIdőkonverzió
getpwuidInfó az user-ről (password database-ből)
opendir, closedirDirectory megnyitása/bezárása
readdirDirectory olvasása (mindig a következő elemet adja vissza)
open, close, fopen, fcloseFájl megnyitása és bezárása
read, writeFájl olvasása/írása
lseekFájl offset beállítása
fgetsEgy bizonyos mennyiségű adat beolvasása
feofEOF-nál járunk-e?
accessFájl elérhetőségének/hozzáférés tesztelése

Források

Processzkezelés

Fontos függvények

FüggvényLeírás
forkchild process létrehozása
waitpidvár, a míg lefut a child process
execvlefuttat egy process-t, nem adja vissza az irányítást (csak hiba esetén)
systemlefuttat egy parancsot, vissza adja az irányítást
fcntllock-ok kezelése

Források

Signal

Fontos függvények

FüggvényLeírás
signalegy megadott signal-ra meghív egy függvényt
pausevár, amíg nem kap signal-t
killmegöl egy processzt, adott kóddal
sigaddsetsigset-hez adás
sigdelsetsigset-ből eltávolítás
sigemptysetsigset kiürítése
sigprocmaskblokkolni, vagy unblock-olni tusjuk a halmazban szereplő signalokat

Források

5. Pipe

Fontos függvények

FüggvényLeírás
sigqueueadatot küld a signal-al együtt
alarmx idő elteltével küld egy SIGALARM jelzést
raisesaját processznek küld jelzést
settimertimer beállítása
mkfifoFIFO csővezeték létrehozása
unlinkcsővezeték megszüntetése
pipeíró/olvasó névtelen csővezeték létrehozása

Források

Messages, shared memory, semafor

Fontos függvények

FüggvényLeírás
ftokkulcs létrehozása
msggetüzenetsor létrehozása
msgctlüzenetsor törlése (is)
msgsndüzenet küldése
msgrcvüzenet fogadása
shmgetosztott memória létrehozása
shmatosztott memória hivatkozást teszünk
shmdtosztott memória hivatkozás megszüntetése
shmctlosztott memória törlése (is)
semgetszemafor létrehozása
semctlszemafor beállítás
sem_openszemafor létrehozás
sem_postszemafor állapot +1
sem_unlinkszemafor törlés
sem_waitszemafor állapot várás és -1
semopszemafor művelet

Források

7. Beadandó bemutatás

8. Message queue

Fontos függvények

FüggvényLeírás
mq_openmessage queue létrehozása
mq_sendüzenet küldése üzenetsoron
mq_receiveüzenet fogadása üzenetsoron
mq_closeüzenetsor bezárása

Források

9. Feladatmegoldás

Források

10. Feladatmegoldás

11. Feladatmeholdás

12. Beadandó bemutatás

Szoftver mély neuronhálók alkalmazásához előadás

Alapadatok

Idő: Hétfő, 18:00 - 20:00
Helyszín: Északi Tömb -1.75 Konferenciaterem
Oktató: Varga Viktor és Kovács Bálint
Csoport: 1

Értékelés

  • 3-4 canvas kvíz röpdolgozat
    • Nem kötelező, de érdemes megcsinálni
  • 3 kötelező házifeladat
  • Szóbeli vizsga
  • Szorgalmi házi feladat

Források

Bevezetés a gépi tanulás feladataiba és fajtáiba

Gépi tanulás lényege

A feladat konkrét megoldási algoritmusának ismerete nélkül tanuljuk meg megoldani a feladatot.

  • Mintapéldák segítségével adjuk meg, hogy mi a feladat helyes megoldása
  • Egy paraméteres modellhez keresünk olyan paramétereket melyekkel a modell helyesen oldja meg a feladatot.

Milyen feladatokra alkalmazható?

  • Ha közelítően optimális megoldás is megfelelő.
  • Ha nem ismert konkrét algoritmus, ami megoldja a feladatot.
  • Ha nem gazdaságos egyedi algoritmust fejleszteni a problémára.
  • Ha a feladatot csak mintapéldák segítségével tudjuk formálisan definiálni.

Példa: Különböző objektumok pozíciójának detektálása fényképen.

Milyen feladatokra nem ideális?

  • Ha a probléma hatékony megoldása ismert és könnyen algoritmizálható.
  • Ha a közelítő eredmény nem elégséges.

Példák:

  • Veszteségmentes tömörítés
  • Rendezés
  • A legtöbb pontosan definiált szabályrendszer szerint működő szoftver.

Gépi tanulási módszerek

Módszerek három főbb csoportja:

  • Felügyelt tanulás
  • Felügyeletlen tanulás
  • Megerősítéses tanulás

Felügyelt tanulás

Adott: A tanítóminta (training set), input-címke párok halmaza

(a zárójeles felső index nem hatvány, hanem az elemeinek indexe)

Feladat: A címke (az elvárt output) minél jobb becslése az inputból.

Azaz, keresünk olyan függvényt (hipotézisfüggvény), melyre:

(a hipotézisfüggveny x inputból becsli az y címkét.)

Példa 1

Becsüljük meg az autók számát egy adott városban, ha ismerjük a város lakosságának számát.

: egy adott város lakosságának száma
: egy adott városban megtalálható autók száma

Milyen hipotézisfüggvényt keressünk? Az autók száma közel arányos a város lakosságának számával

lineáris hipotézisfüggvény:

a hipotézisfüggvény paramétere, ebben az esetben az egyenes meredeksége lesz...

Példa 2

A mintaelemek nem feltétlenül egy input és egy címkéből állnak... Becsüljük meg a képen látható emberek életkorát.

: egy kép (színes, rögzített felbontás) : a fényképen található személy életkora.

Milyen hipotézisfüggvényt keressünk?

A lineáris hipotézisfüggvény nem biztos, hogy a legjobb választás...

Helyette, használjunk egy igazán bonyolult függvényt, egy konvolúciós mély neuronhálót!

A felügyelt tanulás két fő feladata

Regresszió: Folytonos értékű címke (a címkehaémaz végtelen) \ver Y \vert = \infty Példa: Autók számának, vagy életkor becslése

Klasszifikáció: Diszkrét értékű címke (véges címkehaémaz) Példa: Mintaelemek kategorizálása, mi a foglalkozása a képen szereplő személynek?

Hogyan állapítjuk meg mennyire jó a becslés?

költségfüggvény segítségével.

A költségfüggvény megadja, hogy mennyire tér el a valódi címke és a becslésük adott paraméter értékek esetén.

Például:

Keressük azokat a paramétereket, melyekkel a hipotézisfüggvényünk jól közelíti meg a velódi címkét, azaz a költségünk minimális.

Megkeressük (tanuljuk) az optimális paramétereket a tanítóhalmazon, majd új, címkézetlen adathoz is tudunk becsülni címkét a betanított modellel.

A felügyelt tanulás alkalmazásai

  • Objektumdetektálás, képszegmentálás
    • : egy fénykép
    • : A képen található objektumok köré írt téglalap koordinátái, az objektum kategóriái, vagy pixel szintű kategóriatérkép.
  • 2D / 3D humán pózbecslés képről
    • : egy fénykép
    • : A képen található személyek ízületeinek 2D vagy 3D koordinátái
  • Optical Flow becslés - két képkocka pixeleinek megfeleltetése egymással
    • : Egy videó két egymást követő képkockája
    • : Az első képkocka minden pixeléreegy-egy elmozdulásvektor, amely a második képkocka valamelyik pixelére mutat.

A felügyelt tanulás problémája:

  • Az állatok / emberek általában nem szorulnak ra konkrét input-output párok jelenlétére, ahhoz, hogy tanuljanak.
  • A címkézett adat előállítása nagy mértékű humán munkát igényelhet, címkézetlen adat viszont rengeteg van.

Felügyeletlen tanulás

Címke hiányában a feladat nem egyértelmű...

Többféle konkrét feladat lehetséges:

  • Klaszterezés: Valamilyen hasonlósági reláció alapján a mintaelemek csoportosítása.
  • Tömörítés: Az adat jellegének ismeretében sokkal jobb tömörítési ráták érhetőek el, mint a hagyományos algoritmusokkal.
  • Példagenerálás: Új, az adatbázishoz hasonló mintaelemek generálása (a minta eloszlásának tanulása)

Klaszterezés

  • Marketing, célzott reklám, ajánlórendszerek: hasonló ügyfelek csoportosítása célozott ajánlatokhoz.
  • Klasszikus computer vision, pl. képszegmentálás
  • Anomális (outlier) detektálás

Tömörtés / dimenziócsökkentés

  • Bizonyos fajta adat jellegéhez illeszkedő tömörítés
  • Kevesebb tárhely, sávszélesség használat.
  • Tömörebb reprezentációval sokszor könnyebb dolgozni és könnyebb lehet megtalálni a hasonló elemeket.
  • 2-3 dimenziós reprezentációban a mintaelemek elhelyezése még vizualizálható is.

A tömörítés / dimenzió redukció feladata jól definiált, azonban a hatékony tömörítés kihasználja, hogy a tömörített adatok hasonló jellegűek. Sok különböző fajta adat tömörítéséhez nehéz lenne egyedi algoritmusokat írni.

Feladat formális megadása

: Az input ? A tömörítést végző hipotézisfüggvény, pl. egy autoenkoder neuronháló.

költség: közelítse meg minél jobban -et (jó rekonstrukció)

Felügyeletlen tanulás alkalmazásai

  • Zajcsökkentés
  • Intelligens felskálázás
  • Példagenerálás
  • DeepFake
  • Kódgenerálás
  • Szöveggenerálás

Megerősítéses tanulás

Markov Döntési Folyamat (MDP)

  • input-címke párok helyett állapot-akció párok.
  • Az akciónk nagyban befolyásolja a következő állapotunkat.
  • költség helyett jutalom (nem feltétlen azonnal)
  • Cél: hosszútávon maximalizáljuk a jutalmak összegét

Példa: Automata autó
  • - állapot: Az autó sebessége, az autó környezete
  • - akció: Gázpedás, fékpedál, kormény forgása
  • - jutalom:
    • Eljutottunk a célhoz nagy jutalom
    • Elütöttünk valakit nagy büntetés
    • Nem tartottuk be a sebességhatárt kisebb büntetés

A mesterséges intelligencia főbb kérdései

  • Általánosító képesség: A betanult modellünk memorizálja a tanító példákat egyenként, vagy valóban “hasznos” dolgokat tanul?

  • Magyarázhatóság: A kritikus alkalmazásokban használt szoftvereket behatóan tesztelik, formálisan verifikálják sokszor.
    A deep learning módszerei csak tapasztalati úton tesztelhetők, nem tudjuk róluk megmondani, hogy “logikus módon” hozták-e a döntéseiket
  • Boztonság - adversarial attack: Akár a neuronháló architektúrája és paramétereinek ismerete nélkül kereshető kismértékű speciális zaj, mellyel módosítva az inputot, a becslés drasztikusan változik.

Szoftver

Python

  • Magas szintű
  • Automatikus memóriakezelés
  • Futásidejű típushozzárendelés és ellenőrzés
  • Interpretált nyelv
  • Egyszerű szintaxis
  • Hordozható
  • Rengeteg eszköz, könyvtár

Szóval kényelmes és gyors fejlesztést tesz lehetővé, de lassú végrehajtás és futásidőben kiderülő hibák.

A számításigényes műveleteinket hatékony, más nyelven írt könyvtárak segítségével valósítjuk meg. A Python-t csak a szkriptelésükre használjuk!

NumPy

  • Vektorizált programozás, vektorműveletek.
    • A grafikus kártyák a vektorizált műveletekre optimalizáltak.
    • A gépi tanulásban használt műveletek szinte mindig vektorizálhatóak.
    • A vektorizált programozással írt kód általában sokkal tömörebb.
  • Egy tömb elemének hivatkozása
  • dimenziós tömbök
  • Broadcasting

Keras

  • Tensorflowra épülő magas szintű könyvtár neuronhálókhoz.

Google Colab

Colab

Források

Regressziós technikák

Regresszió

Regresszió: folytonos értékű címke (a címkehalmaz végtelen)

Példa: autók számának, vagy életkor becslése.

Lineáris regresszió

Hipotézisfüggvény: nagyon egyszerű (lineáris) hipotézisfüggvény:

a hipotézisfüggvény paramétere, ebben az esetben az egyenes meredeksége lesz.

Költségfüggvény

Hogyan állapítjuk meg mennyire jó a becslés?

A költségfüggvénnyel:

A költségfüggvény megadja, hogy mennyire tér el a valódi címke és a becslésünk adott paraméter értékek esetén.

Lineáris regresszió esetén a költségfüggvény:

Azaz, a hipotézisfüggvény által becsült címkék és az igazi címkék különbségének a négyzete, átlagolva a mintaelemek felett: MSE (Mean Squared Error, átlagos négyzetes eltérés).

A feladat tehát:

Keressük azt az optimális paramétert (), mellyel minimális a költség, azaz a címke predikciónk átlagos négyzetes eltérése az igazi címkétől.

Grádiens módszer

Honnan tudjuk, hogy merre kell lépnünk, hogy a költség csökkenjen?

Nézzük meg merre lejt leginkább a költségfüggvény az aktuális paraméterértékben állva!

Mi adja meg meredekségét egy adott pontban?

  • a deriváltja a pontban.

Gradient descent: Iteratívan lépegetünk -val, abba az irányba, amerra a legnagyobb a lejtése a költségfüggvénynek az aktuális -ban.

repeat until convergence {
	grad := J'(θ)
	θ := θ - α * grad
}

: learning rate

Bias

Mi hiányzik?

Az eddigi modellünk túlzottan limitált. A hipotézisfüggvény egy olyan egyenes volt, amely az origón kellett, hogy átmenjen

A meredekség mellé egy konstans (bias / intercept) paramétert is bevezetünk.

Új hipotézis:

A költségfüggvény továbbra is MSE, de a hipotézis függvény megváltozott.

A költségfüggvény továbbra is kvadratikus. Mivel már két paraméterünk van, egy elliptikus paraboloid.

Hogyan válasszunk paramétereket, hogy a költség csökkenjen?

Használjuk a gradiens módszert: lépegessünk a legnagyobb meredekségű lejtés irányába.

Ezt az irányt egy adott pontban a gradiens vektor fogja megadni, melynek elemei a J költségfüggvény parciális deriváltjai az egyes paraméterek szerint.

A költségfüggvény parciális deriváltjai:

Grádiens módszer két paraméter esetén

repeat until convergence {
	grad0 := J'{θ0}(θ0, θ1)
	grad1 := J'{θ1}(θ0, θ1)
	
	θ0 := θ0 - α * grad0
	θ1 := θ1 - α * grad1	
}

{}: szerinti parciális derivatív.

Garantált-e, hogy a gradiens módszerrel megtaláljuk a lineáris regresszió optimális megoldását?

  • Megfelelően kicsi esetén igen.

Garantált-e, hogy a gradiens módszerrel megtaláljuk tetszőleges költségfüggvény globális minimumát?

  • Nem. Eljuthatunk az egyik lokális minimum pontba, de amennyiben a költségfüggvény nem konvex, akkor nem garantált, hogy ez a globális minimum lesz.

Miért pont négyzetes hibát használunk költségként?

  • Ha analitikusan szeretnénk megoldani, akkor ez egyszerűbb
  • Mivel a költségfüggvény kvadratikus, ezért a deriváltja lineáris, így a lépésméret "magától" leskálázódik, ahogy közelebb érünk az optimumhoz.

Források

Többváltozós lineáris regresszió, klasszifikáció, logisztikus regresszió

Több input-változós lineáris regresszió

Hipotézisfüggvény változó esetén:

Vektoros alakban:

Költségfüggvény változó esetén:

Feature scaling

Az input változók azonos nagyságrenre hozása

  • intervallumra min-max skálázás
  • sztenderdizálás (ez preferált)

Klasszifikáció

Példa: kategorizáljuk a fényképeket a rajta szereplő állatok szerint.

Pl. "kutya" = 1, "macska" = 2, "papagáj" = 3

Ekkor a regresszióval ez a baj: macska = 0.5 * "kutya" + 0.5 * "papagáj"

Ehelyett valószínűséget fogunk becsülni

  • Mennyi a valószínűsége, hogy egy mintaelem az adott kategóriába tartozik?

Bináris klasszifikáció

A becslés folytonos érték, és mivel valószínűséget becslünk, a címkék gyakorlatban folytonos értékek, így megpróbálkozhatunk lineáris regresszióval.

Sigmoid függvény

A lineáris regresszió nem ideális klasszifikációs feladatokhoz, mert nagyon érzékeny a kiugró értékekre.

Használhatunk inkébb sigmoid függvényt:

Logisztikus regresszió:

Logisztikus regresszió

Itt már a mean squared error költségfüggvény nem lesz konvex, ha a az új -et behelyettesítjük.

Itt inkább ezt használjuk (cross entropy):

Ezután használhatjuk a gradiens módszert.

Források

Python, numpy

Python alapok

  • Tömor, magas szinten absztraktált
  • Interpretált
  • Dinamikus, erős típusrendszer
  • Többparadigmás
  • Open-source
  • Párhuzamosítási lehetőségek korlátozottak
  • Egyes feladatokhoz lassú lehet

Python objektumok

  • Memóriacímük lekérhető az id() függvénnyel
  • Vannak alaptípusok, konténertípusok és felhasználó által definiált típusok, lekerhető az type() függvénnyel.
    • vannak mutable és immutable típusok

Iterálható konténertípusok

  • Képesek egyesével visszaadni az elemeiket
  • Így lehet rajtuk iterálni, pédául for ciklussal
  • A gyakorlatban ez azt jelenti, hogy értelmezhető rá az __iter__() függvény, mely egy iterátor objektumot ad vissza
  • A __next__() függvénnyel érjük el a következő elemet
  • Iterátort össze lehet gyűjteni szekvencia típussá
  • StopIteration exceptiont vált ki, ha elfogynak az iterálható elemek.

Adatszerkezetek

  • Lista
    • Elemei lehetnek különböző típusúak
    • Dinamikus memóriafoglalás
    • Tömbként van implementálva
    • Több elem elérése: List[from:to:step]
  • Tuple
  • Set
    • Minden elem egyszer szerepelhet
    • Vegyes típusok is lehetnek, de csak immutable típusok
  • Dict

Függvények

  • Opcionális paraméterek (default értékkel)
  • Lambdák

Vezérlési szerkezetek

  • Kódblokkok indentációval vannak jelölve

  • Szülő utasítás után indentált blokk kell

  • Egy blokk ugyan annyi karakterrel van indentálva

  • Indentáció lehet tab, vagy space, de keverni nem lehet

  • if-elif-else

  • for, while

  • list comprehension

Hasznos függvények

  • map()
  • filter()
  • zip()
  • enumerate()
  • min(), max()
  • any(), all()

Hibakezelés

  • Szintaxis hibák: ha az interpreter nem tudja értelmezni a kódot
  • Futási idejű exception-ök
  • assert-ek
  • unittest modul: assertTrue(), assertEqual()

Numpy

  • Gyors numerikus számítások
  • Hatékony nyelveket írt, párhuzamosító kódot hív meg.
  • Optimálish cache használat
  • Sok neurális háló könyvtár épül numpy-ra

ndarray

  • Homogén típusú elemeket tartalmaz, 0-tól indexelve
  • Meghatározó attribútumok: shape, dtype
  • Az elemek száma nem változhat, de az alakja igen
  • A memóriában folytonosan, egy dimenzióban helyezkednek el az adatok

Univerzális függvények

  • Elemenkénti műveleteket hajtanak végre ndarray-eken
  • Egyszerű algebrai függvények
  • A broadcasting megengedi, hogy a műveleteket olyan tömbökön is végrehajtjuk, amelyeknek nem egyezik meg teljesen az alakjuk

Broadcasting

  • Ha két tömb dimenziójának száma nem egyezik, a kevesebb dimenzióval rendelkező tömb új első tengelyeket kap. Éppen annyit, hogy dimenzióik száma egyezzen.
  • A második szabály, ha valamelyik tengely mentén az egyik tömb hossza egy, az a tömb azon a tengly mentén annyiszor ismétlődik, hogy a hossza egenlő legyen a másik tömbével.

Advanced indexing

  • Advanced index esetén slice-ok helyett használhatunk bármilyen szekvenciát, ami integereket vagy logikai változókat tartalmaz
  • Mindig másolatot ad vissza az egyszerű indexeléssel szemben
  • Állhat advanced indexelt tömb értékadás bal oldalán, ilyenkor nem készül másolat, és az eredeti tömb íródik felül.

Hasznos függvények

  • Szélsőértékek:
    • np.max(), np.min()
    • np.argmax(), np.argmin()
  • Aretmetikai műveletek
    • np.sum(), np.cumsum()
    • np.prod(), np.cumprod()
    • np.mean(), np.var(), np.std()
  • Logikai műveletek
    • np.all()
    • np.any()
  • ndarray.flatten()
  • np.concatenate()
  • np.stack()
  • np.linspace(), np.logspace()
  • np.unique()
  • np.bincount()
  • np.diff()

Források

Feladatmegoldások

Jövő órán röpdolgozat a pythonos órák anyagából.

Források

Betanítási költség, túltanulás, alultanulás, neuron

Lineáris regresszió

  • A lineáris regresszió jól működik olyan mintán, ahol a változók lineáris kombinációja jól közrlíti a mintát.
  • Mit tehetünk, ha ez nem áll fenn?
  • Pl.: Polinómiális regresszió (a mintákat hatványozzuk, amit keresünk, azok az együtthatók)
    • Lineáris regresszióként megoldhatjuk, ha behelyettesítjük az előre kiszámolt változók hatványokat.
    • Az új változókra alkalmazhatunk feature-scaling-et, hogy csökkentsük a hatványozás okozta nagyságrendi problémákat.

A minta felosztása

Modell életciklusa:

  1. training set
  2. test set
  3. validation set

A költség alakulása a betanítás során

Alultanulás:

  • Pl. ha polinomiális regresszió során túl alacsony fokú polinomot használunk, vagy kicsi, vagy "fura" a training set
  • A teszt hiba (és a training is) nagy.

Túltanulás

  • Pl. Ha túl kicsi a training set, és specializálódik a model erre a training set-re
  • A training set hiba javul, de a teszt set-en nem változik, vagy nő
  • Így a model nem lesz elég generikus

Alultanulás és túltanulás elkerülése

  • Alultanulás: A modell komplexitása túl kicsi, bonnyolultabb modell szükséges.
  • Túltanulás:
    • A modell elég összetett ahhoz, hogy pontosan a tanítóhalmaz egyes elemeinek sajátosságaira fixál rá.
    • A modell komplexitását is csökkenthetjük, de ez nem kívánatos.
    • (L2) Regularizáció: hatalmas együtthatók csökkentése: a költségfüggvény büntesse a nagy együtthatókat (azoknak a négyzetüket).
    • Early stopping: Amikor a teszt halmazon mért költség elkezd nőni, akkor megálunk.
      • Ilyenkor a teszthalmazt is belevontuk a tanulásban (big no-no)
      • Ilyenkor használunk egy validációs halmazt is, amit a teszt halmaz helyett vonunk be.
      • A validációs halmazzal optimalizáljuk a "hiperparamétereket"

Betanítás folyamata

  1. hiperparaméterek konfigurációja
  2. paraméterek optimalizálása, hiperparaméterek megváltoztatása
  3. teszt futtatása, hibamérés

Neuron

  • Bemenetek kimenetek (konstans jel)
  • A bemenetekből egy lépcsőfüggvényel kapjuk meg a konstans kimenetet
  • Együttható
  • Bias
  • Aktivációs függvény
    • pl. sigmoid

Források

Elmaradt óra

Ez az óra elmaradt, és nem tartottak pótló órát.

8. Előadás

Multilayer perceptron

  • Az előző előadáson leírt neuronokat rétegekbe rendezzük, így egy komplexebb modell hozva létre.
  • : súlymátrixok és bias vektorok halmaza.
    • ahol a rétegben található neuronok száma.

Kétrétegű neuronháló hipotézisfüggvénye

  • Költségfüggvények egyelőre maradnak.
    • Klasszifikáció: logistic loss
    • Regresszió: MSE
  • A és aktivációs függvények fontosak, mert nemlinearitást adnak a hipotézisfüggvényhez, amely lehetővé teszi a tanulást. (különben nem nől a kifelyező erő, csak bonyolultabb lineáris regressziót kapunk)

Aktivációs függvények

  • sigmoid
  • tanh
  • ReLU

Mit tanul egy neuronháló?

  • Mit tanul egyetlen neuron?
    • Egyetlen lineáris döntési felületet (hiszen logisztikus regresszióról van szó)
  • A neuronháló ezen lineáris döntési felületek valamilyen kombinációját tanulja

Multiclass

  • Ebben az esetben az nem egy skalár, hanem egy vektor.
  • Multiclass klasszifikációnál használjuk a softmax függvényt az utolsó rétegen

Források

9. Előadás

Források

Elmaradt óra

Ez az óra elmaradt, és nem tartottak pótló órát.

Túltanulás elkerülése, konvolúciós hálózatok

Túltanulás elkerülése

  • adat auhmentáció
    • Képek: eltolás, forgatás, tükrözés, zaj, torzítás
    • Hang: nyújtás, frekvencia változatatás, zaj
  • dropout: nem minden neuron vesz részt mindig egyszerre a tanulásban

Konvolúciós neurális hálózat

Források

12. Előadás - nincs jegyzet

Szoftvertechnológia (F) előadás

Alapadatok

Idő: Kedd, 8:00 - 10:00
Helyszín: Déli Tömb 0-821 Bólyai János terem
Oktató: Szendrei Rudolf, https://swap.web.elte.hu/
Csoport: 90

Értékelés

  • Félévvégi teszt
  • Gyakorlati projekt

Források

Szoftverfejlesztési folyamat

Szoftverfejlesztés

A szoftverek nélülözhetetlen alkotóelemei a modern világnak.

  • Szémos célt szolgálnak
  • Különböző felépítésűek
  • emiatt megvalósításuk módja jelentősen eltérhet

A szoftverekben jelentős része hibás, a szoftverfejlesztési munkák jelentős része kudarcba fullad, ennek okai:

  • Egyre nagyobb számban, egyre összetettebb szoftverekre van szükség
  • Alacsonyabbak az elvárások a szoftverekkel szemben.

Emiatt nagy szükség van professzionális szoftverfejlesztésre

A szoftvertechnológia

Egy szoftvernek, mint terméknek gyártási technológiára van szüksége, amely garantálja a program funkcióit, minőségét, költségét és határidejét.

A szoftvertechnológia feladata szoftverek rendszerezett, felügyelt, minősített fejlesztése, működtetése és karbantartása

  • programok
  • dokumentáció
  • konfiguráció
  • adatok

A szoftverek többsége nagy méretű, nagy bonyolultságú programrendszer, amely

  • Rendszerint csapatmunkában készül
  • Hosszú élettartamú, karbantartást és bővítést igényel

Minőségi mutatók

A szoftvereknek megfelelő színvonalon kell biztosítania az elvárt funkciókat, amit a szoftver minőségi mutatóival (quality characteristics) írhatunk le

  • Karbantarthatóság
  • Megbízhatóság és biztonság
  • Hatékonyság
  • Használhatóság, hozzáférhetőség

Szoftvertechnológiai projekt

A szoftver fejlesztésének folyamatát projektnek, előállításának felügyeletét projektmenedzselésnek nevezzük.

A projektért felelős személy a projektmenedzser (project manager), aki

  • Biztosítja, hogy a szoftver megfelel az előírt minőségnek, és elkészül a megadott határidőre a költségkereten belül.
  • Szervezi, irányítja, ütemezi a projektben részt vevő csapat munkáját, és biztosítja a szükséges hardver és szoftver erőforrásokat.
  • Garantálja a módszerek és szabványok alkalmazását
  • Gondoskodik a projekt dokumentáltságáról

A szoftverfejlesztési csapatnak számos további tagja lehet, akik különböző szerepeket töltenek be, pl.:

  • Termékgazda: üzleti folyamatok, prioritások és elfogadási feltételek kezelése
  • Programgazda: fejlesztés ütemezése, feladatok elosztása és követése.
  • Tervező: szoftver magas szintű tervének elkészítése, technikai döntések kezelése
  • Fejlesztő: szoftver implementációja
  • Minőségbiztosítás: tesztelés tervezése, megvalósításai

A szoftver életciklus

Minden szoftver rendelkezik életciklussal, amely meghatározza létét a feladat kitűzésétől a program használatának befejezéséig.

Az életciklus általában négy fő fázisra bontható:

  1. specifikáció
  2. tervezés és implementáció
  3. verifikáció és validáció
  4. evolúció

Specifikáció

A specifikáció (software specification) célja a feladatot megoldó szoftver funkcióinak tisztázása, a rendszerre és a fejlesztésre vonatkozó elvárások megadása.

feltérképezi a követelményeket felhasználói, valamint fejlesztői szemszögből, lépései:

  • megvalósíthatósági elemzés
  • követelmény feltárás és elemzés
  • követelmény specifikáció
  • követelmény validáció

Eredménye a szoftver követelmény-leírása (software requirements specification)

Tervezés és implementáció

A szoftver tervezése és implementációja (software design and implementation) feladata a specifikáció átalakítása egy végrehajtható rendszerré.

Meghatározza a rendszer szerkezetét (felépülés), felületét (be- és kimenet), működését (alkalmazott algoritmusok, kommunikációs folyamatok)

A folyamat során elkészül a szoftver rendszerterve (software design description), amely tartalmazza a program statikus és dinamikus szerkezetét, a kommunikációs csatornák feltérképezését, az implementációs és tesztelési tervet.

Elkészíthető a szoftver prototípusa (prototype), amely a program egyszerűsített megvalósítását tartalmazza.

Az implementációhoz megfelelő szoftverfejlesztési környezetet kell használnunk, a programkód változásait verziókövetéssel tartjuk nyilván.

Az implementáció részeként az egyes programegységek tesztelése is megtörténhet.

A szoftverek tervezésének és programozásának módszerét nevezzük programozási paradigmának.

  • Meghatározza a programozási stílust, az absztrakciós szintet.
  • Meghatározza az alkalmazható programozási nyelvek körét is, és fordítva.

Validáció és evolúció

A verifikáció és validáció (software verification and validation) célja megmutatni, hogy a rendszer megfelel a specifikációnak, valamint a felhasználói elvárásoknak.

Az evolúció (software evolution) során új követelményeknek megfelelően bővítjük a szoftvert, illetve korrigáljuk a felmerülő hibákat.


További lépések is kísérhetik a fejlesztési folyamatot, pl.

  • kihelyezés (deployment): a program üzembe állítása, és elérhetővé tétele.
  • tréning és támogatás (training and support): a felhasználókkal való kapcsolattartás (annak biztosítása, hogy a szoftvert megfelelően tudják kezelni és használni)

A szoftver dokumentációja két részből tevődik össze:

  • felhasználói dokumentáció, amely tartalmazza a szoftver üzembe helyezésének, funkcióinak bemutatását
  • fejlesztői dokumentáció, amely tartalmazza a szoftver megvalósítását folyamatát és részletes ismertetését

Ütemterv

A szoftver életciklus fázisai (feladatai) további fázisokra (részfeladatokra) tagolhatóak, így egy hierarchikus feladatszerkezetet kapunk.

  • Az egyes feladatokra erőforrásokat és időkorlátot adhatunk
  • Az egyes feladatok között függőségeket állapíthatunk meg
  • Ezek alapjén elkészíthetjük a projekt ütemtervét
    • Tartalmazza a feladatok időbeli beosztását, függőségeit, felelőseit, így áttekinthetővé teheti az erőforrás szükségleteket.
    • Általában a specifikáció során készül el, de később módosulhat.

Mérföldkövek

A feladatokhoz mérföldköveket (milestone) rendelhetünk, amelyek lehetőséget adnak a projekt haladásában történő betekintésre.

  • A márföldkő egy adott cél adott időpontra történő elérését jelenti, így névvel, eseménnyel, céllal rendelkezik.
  • A mérföldkövek be nem tartása általában korrekciókat követel a projekt lefutásában.
  • Kellően konkrétnak, ellenőrizhetőnek, számonkérhetőnek kell lennie.
  • A fő mérföldkövek az egyes fázisok lezárását jelentik, ezen kívül számos további mérföldkő adható.

Az UML

A szoftverfejlesztési életciklust folyamatosan követi a modellezés, ennek eszköze az egységes modellezési nyelv (Unified Modeling Language, UML), amely egy öt pillérű szemléletrendszerrel rendelkezik:

  • Használati: a szoftver szolgáltatásai és azok kapcsolata a felhasználókkal.
  • Szerkezeti (statikus): a rendzser és a programegységek felépítése, kapcsolatai.
  • Dinamikus: a programegységek viselkedése.
  • Implementációs: a megvalósítás szempontjai, komponensei.
  • Környezeti: hardver és szoftver erőforrások.

Szoftvereszközök

A fejlesztőcsapat munkáját megfelelő szoftvereszközökkel kell alátámasztani

  • Projektirányítási eszközzel (project tracking system), amely támogatja a dokumentálást és a feladatok követését.
  • Fejlett tervezőeszközzel (case tool), ahol a fejlesztés folyamata és a felelősség is nyomon követhető.
  • Integrált fejlesztőkörnyezettel (IDE), amely elősegíti a csapatmunkát.
  • Verziókövető rendszerrel (revision control system), amely lehetővé teszi a programkód változásainak követését.
  • Folyamatos integrációs eszközzel (continuous integration), amely elősegíti a tevékenységek automatizálását.

A vízesés modell

A szoftverfejlesztési modell határozza meg az életciklus egyes fázisai közötti kapcsolatot, időbeliséget.

A legegyszerűbb fejlesztési modell a vízesés (waterfall) modell, amelyben az egyes fázisok lineárisan követik egymást.

  • Előre megtervezi a projekt időtartamát, ráfordításait.
  • Elvárja minden fázis megfelelő dokumentálását, amely tartalmazza annak eredményeit.
  • Előnyei: jól strukturált, dokumentált folyamatot biztosít.
  • Hátrányai: nem teszi lehetővé a követelmények megváltoztatását, nem készül fel az esetleges nehézségekre (nincs kockázatkezelés).

Prototípusok

A szoftverfejlesztés során felmerülő nehézségek könnyebben előreláthatóak, ha a szoftvernek elkészítjük a prototípusait (prototyping), amely lehet:

  • Horizontális prototípus: interakciós szempontból mutatja be a szoftvert.
  • Vertikális prototípus: egy adott funkciócsoport részletes megvalósítása.

A folyamat során megvalósított prototípusok a szoftver részévé válhatnak (evolutionary prototyping), vagy szolgálhatják csak a bemutatást/ellenőrzést, és ténylegesen nem kerülnek felhasználásra (throwaway prototyping).

A spirális modell

A (Boehm-féle) spirális modell egy kockázatvezérelt fejlesztési modell, amelyben a folyamat során elsőként prototípusok kerülnek megvalósításra, amelyek kiértékelése után kerül megvalósításra a tényleges szoftver.

  • A fejlesztés ciklusokban történik, amelyben az elkészített prototípusok, valamint a továbbfejlesztésével kapcsolatos kockázatok kiértékelésre kerülnek.
  • Előnyei: jobban alkalmazkodik a változó követelményekhez, a prototípusok lehetővé teszik a nehézségek előrelátását.
  • Hátrányai: költségesebb a prototípus elkészítése és a kockázatkiértékelés végett, továbbá a prototípusok megzavarhatják a felhasználót.

Az inkrementális modell

Az inkrementális modell több lépésből építi fel a folyamatot, és több változatban állítja elő a szoftvert.

  • Minden változat egy újabb funkcionalitással bővíti a szoftvert, a fázisok rövidek, gyors visszajelzésekkel.
  • Az egyes fázisok átfedésben vannak, és kihatnak egymásra.
  • Előnyei: gyorsan alkalmazkodik a változó követelményekhez, a felhasználó jobban követheti a fejlesztési folyamatot.
  • Hátrányai: kevésbé menedzselhető, tervezhető, áttekinthető, nehezebben validálható.

Agilis szoftverfejlesztés

Az agilis szoftverfejlesztés célja a gyors alkalmazásfejlesztés megvalósítása, inkrementális alapon.

  • A szoftver folyamatos fejlesztés és kiadás alatt áll (continuous delivery), a sebesség állandó, a változtatások minden lépésben beépíthetőek (welcome changes).
  • A működő szoftver az előrehaladás mérőeszköze, előtérben az egyszerűség, ugyanakkor folyamatos odafigyelés a megfelelő tervezésre, optimalizációra.
  • A fejlesztést általában önszervező, kis csapatok végzik, megosztott felelősséggel, folytonos interakcióval, gyors visszajelzésekkel.
  • Előnyei: jól alkalmazkodik a változtatásokhoz, hatékonyabbá teszi a fejlesztési folyamatot.
  • Hátrányai: egyes tényezői nehezen megvalósíthatóak, különösen nagyobb szoftverek esetén a megvalósításhoz képzett fejlesztők kellenek, a dokumentáció hiánya megnehezíti a későbbi evolúciót.

Az agilis Kiáltvány

Azzal leplezzük le a szoftverfejlesztés jobb módjait, hogy csináljuk és segítünk másoknak is csinálni. Ezen a munkán keresztül következő értékekhez jutottunk el:

  • Egyének és kölcsönhatások előnyben részesítése a folyamatok- és eszközökkel szemben.
  • Működő szoftver előnyben részesítése az átfogó dokumentációval szemben.
  • Ügyféllel való együttműködés előnyben részesítése a szerződéses megállapodással szemben.
  • Változásokra adandó válasz előnyben részesítése egy terv követésével szemben.

Habár a jobb oldali elemekben is van érték, mi sokkal értékesebbnek tartjuk a baloldali elemeket.

Scrum módszer

Az agilis fejlesztés menedzselését az egyes változatok előállítása szempontjából közelítik meg, amelyhez a Scrum módszer ad egy általános modellt.

  1. Architekturális tervezés, amely megadja a szoftver magas szintű vázát.
  2. Futamok (sprint), amelyek az egyes változatokat állítják elő, és rögzített hosszúságúak (2-4 hét).
  3. Projektzárás, a szükséges dokumentáció előállítása.

Nincs projektmenedzser, de minden futamnak van felelőse (scrum master), akinek a személye futamonként változik.

Minden futam egy összetett folyamat megtervezett lépésekkel

  • Feladatok felmérése (select), lefejlesztése (develop), áttekintése (review), kiértékelése (assess).
  • A megvalósítandó funkciók a termékgazdával egyetértésben kerülnek kiválasztásra a teendők listájából (product backlog).
  • Naponta rövidebb megbeszélések (stand-up meeting) a teljes csapat számára.
  • Ciklus elején/végén hosszabb megbeszélések (sprint planning, sprint review), valamint visszatekintés (retrospective) a termékgazdával.

Csoportosítás

A szoftverfejlesztési modelleket 3 csoportba soroljuk.

  • Terv-vezérelt (plan-driven): célja a rend fenntartása, a szoftver fejlesztése előzetes specifikáció és tervezés alapján történik, igyekszik garantálni a minőséget.
  • Agilis: célja a változáshoz történő alkalmazkodás, az egyszerűség, így kevésbé garantálja a minőséget.
  • Formális: garantálja a minőséget, az implementáció bizonyíthatóan helyes megoldását adja a specifikációnak.

A gyakorlatban a fejlesztőcsapat és a feladat befolyásolja leginkább a választott módszert, sokszor különböző módszerek vegyítve jelennek meg.

Források

Specifikáció és követelménymenedzsment

A specifikáció

A specifikáció célja a eladatot megoldó szoftver funkcióinak tisztázása, a rendszerre és a fejlesztésre vonatkozó elvárások megadása.

  • Feltérképezi a követelményeket felhasználói, valamint fejlesztői szemszögből, lépései:
    • megvalósíthatósági elemzés
    • követelmény megállapítás és elemzés
    • követelmény specifikáció
    • követelmény validáció
  • Eredménye a szoftver követelmény-leírása.

Megvalósíthatósági elemzés

A megvalósíthatósági elemzés (feasibility study) azt vizsgálja, hogy a szoftver megvalósítható-e, és üzletileg megtérül-e a befektetés, ezen belül:

  • Milyen erőforrások szükségesek, és ezek rendelkezésre állnak-e
  • Mi a megvalósítás költsége, időtartama
  • A fejlesztést követően a szoftver igényel-e üzemeltetést, karbantartást, és ez milyen költségeket jelent

Az elemzést gyorsan, alacsony költségek mellett kell elvégezni.

Amennyiben a fejlesztett szoftver egyedi, az elemzést ajánlattétel követi a vevők számára.

Követelmény feltárás és elemzés

A követelmények feltárása és elemzése (requirements elicitation and analysis) során követelményeket állapítunk meg, három lépésben:

  1. Kutatás: meglévő rendszerek, egyeztetés, interjúk a lehetséges felhasználókkal, kezdeti követelmények meghatározása.
  2. Osztályozás: a követelmények rendezése, csoportosítása, alrendszerekhez történő besorolás.
  3. Prioritizálás: fontossági sorrend felállítása, ütközések feloldása, szükségtelen, vagy megvalósíthatatlan követelmények elhagyása.

Követelmények feltárása

A követelmények feltárását és leírását számos tényező nehezítheti.

  • A vevők bizonytalanok az elvárásokban
  • A vevők nem egyértelműen fejtik ki az elvárásokat.
  • A vevők nem rendelkeznek informatikai ismeretekkel.
  • A vevők nem közvrtlenül a szoftver felhasználói, így a felhasználói igények eltérhetnek.
  • A körülmények változhatnak a specifikáció során

A követelmények alapján létrehozhatóak a rendszer modelljei, prototípusai, pl.:

  • Felhasználói felület terve, menürendszer
  • Egyszerűsített vizuális megjelenés, animáció

Követelmények típusai

  • Funkcionális:: a szoftver által nyújtott szolgáltatások, reakciók, viselkedések leírása
  • Nem funkcionális: megszorítások a szolgáltatásokra, a viselkedésre
    • Termék követelmények: hatékonyság (teljesítmény, méret), megbízhatóság, biztonság, hordozhatóság, felhasználhatóság.
    • Menedzselési követelmények: környezeti, működési, fejlesztési.
    • Külső követelmények.
Termék Követelmények
  • Hatékonyság: a szoftver által a hardver erőforrásokra (processzor, memória, merevlemez, sávszélesség) való támaszkodás mértéke, amelyet a lehető legkisebbre kell szabni.
  • Megbízhatóság: a szoftver által biztosított funkcionalitás garantálása (correctness) a környezetben bekövetkezett változások ellenére, abban az esetben is, amennyiben azok nem felelnek meg a specifikációban elvárt követelményeknek (robustness)
  • Biztonság: a szoftverben által tárolt adatok védelmének mértéke az illetéktelen hozzáféréssel szemben.
  • Hordozhatóság: szoftver kompatibilitásának mértéke különböző hardver és szoftver platformokkal, valamint az azokra történő átvitel könnyedségének mértéke.
  • Felhasználhatóság: a szoftver (használatának, telepítésének, üzemelésének) elsajátításának könnyedsége a különböző képzettségű és hátterű felhasználók számára; akadálymentesség.
Menedzselési követelmények
  • Környezeti:
    • a rendszer által igényelt hardver erőforrások
    • a rendszer használatához szükséges további szoftverek, amelyekkel együttműködik.
  • Működési:
    • a felhasználás paraméterei (gyakoriság, időtartam, felhasználók száma, rendelkezésre állás mértéke)
    • a felhasználók jellege (szaktudás, informatikai ismeretek)
  • Fejlesztési:
    • a fejlesztés módszertana, programozási paradigmái, szükséges eszköztára.
    • a felhasznált programozási nyelvek és könyvtárak.
Külső követelmények
  • Jogszabályoknak való megfelelés
  • Etikai kérdések a felhasználó adataival, és azok továbbadásával szemben.
  • Tulajdonjogi kérdések a begyűjtött adatokkal, az esetleges külső fejlesztésekkel kapcsolatban.

Követelmény specifikáció

A követelmény specifikáció (requirements specification) az elemzés során kapott információt alakítjuk át egységes alakba.

A felhasználói szinten csak alapjaiban, a fejlesztői szinten részletesen megadjuk.

A leírás történhet:

  • Beszélt nyelven
  • Formalizált leírással
  • Formális matematikai leírással
  • Formális leírónyelvek segítségével
  • Metrikák segítségével

Használati esetek

A használati esetek (use case) diagramja azt ábrázolja, miként működik együtt a felhasználó a rendszerrel.

Szabványos módja a funkcionális követelmények leírásának.

A diagram elemei:

  • Aktor: a felhasználó, aki a rendszert használja
  • Funkció: a rendszer egy szolgáltatása, viselkedési mintája
  • Reláció: kapcsolat a funkció és az aktorok között

A relációk típusai:

  • Használat: az aktor igénybe veszi a rendszer egy funkcióját. (csak aktor és funkció között)
  • Általánosítás: egyik funkció, vagy aktor egy bővebb halmaz, mint a másik.
  • Tartalmazás: egyik funkció részét képzi egy másik funkciónak.
  • Kiterjesztés: egyik funkció kiterjesztése egy másik funkcióval.
  • Előfeltétel: egy funkciónak meg kell előznie egy másik funkciót
  • Rákövetkezés: egy funkciót követ egy másik

Felhasználói történetek

A funkciók részletesebb kifejtését teszik lehetővé a felhasználói történetek.

A felhasználók által végzett tevékenységsorozatokat és azok lehetséges kimeneteleit adják meg különböző szituációkban.

A történetben azonosítunk egy szerepkört (user role) és egy célt, valamint megindokoljuk a cél szükségesség.

Egy történetre egy, vagy több esetet írhatunk fel, amelyben adott környezetben (given) egy tevékenységet végzünk (when), és erre valamilyen hatást (then) várunk.

Az eseteket úgy kell megfogalmaznunk, hogy az összes körülményt és lehetséges bemenetet figyelembe vesszük.

  • Különös tekintettel a hibalehetőségekre (pl. hibás bevitel)
  • Az egyes történetek egyúttal megadják a végleges alkalmazás funkcionális teszteseteit.

Követelmény validáció

A követelmények validációja (requirements validation) ellenőrzi a megadott specifikáció valószerűségét, konzisztenciáját és teljességét.

Mivel a követelményeknek ellenőrizhetőnek kell lennie, alkalmasnak kell lennie tesztesetek előállítására.

A validáció eredményezhet:

  • Prototípust, amelynek célja a követelmények teljesíthetőségének rövid távú ellenőrzése.
  • Teszteseteket, amelyek a végleges alkalmazáson ellenőrzik a követelmények teljesülését elsősorban a funkcionális követelményekre.

Követelmény-leírás

A követelmény-leírás tartalmazza a szoftver

  • Célját, helyét, szükségességét, előzményeit, előnyeit
  • A funkcionális és nem funkcionális követelmények leírását felhasználói és fejlesztői szemszögből.
  • A rendszer átfogó architektúráját és modelljeit
  • Áttekintést az implementáció és az evolúció számára
  • Fogalomjegyzéket

A követelmény-leírás felépítése:

  1. előszó (célközönség, dokumentum-történet)
  2. bevezetés (szoftver célja, helye, szükségessége, előnyei)
  3. fogalomtár (technikai áttekintés)
  4. követelmények felhasználói leírása
  5. rendszer architektúra (magas szintű áttekintés)
  6. követelmények fejlesztői leírása
  7. rendszer modellek (pl. felület terv, adatformátum leírás)
  8. rendszer evolúció (várható fejlesztések, karbantartás)
  9. függelék (pl. adatbázis terv, becsült hardver szükségletek)
  10. tárgymutató

Források

Objektumorientált tervezés

Objektumok, osztályok

Az objektumorientált tervezés során a rendszert az objektumok mentén építjük fel, ahol az objektum

  • valóság absztrakcióját adja
  • biztosít egy elvárt funkcionalitást
  • adat es működés egymásba burkolásából épül fel

Egy adott feladatban az objektumokat be kell azonosítnaunk azáltal, hogy

  • milyen funkciókat azonsítottunk az elemzés során, és azok milyen adatokkal dolgoznak
  • a valóságban milyen építőelemeket tudnánk megfeleltetni a funkcióknak

A tervezés fázisai

A tervezés általában több fázisból épül fel, amely során finomítunk a terven, mivel meglehetősen nehézkes már az első fázis alapján beazonosítani a szükséges objektumokat, és azok felépítését.

Ezért, minden fázisban

  • bevezethetünk új osztályokat a beazonosított feladatokra
  • tovább pontosíthatjuk a már létező osztályok felépítését, az implementációs megkötéseket
  • felbonthatunk osztályokat, amennyiben túl bonyolulttá, túl szerteágazóvá válnak
  • összevonhatunk osztályokat, amennyiben túlzottan elaprózódnak

A tervezés alapelvei (SOLID)

  • Single responsibility principle
  • Open/Closed principle: a programegységek nyitottak a kiterjeztésre, de zártak a nódosításra
  • Liskov substitution principle: az objektumok helyettesíthetőek altípusaik példányával
  • Interface segregation principle: egy általános interfész helyett több kliens specifikus interfész
  • Dependency inversion principle: az absztrakciótól függünk, nem a konkretizációtól

Az architektúra

Szoftver architektúrának nevezzük a szoftver fejlesztése során meghozott elsőfleges tervezési döntések halmazát.

Ezek erősen kihatnak a rendszer felépítésére, viselkedésére, és megváltoztatásuk később nehézkes.

A fő feladata a rendszer magas szintű működésének meghatározása, a komponensek és relációk kiépítése.

Minták a tervezésben

A monolitikus architektúra

A legegyszerűbb felépítést adja.

  • nincsenek programegységekbe szétválasztva a funkciók
  • a felületet megjelenítő kód vegyül az adatkezeléssel, a tevékenységek végrehajtásával

A modell/nézet architektúra

Különválasztja a felhasználói felülettel kapcsolatos részeket a ténylegesen a feladat megoldását szolgáló funkcionalitástól.

  • a modell tartalmazza a feladat végrehajtását szolgáló programegységet (üzleti logikát)
  • a nézet tartalmazza a grafikus felhasználói felület megvalósítását,a felület elemeit és az eseménykezelőket
  • a nézet ismerheti a modell interfészét, és hívhatja annak publikus műveleteit
  • a modellnek semmilyen tudomása nincs a nézetről, csak eseményeken keresztül kommunikálhat vele

Csomagdiagram

Célja a rendszer felépítése a logikai szerkezet mentén, azaz az egyes csomagok azonosítása és a beléjük tartozó osztályok bemutatása.

A csomagok között is létrehozhatunk kapcsolatokat (függőség, asszociáció, általánosítás, megvalósítás).

Továbbiak:

  • use: a csomag felhasznál egy másikat
  • nesting: a csomag egy másiknak a része
  • import: a csomag betölti a másikat
  • merge: a csomag tartalmazza, és kibővíti a másik teljes funkcionalitását.

A szoftverrendszer

Szoftver: programok + dokumentáció + konfiguráció + adatok

  • mivel a megoldandó feladatok összetettek lehetnek, a megoldást lehet csak több program tudja megadni
  • végrehajtás során ezek egymással kommunikálnak

Az egymással kommunikáló programok rendszerét szoftverrendszernek nevezzük. Ezek részeit komponenseknek.

Komponensek

Adott funkcionalitásért felel és fizikailag elkülönül.

  • önállóan felhasználható, telepíthető
  • a belső működése rejtett, a kapcsolatot interfészek bisztosítják
  • szolgáltathat ilyan funkcionalitást, amelyet más komponensek használnak fel
  • felhasználhat más komponenseket is

Komponensek például

  • asztali alkalmazás
  • mobil alkalmazás
  • weblap
  • adatbázis

Feloszthatjuk így is:

  • végrehajtható állományok
  • könyvtárak

Komponensdiagram

Ismerteti a rendszer komponenseit, az interfészeket és a köztük fennálló kapcsolatokat (connector)

Telepítési diagram

A szoftverrendszert kihelyezési és környezeti szempontból ábrázolja.

Ismeri azon csomópontokat (node), amelyeken az egyes alkotóelemei (artifact) találhatóak.

A rendszer alkotóeleme lehet bármilyen, fizikailag elkülönülő tartozéka a szoftvernek.

A rendszer egy csomópontja lehet egy hardware eszköz, és egy végrehajtási felület, amely biztosítja a szoftverek futását.

Adatformátumok

Minden, a szoftver számára bemenetként, vagy kimenetként szolgáló adat formátumát, felépítését meg kell adnunk.

Összetett adatok esetén támaszkodhatunk létező formátumokra:

  • CSV
  • XML
  • JSON

A rendszerterv

A tervezés eredménye a szoftver rendszerterve, amely tartalmazza:

  • a program statikus szerkezetét
  • a program dinamikus szerkezetét
  • a tárolt, kezelt, és eredményül adott adatok formáját
  • a programok belső és külső interfészeinek leírását
  • ajánlásokat az implementáció számára

A rendszerterv felépítése:

  1. előszó (célközönség, dokumentum-történet)
  2. bevezetés (szoftver célja, helye, szükségessége )
  3. fogalomtár
  4. rendszer architektúra (csomag-, komponens-, állapotdiagram)
  5. adattervezés
  6. rendszertervezés (statikus terv, dinamikus terv, interfész leírás, algoritmusok)
  7. felhasználói felület
  8. implementációs ajánlások
  9. függelék (pl.: adatbázis terv, becsült hardware szükségletek)
  10. tárgymutató

Források

Objektumorientált tervezési szempontok és minták

A tervezés alapelvei (SOLID)

  • Single responsibility principle
  • Open/Closed principle: a programegységek nyitottak a kiterjeztésre, de zártak a nódosításra
  • Liskov substitution principle: az objektumok helyettesíthetőek altípusaik példányával
  • Interface segregation principle: egy általános interfész helyett több kliens specifikus interfész
  • Dependency inversion principle: az absztrakciótól függünk, nem a konkretizációtól

A tervezés során mintákra hagyatkozunk, a szoftver teljes architektúráját definiáló mintákat nevezzük architektúrális mintáknak (architectural pattern), az architektúra alkalmazásának módját, az egyes komponensek összekapcsolását segítik elő a tervminták (design pattern)

Single responsibility principle

Számos, jól megkülönböztethető felelősségi kör található az alkalmazásokban:

  • perzisztencia, üzleti logika, vizualizáció, felhasználói interakció.
  • adatformázás, konverzió, validáció

Elősegíti a programegységek közötti laza csatolást, viszont túlzott használata feltöredezheti a programszerkezetet

Open/closed principle

A programegységek nyitottak a kiterjesztésre, de zártak a módosításra.

  • A programszerkezetet úgy kell megvalósítanunk, hogy új funkcionalitás bevezetése ne a jelenlegi programegységek átírását igényelje, sokkal inkább újabb programegységek hozzáadását.

A SRP és az OCP kiegészítik egymást, mivel az új funkcionalitás egy új felelősség bevezetését jelenti, így általában egyszerre szegjük meg a két elvet.

Liskov substitution principle

Bármely típus (osztály) példánya helyettesíthető altípusának egy példányával úgy, hogy közben a program tulajdonságai (funkcionális és nem funkcionális követelményei) nem változnak.

Megszorításokat tesz a szignatúrára

  • elvárja a paraméterek kontravarianciáját, a visszatérési értékek kovarianciáját
  • tiltja a kivételek típusának bővítését

Megszorításokat tesz a viselkedésre

  • elvárja az invariánsok megtartását
  • tiltja az előfeltételek erősítését, az utófeltételek gyengítését.

Interface segregation principle

Egy kliensnek sem szabad olyan interfésztől függenie, amelynek műveleteit nem használja.

Ezért az összetett interfészeket célszerű több, kliens specifikus interfészre felbontani, így azok csak a szükséges műveleteiket érhetik el.

Dependency inversion principle

Magasabb szintű programegységek nem függhetnek alacsonyabb szintű programegységtől, hanem mindkettőnek az absztrakciótól kell függenie.

Az absztrakció nem függhet a részletektől, a részletek függenek az absztrakciótól.

A megvalósítása számára a következőket jelenti:

  • az osztály mezői a konkrét osztályok helyett az absztrakció példányát tartalmazzák
  • a konkrét osztályok az absztrakció segítségével lépnek kapcsolatba egymással, a konkrét osztályok szükség esetén átalakíthatóak
  • szigorú esetben konkrét osztályokból nem örökölhetünk, és már megvalósított metódust nem definiálunk felül
  • az osztályok példányosítását egy külső programegység végzi, pl. függőség befecskendezés, gyártó művelet, vagy absztrakt gyártó segítségével.

Tervezési minták

Dependency injection

A végrehajtás során egy réteg (kliens) által használt réteg (szolgáltatás) egy, az adott körülmények függvényében alkalmazható megvalósítása kerül alkalmazásra.

Erről általában nem dönthet sem a kliens, sem a szolgáltatás, mivel ők nem ismerik a körülményeket, ezért egy külső komponensnek kell megadnia a megvalósítást.

A kliens (client) számára a megfelelő szolgáltatás (service) külső átadásának egy lehetséges módja a függőség befecskendezés.

A kliens biztosít egy átadási pontot a szolgáltatás interfésze számára, ahol a végrehajtás során a szolgáltatás megvalósítását adhatjuk át.

Az átadási pont függvényében 3 típusa lehet: konstruktor, metódus (beállító művelet), interfész (a kliens megvalósítja a beállító műveletet)

A befecskendést végző komponens (injector) lehet egy felsőbb réteg, vagy a rétegződéstől független környezeti elem.

Factory

A gyártó (factory) egy olyan objektum, amelynek feladata más objektumok előállítása műveletek segítségével.

Lehetőséget ad objektumok példányosításánál:

  • a konkrét példányosítandó típus kiválasztására
  • a példányosítással járó kódismétlés kiküszöbölésére
  • fel nem fedhető környezeti információk használatára
  • a példányosítási lehetőségek bővítésére

Lehetővé teszi a konkrét legyártott típus cseréjét a gyártó művelet és az absztrakt gyártó segítségével.

Amennyiben több, kapcsolatban álló típus konkrét megvalósítását szabályoznánk, az absztrakt gyártó (abstractfactory) tervmintát használhatjuk.

Command

A háromrétegű architektúrában a nézet továbbra is összetett, de a tevékenységek leválaszthatóak, a parancs (command) tervminta lehetőséget ad egy művelet kiemelésére egy külön objektumba.

  • a végrehajtandó tevékenység (Action) formája, paraméterezése tetszőleges lehet, ezért nem lehet egyazon módon különböző környezetekben kezelni
  • a parancs (Command) egy egységes formát biztosít egy tevékenység végrehajtására (Execute), a konkrét parancs (ConcreteCommand) pedig végrehajtja a tevékenységet
  • a kezdeményező (Invoker) csupán a parancsot látja, így a tényleges végrehajtás előle rejtett marad.

Observer

A figyelő (observer) tervminta célja összefüggőség megadása az objektumok között, hogy egyik állapotváltozása esetén a többiek értesítve lesznek

  • a figyelő (Observer) ehhez biztosítja a változás jelzésének metódusát (Update)
  • a megfigyelt objektumok (Subject) az értékeikben tett változtatásokat jelzik a felügyelőknek (Notify)
  • egy objektumot több figyelő is nyomon kísérhet

Az alapelvek hatása az architektúrára

Az alapelveket a tervezés minden szintjén, így az architektúra szintjén is célszerű betartani.

  • Monolítikus architektúra esetén egyáltalán nem érvényesülnek az alapelvek.
  • Modell-nézet architektúra esetén is túl nagy a komponensek felelőssége:
    • A modell felel az üzleti logikáért (programállapot kezelése, algoritmusok végrehajtása), valamint az adatok hosszú távú tárolásáért (mentés, betöltés)
    • A nézet felel az adatok megjelenítéséért, valamint a vezérlésért (felhasználó tevékenység fogadása és feldolgozása)

Háromrétegű architektúra

A modell felbontásával jutunk a háromrétegű (3-tier) architektúrához, amelyben elkülönül:

  • a nézet (presentation, view, display)
  • a modell (logic, business logic, application, domain), amely tartalmazza az állapotkezelést, valamint az algoritmusok
  • a perzisztencia, vagy adatelérés (data, dataaccess, persistence), amely biztosítja a hosszú távú adattárolás (pl. fájl, adatbázis) kezelését

Adatok állapotai

A háromrétegű alkalmazásokban az adatok három állapotban jelennek meg.

  • megjelenített állapot (display state): a felhasználói felületen megjelenő tartalomként, amelyet a felhasználó módosíthat
  • munkafolyamat állapot (session state): a memóriában, amely mindaddig elérhető, amíg a program és felhasználója aktív
  • rekord állapot (record state): az adat hosszú távon megőrzött állapota az adattárban (perzisztenciában)

Adatkötés

Az állapotok között a programnak transzformációkat és szinkronizációt kell végeznie

  • a nézet állapot és a munkafolyamat állapot sokszor megegyezik, a munkafolyamat és a perzisztens állapot (adattárolási forma) sokszor különbözik, ezért külön adatelérést kell biztosítanunk
  • a munkafolyamat és a perzisztens állapot között általában ritkán történik szinkronizáció (pl. program indítása, leállítása)
  • a nézet állapot és a munkafolyamat állapotot rendszerint állandó szinkronban kell tartanunk, ezt lehetőség szerint automatizálnunk kell

Az állapotok automatikus szinkronizálását adatkötés (data binding) segítségével érhetjük el, amely két lehetséges módon biztosíthatja a szinkronizációt.

Az adatkötésért egy olyan adatkötés objektum (Binding) felel, amelyet a megjelenített állapot tárolója (nézet) és a munkafolyamat állapot tárolója (modell) közé helyezünk

  • az adatkötés ismeri mind a nézetet mind a modellt, ezért lehívhatja az értékeket (GetState), és elvégezheti a módosítást (SetState)
  • elvégezheti az átalakítást (Convert) a munkafolyamat állapot és a nézet állapot között
  • általában minden szinkronizálandó adathoz külön adatkötés tartozik, többszörös előfordulás esetén akár előfordulásonként is tartozhat adatkötés

A nézet ismerheti az adatkötést, így közvetlenül kezdeményezheti a módosítást az adatkötésen keresztül.

A modell azonban nem ismerheti az adatkötést, sem a vezérlőt, csak jelzést tud adni az állapot változásáról, ennek feldolgozását figyelő tervminta segítségével végezzük.

Az adatkötés megvalósítja a figyelőt, ám mivel közvetlenül nem ismerheti a modell, a változás jelzése esemény formájában történik (NotifyStateChanged).

Mivel a jelzésnek egységes formában kell megvalósulnia, célszerű, ha minden modell egy közös, az esemény kiváltását biztosító interfészt valósít meg (Subject).

Előnyei:

  • a megjelenített és a munkafolyamat állapot mindig szinkronban tartható, automatikusan

Hátrányai:

  • a szinkronizáció erőforrásigényes, sokszor feleslegesen hajtódik végre
  • a rendszernek ügyelnie kell a körkörös módosítások elkerülésére
  • a modellnek biztosítania kell a megfelelő interfész megvalósítását, és az esemény kiváltását a szükséges pontokon

MVC architektúra

A megjelenítés és a vezérlés leválasztását biztosítja a Model-View-Controller (MVC) architektúra, amelyben

  • a vezérlő (Controller) fogadja közvetlenül a kérést a felhasználótól, feldolgozza azt (a modell segítségével), majd előállítja a megfelelő (új) nézetet
  • a nézet (View) a felület (jórészt deklaratív) meghatározása, amely megjeleníti, illetve átalakítja az adatokat
  • lehívás alapú (pull-based): ismeri a modellt, az adatokat a modelltől kéri le
  • betöltés alapú (push-based): a vezérlő adja át számára az adatokat

A modell mellett perzisztációval is bővíthető a szerkezet.

Az MVC architektúra különösen webes környezetben népszerű, ahol könnyen leválasztható a nézet (HTML) a vezérléstől (URL) Általában egy vezérlőhöz több nézet is tartozik.

Előnyei:

  • a nézetnek nem kell foglalkoznia az események feldolgozásával, mivel azokat közvetlenül a vezérlő kapja meg

Hátrányai:

  • a nézet továbbra is felel az adatok megfelelő átalakításáért, tehát tartalmaz valamennyi logikát

Források

Projekteszközök, verziókezelés

Projektmenedzsment eszközök

Szoftvereszközök

A fejlesztőcsapat munkáját megfelelő szoftvereszközökkel kell alátámasztani

  • projektmenedzsment eszközzel (project tracking system), amely támogatja a dokumentálást és a feladatok követését
  • fejlett tervezőeszközzel (case tool), ahol a fejlesztés folyamata és a felelősség is nyomon követhető
  • integrált fejlesztőkörnyezettel (IDE)
  • verziókövető rendszerrel (revision control system), amely lehetővé teszi a programkód változásainak követését
  • folytonos integrációs (continuous integration) rendszerrel, amely biztosítja a hibák korai kiszűrését

A projektmenedzsment eszköz lehetőséget ad az alábbiakra:

  • fejlesztés ütemtervének, kockázatainak meghatározása
  • fejlesztés egyszerű és folyamatos dokumentálásának lehetősége és generálása
  • feladatok, tevékenységek rögzítése, követése
  • a tesztelés során előfordult hibák rögzítése, a javítási folyamat követése
  • integrált verziókezelés és forráskód böngészés
  • webes vagy grafikus felület, amely biztosítja a könnyű használatot, és bárhonnan való elérést

Ütemterv és időzítés

A szoftver lehetőséget ad, hogy a projekt ütemtervét elkészítsük, és azt folyamatosan szem előtt tarthassuk

  • definiálhatunk mérföldköveket (milestone), amelyre adott feladatokat el kell végezni
  • a fejlesztők külön-külön láthatják a saját feladataikat, menedzselhetik annak előrehaladását
  • beoszthatjuk a fejlesztési lépések erőforrásait
  • definiálhatunk függőségeket a programrészek között
  • kezelhetjük az egyes fejlesztési lépések időbeli lefolyását, előrevetíthetjük a tervezettől való eltérések hatásait az erőforrásokra, illetve a további fejlesztési időkre

Feladat és hibakövetés

A rendszerek lehetőséget adnak a tervezők számára feladatok kitűzésére, valamint a tesztelők számára a programban fellelhető hibák jelzésére

  • a feladatokat úgynevezett cédulák (ticket, issue) segítségével írhatóak ki
    • jelölhetnek új funkcionalitást (feature), hibát (bug), egyéb fejlesztési feladatot (task), vagy dokumentációs feladatot (documentation)
    • megadható a leírása, felelőse, határideje
    • kommentálhatóak, lezárhatóak, újra kinyithatóak
  • a cédulák biztosítják a fejlesztési és tesztelési folyamat naplózását

Projektvezető szolgáltatások

A projektvezető szolgáltatások (project hosting services) általában rendelkezésre bocsátanak több projektfejlesztő eszközt

  • projektmenedzsment, kód tárolás, kód megtekintés, verziókövetés, dokumentáció (Wiki), levelezési lista, adatbázis hozzáférés
  • általában nyílt forráskódú szoftverek esetén ingyenes a szolgáltatás
  • pl.:GitHub, GitLab, SourceForge, Bitbucket
  • egyes szolgáltatások bizonyos programozási nyelvek, vagy témakör köré csoportosulnak (pl. mozdev)

Verziókezelés

A szoftverek méretének és komplexitásának növekedésével létrejött szoftverkrízis következményeként megnövekedett:

  • a programok forráskódjának mérete,
  • a szoftverprojektek megvalósításához szükséges idő,
  • és szükséges programozói erőforrás.

A szoftveripar fejlődésével egyre több alkalmazás készült

  • a fejlesztések életciklusa gyakran nem ért véget a program első publikus verziójának kiadásával,
  • karbantartási és további fejlesztési fázisok követték.

A szoftverprojektek méretben, komplexitásban, időben és a résztvevő fejlesztők számában is növekedni kezdtek.

Történeti háttér

Mivel az implementáció tehát több lépésben, és sokszor párhuzamosan zajlik, szükséges, hogy az egyes programállapotok, jól követhetőek legyenek, ezt a feladatot a verziókövető rendszerek (revision control system) látják el

  • pl. CVS, Apache Subversion (SVN), Mercurial, Git
  • egy közös tárolóban (repository) tartják kódokat
  • ezt a fejlesztők lemásolják egy helyi munkakönyvtárba, és amelyben dolgoznak (working copy)
  • a módosításokat visszatöltik a központi tárolóba (commit)
  • a munkakönyvtárakat az első létrehozás (checkout) után folyamatosan frissíteni kell (update)

Funcionalitás

A verziókövető rendszerek lehetővé teszik:

  • az összes eddig változat (revision) eltárolását, illetve annak letöltési lehetőségét
  • a fő fejlesztési vonal (baseline, master vagy trunk) és a legfrissebb változat (head) elérését, új változat feltöltését annak dokumentálásával
  • az egyes változatok közötti különbségek nyilvántartását fájlonként és tartalmanként (akár karakterek szintjén)
  • változtatások visszavonását, korábbi változatra visszatérést
  • konfliktust okozó módosítások ellenőrzését, illetve megoldását (resolve)
  • a folyamat elágazását, és ezáltal újabb fejlesztési folyamatok létrehozását, amelyek a fő vonal mellett futnak (branch), valamint az ágak összeillesztését (merge)
    • az összeillesztés rendszerint utólagos manuális korrekciót igényel
    • az összeillesztésnek rendszerint automatikusan illeszti a módosított tartalmakat kódelemzést használva, ez lehet 2 pontos (two-way), amikor csak a két módosítást vizsgálja, vagy 3 pontos, amikor az eredeti fájlt is
  • programrészek zárolását (lock), hogy a konfliktusok kizárhatóak legyenek
  • adott verzió, mint pillanatkép (snapshot) rögzítése (tag), amelyhez a hozzáférés publikus
  • feltöltések atomi műveletként történő kezelését (pl. megszakadó feltöltés esetén visszavonás)

Lokális verziókövető rendszerek

Forráskód változásainak követése, a szoftver funkcióinak különböző kombinációjával készült kiadások kezelése

  • lokális tároló (de többen is elérhetik pl. mainframe esetén)
  • fájl alapú műveletvégzés (1 verzió 1 fájl változásai)
  • konkurenciakezelés kizárólagos zárak által

Az 1970-es években lefektetésre kerültek az elméleti alapok

  • Source Code Control System (SCCS) – 1972
  • Revision Control System (RCS) - 1982

Centralizált verziókezelő rendszerek

Több fejlesztő általi párhuzamos szoftverfejlesztés támogatásának előtérbe kerülésre

  • centralizált modellt megtartva, de kliens-szerver architektúra
  • fájlhalmaz alapú műveletek (1 verzió több fájl változásai)
  • konkurenciakezelés jellemzően beküldés előtti egyesítéssel (merge before commit)

Az 1990-es évektől terjedtek el:

  • Concurrent Versions System (CVS)
  • Subversion (SVN)
  • SourceSafe, Perforce, Team Foundation Server, stb.

Hátrány: a szerver kitüntetett szerepe (pl. meghibásodás), továbbá a verziókezeléshez hálózati kapcsolat szükségeltetik

Elosztott verziókezelő rendszerek

A klasszikus verziókezelő műveletekről leválasztásra kerül a hálózati kommunikáció, azok a felhasználó által kezdeményezhető önálló tevékenységekként jelennek meg

  • decentralizált, elosztott hálózati modell
  • minden kliens rendelkezik a teljes tárolóval és verziótörténettel
  • a revíziókezelő eszköz műveletei lokálisan, a kliens tárolóján történnek
  • a kommunikáció peer-to-peer elven történik, de kitüntetett (mindenki által ismert) szerverek felállítására van lehetőség
  • konkurenciakezelés jellemzően beküldés utáni egyesítéssel (commit before merge)

A 2000-es évek első felében jelent meg:

  • Monotone, Darcs, Git, Mercurial, Bazaar, stb.

Változások reprezentációja

A teljes revíziók tárolása nem lehetséges az adattárolás és adatkezelés jelentős költségei miatt

A verziókezelő eszközök ezért csak két egymást követő verzió közötti különbséget, a változáslistát (changeset, delta) tárolják

  • egyes rendszerek (pl. Mercurial) időnként pillanatfelvételt (snapshot) készítenek a teljes tartalomról

Eleinte (SCCS) a delták a régi verzióból az újat tudták előállítani (forward deltas)

Korán felmerült (RCS), hogy a fordított delták (reverse deltas) használata a legújabb verzió pillanatképének tárolásával jobb teljesítményt nyújthat, ugyanis leggyakrabban egy ág legfrissebb állapotát szokták lekérni

  • Kevert megoldás is lehetséges, pl. a fő ágon fordított irányú deltákat, a mellékágakon viszont előre mutató delták

Az eltérések meghatározása szöveges fájlok, így programnyelvi forráskódok esetében jellemzően állapot alapúan történik

  • a legtöbbször soronkénti összehasonlítással
  • pl. GNU diff
  • struktúrált tartalom esetén az összehasonlítás egysége más is lehet (pl. XML, JSON, UML)

Bináris adatok (pl. képek) esetén a művelet alapú megközelítés is alkalmazható.

A 3. generációs verziókövető rendszerek idejére a háttértárak mérete jelentősen megnőtt, míg költségük csökkent

  • Egyes eszközök ezért a megváltozott fájlok teljes tartalmát tárolják a revíziókban, nem csak a módosult tartalomrészt

Külömböző fájlok tárolása

A Git verziókezelő rendszer a szöveges állományok, így tipikusan a forráskód fájlok változáskezelésében hatékony. Elsődlegesen a projekt forráskódját érdemes benne elhelyezni.

Egy általános szoftver projekt esetén nem érdemes verziókezelés alá vonni:

  • fordítás során előálló köztes tárgykódot vagy a végső bináris állományokat, mert újból előállíthatóak, folyamatosan változnak és ütközéseket okoznak.
  • fejlesztő eszközök személyes beállításait (pl. Visual Studio esetén a .vs/ vagy Netbeans esetén a nbproject/private/ könyvtárak), amelyek felhasználónként eltérőek.
  • nagy méretű bináris állományokat (pl. videók, nagy méretű képek), amelyek kezelésében a Git nem hatékony. Bár a Git tárolók mérete jól skálázható, egy könnyen kezelhető repository mérete az 1-2 GB-os méretet nem haladja meg.

A nagy méretű videó, kép és hang erőforrás állományok hatékony kezelése körültekintést igényel.

  • A nagy méretű bináris állományok változásainak kezelésében a Git kevésbé hatékony.
  • Jelentősen megnöveli a tároló helyi másolatának lekéréséhez szükséges hálózati forgalmat (git clone).
  • Egy fejlesztőcsapatban a programozóknak nem feltétlenül van szükségük a fejlesztéshez a designerek által készített assetekre.

Ezért a nagy méretű bináris erőforrás állományokat még akkor sem feltétlenül érdemes a Git tárolóban elhelyezni, ha amúgy ritkán változnak.

A nagy méretű bináris állományok kezelése a Git Large File Storage (Git LFS) segítéségével oldható meg.

  • A nagy méretű bináris állományokat egy hivatkozással helyettesíti és magukat a fájlokat egy másik (akár távoli) szerveren tárolja.
  • Így a Git tárolónk mérete kezelhető marad.

Gitflow feature branching model

Fő fejlesztési ágak:

  • master
  • develop

Támogató ágak:

  • feature branches
  • release branches
  • hotfix branches

Források

Build systems

Java programok fordítása

Már viszonylag kevés forrásfájllal is nehézkes lehet:

  • Parancssoros fordítás könnyen bonyolultá válhat már kis alkalmazásoknál is.
  • Nagyobb programoknál követhetetlenné válik, hogy mely fordítási egységeket kell újrafordítani.
    • Az egész alkalmazást újra lefordítani nagyon időigényes lehet.

Build system elvárások

  • A kód fordítása
    • Dependenciák a fordítási target-ek kezelése
  • Futtatható fájlok csomagolása
    • Több release opció támogatása
  • Automatikus tesztfuttatás
  • Futtatható fájlok feltöltése teszt szerverre
  • A kód átmásolása egyik helyről a másikra
  • Csomag repo-k kezelése

ANT

  • Imperatív megközelítés

  • Java projektekhez gyakran használt

  • XML-alapú build fájl

    • tartalmazza a project gyökér elemet amely megadja:
      • a projekt nevét,
      • az alapértelmezett target-et
      • A projekt főkönyvtárát
  • A <property name="" value=""> elemmel projekttulajdonságokat tudunk definiálni.

Target

  • Target-et a <target> elemmel lehet megadni, és az ant compile parancsal futtatni.
  • Egy target függhet egy másiktól, ezt a <target depends=""> módon lehet megadni.
  • A failonerror attribútum megmondja, hogy hiba esetén félbe kell-e szakítani a folyamatot, ha az adott target hibát dob.

További példák

lsd.: diasor

Maven

  • Szoftver projekt kezelő eszköz
  • Build, teszt futtatás, dependencia kezelés, dokumentáció
  • Csomagok: automatikus letölti a dependenciákat
  • Deklaratív leírása a build folyamatnak
  • Fix könyvtár struktúra és konvenciók
    • Ezek átírhatók, de nem ajánlott
  • Tipikusan Java-hoz, de pluginokkal használható más nyelvekkel is
  • XML-alapú build fájl

Project

  • POM - Project Object Model
  • Egy projektet egyedien azonosít a csoport, artifact id, verzió. (GAV - Group, Artifact, Version)
  • Egy projekt felosztható több modulra, amik külön-külön kezelhetőek.

POM

  • Részei:

    • azonosítók: groupId, artifactId, version
    • a build folyamatának leírása
    • a build eredménye
    • tesztesetek
    • dependenciák
  • A gyökérelem szintén egy project element.

  • A következő elemeknek meg kell lenniük a projektben:

    • modelVersion: a POM specifikáció verziója
    • groupId: egyedi csoport, vagy cégazanosító. Ajánlott a Java package elnevezési konvenciók követése.
    • artifactId: a projekt egyedi neve
    • version: a projekt verziószáma
    • packaging: alkalmazott csomagolási módszer (alapértelmezett: jar, mások: pom, maven-plugin, ejb, war, ear, rar, par)

Életciklus fázisok

  • Maven egy előre meghatározott életciklust követ, amely különböző fázisokból áll. A legfontosabbak:
    • validate: validálja a projektet, és meggyőződik arról, hogy minden szükséges információ rendelkezésre áll.
    • compile: lefordítja a projektet
    • test: leteszteli a lefordított kódot (a forrásfájlok nélkül)
    • package: a lefordított kód becsomagolása a megadott formátumban (pl.: JAR)
    • integration-test: a csomag feldolgozása és megfelelő tesztelési környezetbe helyezése, ahol integrációs tesztek futtathatók.
    • verify: a csomag ellenőrzése, hogy megfelel-e a minőségi kritériumoknak
    • install: a csomag telepítése a lokális repo-ba, hogy dependenciaként használható legyen lokálisan
    • deploy: integrációs vagy release környezetbe helyezés, távoli repo-ba feltöltés.
    • clean: előzően létrehozott bináris fájlok törlése a projektből

Goal

  • A fordítási fázisok egy vagy több goal-ból áll
  • A goal egy olyan feladat, ami a projekt kezeléséhez vagy fordításához kapcsolódik.
    • Ezek sorrendje a fázis kötésétől függ
    • Sokfázis csak egy goal-t tartalmaz
  • Nem csak fázisok, de goal-ok is futtathatóak a maven paranccsal.

Repositories

  • Egy repo tartifact-okat és dependenciákat tárol.
  • Ha egy artifact elérhető lokális repo-ban, Maven azt használja
  • Különben letölti egy távoli repo-ból. (lassabb)

A build folyamat eredménye

  • a target könyvtár létrehozásra kerül fordítás során, amely az újonnan generált fájlokat tartalmazza
    • kiement, pl.: my-app-1.0.jar
    • classes könyvtár: class fájlok, amelyek a fordítás során jöttek létre (kivéve teszt osztályok)
    • test-classes: teszt osztályok
    • maven-archiver/pom.properties fájl, ami definiálja a project GAV-ját
    • surefire-reports: a tesztek eredményei

Dependenciák

  • Külső könyvtáral amit a projekt használ
  • Automatikus letöltés, ha kell
  • GAV egyedien definiálja a szükséges artifact-ot
  • Egy scope megadja a felhasználás módját:
    • compile: ez az alapértelmezett, a dependencia szükséges a fordításhoz
    • runtime: a dependencia futásidőben szükséges, de fordításkor nem
    • test: a dependencia nem kell csak tesztek fordításánál és végrehajtásánál.

Gradle

  • Build automatizáló rendszer amely egyre elterjedtebb
  • Azt ANT és a Maven-t legjobb tulajdonságait próbálja ötvözni.
  • Inkrementális build támogatás
  • XML helyett Groovy alapú nyelven (Domain Specific Language)

Források

Verifikáció és validáció

Minőségbiztosítás

A szoftver verifikációja és validációja, vagy minőségbisztosítása azon folyamatok összessége, amelyek során ellenőrizzük, hogy a szoftver teljesíti-e az elvárt követelményeket, és megfelel a felhasználói elvárásolnak.

  • A verifikáció ellenőrzi, hogy a szoftvert a megadott funkcionális és nem funkcionális követelményeknek megfelelően valósították meg. Történhet formális, vagy szintaktikus módszerekkel.
  • A validáció ellenőrzi, hogy a sziftver megfelel-e a felhasználók elvárásainak, azaz jól specifikáltuk-e eredetileg a követelményeket. Alapvető módszere a tesztelés.

Verifikáció és modifikáció módszerei

  • Statikusan, a modellek és a programkód áttekintésével
    • elvégezhető a teljes program elkészülte nélkül is
    • elkerüli, hogy hibák elfedjék egymást
    • tágabb körben is felfedhet hibákat, pl. szabványoknak történő megfelelés.
  • Dinamikusan, a program futtatásával.
    • felfedheti a statikus ellenőrzés során észre nem vett hibákat, illetve a programegységek együttműködéséből származó hibákat.
    • lehetőséget ad a teljesítmény mérésére

Tesztelés

A tesztelés célja a szoftverhibák felfedezése és szoftverrel szemben támasztott minőségi elvárások ellenőrzése.

  • futási idejű hibákat, működési rendellenességeket keresünk, kompatibilitást ellenőrzünk.
  • általában a program futtatásával, szimulált adatok alapján történik.
  • nem garantálja, hogy a program hibamentes, és minden körülmény között helytáll, de felfedheti a hibákat adott körülmények között.

A teszteléshez tesztelési tervet készítünk, amely ismerteti a tesztelés felelőseit, folyamatát, technikáit és céljait.

Tesztesetek

A tesztelés során különböző teszteseteket különböztethetünk meg, amelyek az egyes funkcióját, illetve elvárásokat tudják ellenőrizni.

  • megadjuk a bemenő adatokra várt eredményt
  • a teszteseteket összekapcsolhatjuk a követelményekkel (traceability matrix)
  • a teszteseteket gyűjteményekbe helyezzük (test suit) A tesztesetek eredményeiből készül a tesztjelentés (test report)

Tesztelés lépései

A tesztelés nem a teljes program elkészülte után, egyben történik, hanem általában 3 szakaszból áll:

  1. fejlesztői teszt: a fejlesztők ellenőrzik a program működését
  • jellemzően white box tesztek, azaz a fejlesztő ismeri, és követi a programkódot.
  1. kiadásteszt: egy külön tesztcsapat ellenőrzi a szoftver használatát
  2. felhasználói teszt: a felhasználók tesztelik a programot a felhasználási környezetben
  • jellemzően black box, azaz a forráskód nem ismert.

A fejlesztői tesztnek további három szakasza van:

  • unit test: a programegységeket külön-külön, egymástól függetlenül teszteljük.
  • integrációs teszt: a programegységek együttműködésének tesztje, a rendszer egy komponensének vizsgálata
  • rendszerteszt: az egész rendszer együttes tesztje, a rendszert alkotó komponensek közötti kommunikáció vizsgálata

Unit tests

Az egységteszt során törekednünk kell arra, hogy a programegység összes funkcióját ellenőrizzük, egy osztály esetén

  • ellenőrizzük valamennyi metódust
  • állítsuk be, és ellenőrizzük az összes mezőt
  • az összes lehetséges állapotba helyezzük az egységet

A teszteseteket célszerű leszorítani a programegység által

  • megengedett bemenetekre, így ellenőrizve a várt viselkedést
  • nem megengedett bemenetre, így ellenőrizve a hibakezelést

A bemenő adatokat részhalmazokra bonthatjuk a különböző hibalehetőségek függvényében, és minden részhalmazból egy bemenetet ellenőrizhetünk.

Az egységtesztet az ismétlések és a számos kombináció miatt célszerű automatizálni.

Előnyök

  • A hibák sokkal korábban észlelhetőek
  • Minden komponens legalább egyszer tesztelt
  • Az egységek elkülönítése miatt a hibák helyének meghatározása könnyű
  • A funkciók könnyen módosíthatóak, átalakíthatók
  • Dokumentációs szerep: példákat biztosít egyes funkciók használatára

Elvek

  • Gyors: A teszteknek gyorsan kell futnia, lassú teszteket senki nem futtatja gyakran, így a hibák nem derülnek ki idejében.
  • Független: A teszteknek egymástól függetlennek és bármilyen sorrendben végrehajthatónak kell lennie.
  • Megismételhető: A teszteknek bármilyen környezetben, hálózat nélkül is végrehajthatónak kell lennie. A különböző futtatások eredményének meg kell egyeznie.
  • Önellenőrző: A tesztek eredménye egy logikai érték (futásuk vagy sikeres, vagy sikertelen)
  • Automatikus: Automatikusan, interakció nélkül futó tesztek

Mock

  • A tesztelt metódusok általában más komponens nyújtotta szolgáltatásokat is használnak
  • Az egyes funkciókat más komponensektől izoláltan kell tesztelnünk, a tesztek sikeressége nem függhet a függőségek helyes implementációjától
  • A Mock egy olyan objektum, amely egy másik objektum működését szimulálja
  • Egy osztály függőségeinek szimulálására használandó

Tesztelési keretrendszerek

Az egységtesztek automatizálását, és az eredmények kiértékelését hatékonyabbá tehetjük tesztelési keretrendszerek használatával.

  • általában a tényleges főprogramoktól függetlenül építhetünk teszteseteket, amelyeket futtathatunk, és megkapjuk a futás pontos eredményét
  • a tesztesetekben egy, vagy több ellenőrzés kap helyet, amelyek jelezhetnek hibákat
  • amennyiben egy hibajelzést sem kaptunk egy tesztesettől, akkor az eset sikeres, egyébként sikertelen

Kódlefedettség

A tesztgyűjtemények által letesztelt programkód mértékét nevezzük kód lefedettségnek.

  • megadja, hogy a tényleges programkód mely részei kerülnek végrehajtásra a teszt során
  • számos szempont szerint mérhető:
    • mely alprogramok lettek végrehajtva
    • mely utasítások lettek végrehajtva
    • az elágazások mely ágai futottak leű
    • a logikai kifelyezések mely részei lettek kiértékelve

További tesztek

Az integrációs és rendszertesztek során elsősorban azt vizsgáljuk, hogy a rendszer megfelel-e a követelménybeli elvárásoknak.

  • funkcionális és nem funkcionális alapon (pl. teljesítmény, biztonság) is ellenőrizhetjük a rendszert
  • ezeket a teszteseteket már a specifikáció során megadhatjuk
  • a tesztelés első lépése a füst teszt (smoke test), amely során a legalapvetőbb funkciók működését ellenőrzik

A kiadásteszt és a felhasználói teszt során a szoftvernek már általában a célkörnyezetben, tényleges adatokkal kell dolgoznia

Teljesítménytesztek

A teljesítménytesztek (performance test) során a rendszer teljesítményét mérjük

  • ezáltal a rendszer megbízhatóságát és teljesítőképességének (válaszidők, átviteli sebességek, erőforrások felhasználása) ellenőrizzük különböző mértékű feladatvégzés esetén
  • végezhetünk teszteket a várható feladatmennyiség függvényében (load test), vagy azon túl ellenőrizhetjük a rendszer tűrőképességét (stress test)
  • a teljesítmény tesztet sokszor a hardver erőforrások függvényében végezzük, amellyel megállapítható a rendszer skálázhatósága (capacity test)

Debugging

A tesztelést elősegíti a nyomkövetés (debugging), amely során a programot futás közben elemezzük, követjük a változók állapotait, a hívás helyét, felfedjük a lehetséges hibaforrásokat

  • breakpoint elhelyezése
  • watch, amely automatikus lokális változókra
  • call stack kezelése, a felsőbb szintek változóinak nyilvántartása

Programváltozatok

Az implementáció és tesztelés során a szoftver különböző változatait tartjuk nyilván:

  • pre-alpha: funkcionálisan nem teljes, de rendszertesztre alkalmas
  • alpha: funkcionálisan teljes, de minőségi mutatókat nem teljesíti
  • beta: funkcionálisan teljes, és a minőségi mutatók javarészt megfelelnek a követelményeknek
    • a további tesztelés során nagyrészt a rendellenességek kiküszöbölése folyik, a tesztelés lehet publikus
    • esetlegesen kiegészítő funkciók kerülhetnek implementálásra
  • release candidate: funkcionálisan teljes, minőséfi mutatóknak megfelelő
    • kódteljes
    • csak dinamikus tesztelés folyik, és csak kritikus hiba esetén nem kerül gyártásra
  • final release: kiadott, legyártott változat

Tesztvezérelt fejlesztés

A tesztvezérelt fejlesztés egy olyan fejlesztési módszertan, amely a teszteknek ad elsőbbséget a fejlesztés során

A fejlesztés lépései:

  1. tesztesetek elkészítése, amely ellenőrzi az elkészítendő kód működését
  2. az implementáció megvalósítása, amely eleget tesz a teszteset ellenőrzéseinek
  3. az implementáció finomítása a minőségi elvárásoknak (tervezési és fejlesztési elvek) megfelelően

Előnye, hogy magas fokú a kód lefedettsége, mivel a teszteknek minden funkcióra ki kell térniük.

Források

8. CI/CD - nincs jegyzet

9. Test Driven Development, Clean Code

10. Szálak - nincs jegyzet

11. Tervminták - nincs jegyzet

12. Networking - nincs jegyzet

Szoftvertechnológia (F) gyakorlat

Alapadatok

Idő: Hétfő, 12:00 - 14:00
Helyszín: Déli Tömb 00-411 (PC 7)
Oktató: Pintér Balázs
Csoport: 8

Értékelés

  • 3 fős csapatok, scrum módszertan
  • Mérföldkőbemutatás (4db)

Források

1. Gyakorlat

A VCS-ek alapjairól és git-parancsokról beszéltünk. Kialakítottuk a csapatot.

Források

2. Gyakorlat

Kiválasztottuk az opcionális feladatok közül 3 pontnyit.

3. Gyakorlat

Kigyűjtöttük az asset-eket

4. Gyakorlat

  1. mérföldkő bemutatása

5. Gyakorlat

Javított osztálydiagram bemutatás

6. Gyakorlat

GUI progress bemutatás, perzisztencia megbeszélés

Elmaradt óra

Ez az óra elmaradt, és nem tartottak pótló órát.

8. Gyakorlat

  1. mérföldkő bemutatása

9. Gyakorlat

Elmaradt óra

Ez az óra elmaradt, és nem tartottak pótló órát.

Elmaradt óra

Ez az óra elmaradt, és nem tartottak pótló órát.

12. Gyakorlat

Számítógépes grafika előadás

Alapadatok

Idő: Szerda, 8:00 - 10:00
Helyszín: Déli Tömb 0-823 Kitaibel Pál terem
Oktató: Bán Róbert, robert.ban102+cg@gmail.com
Csoport: 1

Értékelés

Két írásbeli részvizsga alapján:

  • Első az anyag felénél, második a félév végén
  • Kb. 50%-50% elméleti és gyakorlati feladatok

Források

Ajánlott irodalom

Bevezetés a számítógépes grafikába

Számítógépes grafika

Kép előállításának lépései

  1. Reprezentáció: számítógépen való tárolás
  2. Szintézis: reprezentáció megjelenítése
  3. Megjelenítés: megfelelő megjelenítő eszköz használata

Modellezés "rétegei"

  1. Geometriai modellek
  2. Optikai paraméterek
  3. Textúrák (generált, mért, fényképezett)

Algoritmusok

  • Sugárkövetés (ray tracing)
  • Inkrementális képszintézis

Az emberi látás

Képek leggyakrabban két fő céllal szintetizálunk:

  • Számtógép számára: egy leirást kell csupán megadni (hol, milyen szín van).
  • Ember számára: meg kell jeleníteni a képet ehhez tisztában kell lenni az emberi látás tulajdonságaival, hogy minél kevesebb torzuláson essen át az átadni kívánt információ.

A képszintézissel az a célunk, hogy megadjuk hogy adott helyen milyen színt kell, hogy megjelenítsen a kijelző. Fontos ezért, hogy absztrakt és konkrét leírást is tudjunk adni.

A fény tulajdonságai

  • Fénytörés:

Fénytörés

  • Visszaverődés:

Visszaverődés

  • Kromatikus aberráció:

Kromatikus aberráció

  • Hullám: elektromágneses sugárzás

Fény mint hullám

  • Részecske: fotonok

Fény mint részecske

A látás fiziológiája

Az emberi látásnak fiziológiai és pszcihológiai aspektusai is vannak, amelyekben a szem és az agy vesz részt.

A fény útja a szemben

  • A fény a szaruhártyán megtörve jut a szembe - ez lényegében egy fény-gyűjtőlencse.
  • A szivárványhártya (írisz) csökkenti a szembe jutó fény mennyiségét, a pupilla pedig fényreteszként funkcionál.
  • A szemlencse a második gyűjtőlencse; a belépő fénysugarakat a recehártyára (retinára) fókuszálja.

A szem különböző részeit összesítve kb. 16-12.5mm fókusztávolságot jelent. Az átlagos emberi szem 24mm hosszú a szaruhártyától a retináig.

A szem felépítése

Fotoreceptorok

A retinában kétféle fény érzékelésre szolgáló idegsejt található:

  • Pálcikák (rod): alacsonyabb intenzitású fényre érzékenyek, a sötét-világos megkülönböztetésére alkalmas, alacsonyabb felbontásúak.
  • Csapok (cone): erősebb fényingert igénylő idegsejtek, a színlátást és az éleslátást szolgálják, tizedannyira érzékenyek a fényre, mint a pálcikák.

Az elektromágneses energia egy bizonyos sávjára érzékenyek csak a fenti idegsejtek (380-780nm közötti intervellum)

Amikor a fény ér egy fotoreceptort egy kémiai reakció indul el, aminek eredményeképp egy neurális jelet küldenek az agy felé, úgynevezett fotopigmentet.

Az egyes fotoreceptorok más-más mértékben reagálnak a különböző hullámhosszú fényekre:

  • Pálcikák: hullámhossztól függően az ugyanolyan erős fényre adott reakció nagysága harang-görbe jellegű görbével írható le.
  • Csapok: háromféle van belőlük (S, M, L); mindegyik különböző hullámhosszú fényre ad maximális reakciót, azoktól fokozatosan eltérőkre egyel kisebbet.

A fotopigmentek csak az érzékelés tényét rögzítik: pontos hullámhossz nem továbbítódik. (térbeli és frekvenciabeli felbontás trade-off)

Háromféle csap található a szembe:

  • S csap: 420nm körüli fényre a legérzékenyebb (kék)
  • M csap: 530nm körüli fényre a legérzékenyebb (zöld)
  • L csap: 560nm körüli fényre a legérzékenyebb (vörös)

A fényreceptorok észleléseit a látóideg továbbítja az agy felé. A látóideg csatlakozási pontja a szemgolyóhoz a vakfolt, itt nincsenek sem csapok, sem pálcikák.

A látógödör, ami a vakfolttól oldalra található az éleslátás helye, a közepe a foveola, ahol kizátólag csapok találhatóak. (150000 csap/mm)

Színérzékelés

A fotoreceptorok jele

A fotoreceptor jele egyetlen fotonra csak néhány ms-ig tart, minden újabb beérkező foton hatása hozzáadódik az előzőhöz.

A receptor által leadott jel lényegében egy temporális átlag, egy low-pass filter, aminek vágási frekvenciája függ a megvilágítási körülményektől.

  • Egy lassan villogó fényt külön-külön villanásként észlelünk
  • Ha a felvillanások között eltelt idő egyre kisebb, akkor a fotoreceptorok által leadott jelek "összetorlódnak" (critical flicker-frequency) folyamatos jelként érzékeljük.
    • A flicker rate sok tényezőtől függ (háttérmegvilágítás, megjelenített kép nagysága, ...)
    • Ideális esetben kb 60hz.

Színek a számítógépen

CIE: International Commission on Illumination: hogyan lehetne egy standard leírást adni arra, hogy egy ember miképp érzékeli a színeket.

A kísérletek egyik eredménye volt, hogy bármely szín előállítható három, megfelelő szín keverékeként.

Színtér: egy koordinátarendszer három "független" bázisvektorral.

Válasszunk három kellően távoli hullámhosszt, majd minden színérzetre adjuk meg, hogy három ilyen monokromatikus fénynyaláb milyen keverékéből áll össze. Ezek lesznek az adott színérzet tristimulus koordinátái.

RGB színtér

Egy additív színmodell. Legyen a három kiválasztott hullámhossz:

Legyen egy monokromatikus fénynyaláb.

Ekkor a hozzátartozó RGB értékek megadására használjuk az színillszető függvényeket.

A spektrum minden színe megadható? Nem.

Az ember által érzékelt minden szín megadható? Nem. (lsd. link a források között)

RGB kocka

CMY(K) színtér

Egy szubtraktív színmodell. Nézzük az RGB kockában az eredeti tengelyekkel "szemközti" tengelyeket!

Ez a három tengely ugyanúgy kifeszíti a színteret.

Ezt használják színes nyomtatáshoz (K, a fekete itt válik relevánsá)

CMY model

HSL és HSV

Amikor színekről beszélünk gyakran használunk olyan fogalmakat, hogy telítettség, élénkség, világosság vagy sötétség.

A színeket egy hengerrel adjuk meg, egy árnyalat (Hue), egy telítettség (Saturation), és egy fényesség (Lightness) vagy világosság (Value) segítségével.

HSL és HSV modell

Megjelenítő eszközök

Oszcilloszkóp

Az eszköz hátuljában található elektronágyú elektronokat bocsájt ki. Az elektronnyaláb útját elektromágnesekkel téríti el a vizsgált jel alapján.

Az eszköz elején lévő foszforrétegbe csapódó elektronok bocsájtják ki a fényt.

Oszcilloszkóp felépítése

CRT monitor

Őse az oszcilloszkóp - azonos működési elv.

Az elektronnyaláb végigpásztázza a képernyőt másodpercenként többször is.

A sugár ereje adott pillanatban határozza meg a fényerőt.

Színek: három elektronágyú, a beesési szögkülönbségből adódóan érik a megfelelő színszűrővel rendelkező területet.

CRT kijelző felépítése

LCD monitor

Fehér háttérvilágítás polárszűrő folyadékkristály réteg, amely elektromos feszültség hatására különböző mértékben forgatja el a fény polarizáltságát.

Színek: minden színszűrőre különböző polarizáltságú fény jut.

Végül a korábbira merőleges polárszűrőn jut át a fény, így szabályozva a kijutó fény mennyiségét.

LCD kijelző felépítése

PDP kijelző (Plasma Display)

Minden képpont maga bocsájt ki fényt.

A pixelekben nemesgáz van, ami feszültség hatására világít, a neoncsőhöz hasonló elven.

PDP kijelző felépítése

OLED kijelző

Minden pixel maga is fényforrás.

OLED kijelző felépítése

3D megkelenítők

  • Stereoscopy:
    • Mást lát a két szem, nincs mozgás parallaxis.
    • Head mounted display
    • Shutter glasses
    • Polarizált lencséjű szemüveg
  • Autostereoscopy:
    • Nem kell hozzá külön eszköz a felhasználó részéről.
    • Parallax barrier
    • Lenticular lens

Raszter-, és vektorgrafika

Rasztergrafika

Az ábra legkisebb egysége a pixel, ami egy színt reprezentál.

A pixeleket valamilyen -es tömbben tároljuk.

Nagyításkor és kicsinyítéskor csak a pixelek látható méretét módosítjuk.

Vektorgrafika

A kép matematikailag leírható elemekből épül fel: görbék, síkidomok.

Ezekhez vannak rendelve különböző tulajdonságok: szín, kitöltés, vonalvastagság.

Az egyenes tényleg egyenes, a görbék bármilyen nagyítás alatt ívesek maradnak.

Források

Koordináta-rendszerek, egyenesek és síkok

Alapfogalmak

Hogyan írjuk le a virtuális világunkat?

  • A virtuális terünk egy pontját miként adjuk meg, hogyan tároljuk a számítógépen?
    Koordináta-rendszerek
  • Az egyszerű geometriai komponenseket hogyan adjuk meg?
    Pontok halmaza
    leírás különböző koordináta-rendszerekben

Pontok, vektorok

Pont: az euklideszi sík/tér egy eleme, amelynek semmiféle kiterjedése sincs.

Vektor:

  • algebrailag: egy vektortér eleme
  • geometriailag: egy eltolás, aminek iránya és hossza van
  • műveletei: összeadás, kivonás, skalárral szorzás, vektorális szorzat, skaláris szorzat

Vektororok összeadása

Legyen két vektor: .
Ekkor

Vektororok kivonása

Legyen két vektor: .
Ekkor

Vektor szorzata skalárral

Legyen a vektor: .
Ekkor

Vektororok skaláris szorzata

Legyen két vektor: és jelölje a skaláris szorzatukat.
Ekkor

Ez kifejezhető úgy is, hogy , ahol az és vektorok által bezárt szög.

Vektororok vektorális szorzata

Legyen két vektor: és jelölje a vektorális szorzatukat.
Ekkor

A vektorális szorzat kifelyezhető determinánsal is:

Egy pont és egy vektor is a választott koordináta-rendszerbeli koordinátáinak megadásával definiálható.

Műveletek pontok és vektorok között

  • pont vektor pont pont eltolása
  • pont pont vektor különbségvektor
  • pont pont nincs értelmezve!

Ha pontokat, egyeneseket és síkokat veszünk, akkor ezeket különbözőnek tekintjük.

Jelölések

  • Pontok:
  • Vektorok:
    • olyan vektor, amely egység hosszú
  • Egyenesek:
  • Síkok:
  • Mátrixok:

Koordináta-rendszerek

A tér pontjainak egyértelmű leírására szám n-esek segítségével. pl.:

Lehetővé teszi az algebrai és analitikus eszköztár felhasználását geometriai problémák megoldására.

Egy, a problémához jól illeszkedő koordináta-rendszerben a probléma leírása egyszerűbb lehet.

Descartes koordináta-rendszer

Az euklidészi tér minden véges pontjához egyértelműen hozzárendel egy rendezett, valós számhármast.

A térben derékszögű koordináta-rendszert határoz meg egy kezdőpont (origó), és egy ortonormál bázis: három egymásra páronként merőleges egységvektor.

Ekkor egy pont koordinátái sorban az origóból a -be mutató vektor bázisvektorokra vett előjeles merőleges vetületével egyezik meg. (skaláris szorzat)

Vagyis a fenti értelmezés szerint, felhasználva az egységnyi hosszú, koordinátatengelyek irányába mutató bázisvektorokat, az koordináták a következő pontot azonosítják:

Sodrásirány (orientation)

Bal-, és jobbkéz szabály

Sodrásirány

Két pont távolsága

Vektor hossza

( jelölés jelentése)

Polárkoordináta-rendszer

Egy kezdőpont (referenciapont) és egy abból induló félegyenes (polártengely) határozza meg.

Egy pont helyét két adat azonosítja: :

  • : a pont -tól vett távolsága
  • : az -ból induló -n átmenő félegyenes polártengellyel bezárt szöge

Általában akkor használjuk, ha az ábrázolni kívánt dolgokhoz jól illeszkedik, pl. körmozgás.
Hátrányai: egyik PKR-ből másikba áttérni költséges, deriváltak számítása szükséges.

Gömbi koordináták

Térbeli polár-koordináták; meghatározza egy alapsík (és annak PKR-r) illetve egy arra merőleges " tengely".

Egy térbeli p pontot három adat reprezentál:

  • : a pont alapsíkra vett vetületének polárkoordinátái
  • : az -ból kiinduló és -n áthaladó félegyenes tengellyel bezárt szöge
  • : a pont és az origó távolsága. (ha akkor bármi lehet a két polárszög, konverziók előtt ellenőrizni kell)

Konverziók

Ha a Descartes origó és a polár referenciapont, illetve a Descartes x-tengely és a polártengely megegyezik:

  • Polár Descartes:
  • Descartes Polár:

Ha , akkor és emellett tetszőleges szöggel visszakapjuk az origót. Nem egyértelmű a polár szög, az -át még azelőtt ellenőrizzük, hogy a fenti konverziós képleteket próbálnánk használni.

A síknál látottakhoz hasonló feltételek mellett:

  • Gömbi Descartes:
  • Descartes Gömbi:
    • , ha
    • , ha

Baricentrikus koordináták

Sokszor egy konkrét, véges része érdekes csak számunkra a térnek. Ennek Descartes-félénél egy "kiegyensúlyozottabb" reprezentációját keressük.

A baricentrikus koordináták nem függnek egy pont önkényes orígónak választásától.

Tömegközéppont

Mechanikai analógia: pontrendszer tömegközéppontja

Legyen a síkban 3 pontunk és helyezzünk minden pontba súlyt.
Ekkor a tömegközéppont:

Homogén jellegű megadás: egy számmal megszorozva a súlyokat is ugyanazt a pontot kapjuk.

Ha -ben az pontok kifeszítik a teret (azaz nem esnek egy dimenziós altérbe), akkor a tér bármely pontjához egyértelműen találhatóak valós számok úgy, hogy

(lineáris kombináció)

ahol a baricentrikus koordinátákra teljesül, hogy

(mivel súlyok)

Síkban tehát 3 általános állású pont kell (olyanok, amelyek nem esnek sem egyenesbe, sem pontba), a térben 4 általános állású pont kell.

Ha -re , akkor konvex kombinációról beszélünk és a pontok konvex burkába esnek a kombináció eredményei.

Az affin transzformációk nem változtatják meg a baricentrikus koordinátákat.

Síkbeli baricentrikus koordináta-rendszer

Legyen

A mennyiség az pontok által meghatározott háromszög előjeles területének duplája (pozitív, ha óra járásával ellentétes irányban adottak a csúcspontok, különben negatív)

Ha -ban vagyunk: , ahol a három pont síkjának egység hosszú normálisa.

Baricentrikus Descartes konverzió

  • Baricentrikus Descartes:
    • Legyenek egy pont baricentrikus koordinátái a
      általános állású pontokra vonatkoztatva.
    • Ekkor az -vel azonosított pont Descartes koordinátái
      , azaz
  • Descartes Baricentrikus:
    • Egy pont baricentrikus koordinátái a következők lesznek a
      általános állású pontokra vonatkoztatva:

Homogén koordináták

Motiváció

Egymással párhuzamos egyenesek nem találkoznak.
Ötlet: Bűvítsük ki -t!

tekintsük "pontnak" az egyenesek egyező állását (irányát) is, azaz minden egyenesnek legyen még egy "pontja".

Ez a pont az egyenes ideális pontja.

Ideális pont

Egyenes egyenes ideális pont úgy, hogy:

  • Párhuzamos egyenesek ideális pontja megegyezik ("találkoznak a végtelenben")
  • Egy sík ideális pontjai egy egyenesen vannak, ez a sík ideális egyenese
  • Párhuzamos síkok ideális egyenese megegyezik
  • A tér ideális elemei (pontok, egyenesek) egy síkban vannak, ez a tér ideális síkja.

Homogén tér

Homogén sík: az projektív lezárása, azaz egy kitüntetett ideális egyenessel

  • Projektív síkban két pont meghatároz egy egyenest
  • Két egyenes meghatároz egy pontot

Homogén tér: az projektív lezárása, azaz egy kitüntetett ideális síkkal

  • Három pont meghatároz egy síkot
  • Három sík meghatároz egy pontot

Az euklideszi tér minden pontjához hozzárendelünk egy számnégyest, homogén koordinátákat:

Az összes vektorhoz pedig:

Visszatérés Descartes koordináta-rendszerbe

Mit ábrázol az projektív térbeli elem?

  • Ha , akkor egy közönséges pontról van szó, aminek koordinátái homogén (vagy projektív) osztás után
  • Ha , de (nem mind nulla), akkor egy ideális pontról van szó, az vektorral egyező állású egyenesekhez rendeltről.
  • Ha , akkor nincs értelmezve.

Nevezetes homogén alakok

Legyen tetszőleges, nem nulla valós szám. Ekkor a következő néhány példa nevezetes pontokra:

  • az origó
  • az tengely ideális pontja
  • az tengely ideális pontja
  • a tengely ideális pontja

Tulajdonságok

A projektív síkon a pont és az egyenes, a projektív térben a pont és a sík duális fogalmak.

Figyeljünk, hogy egyes tulajdonságok az euklideszi térből nem jönnek át:

  • Egy egyenes egy pontja nem osztja két részre az egyenest! De két különböző pontja már két részre osztja
  • Egy síkot csak egy egyenese nem osztja két részre! De két különböző állású egyenese már két részre osztja
  • Két pontot összekötő egyenes szakasz sem egyértelmű! (az egyenes ideális pontja "összeregasztja" az egyenes két végét)

A homogén koordináták igen hasznosak lesznek transzformációs mátrixok használatánál, ugyanis a homogén koordináta "betartatja" a pontok és az eltolások közti műveletek szabályait.

Egyenesek és síkok leírása

Görbék, felületek

A görbéket, felületeket (amik közé az egyenes és a sík is tartozik) egy-egy ponthalmaznak tekintjük.

Hogyan adjuk meg ezeket a halmazokat?

  • explicit: mi van ha vissza akarjuk "fordítani"?
  • parametrikus:
  • implicit:

Egyenes

Egyszerű képlet:
Probléma: mi legyen a függöleges egyenesekkel?

Normálvektoros egyenlet síkban

Az egyenes megadható egy pontjával és egy, az egyenes irányára merőleges
normálvektorral:

Az egyenes pontjai azon pontok, amelyek kielégítik a egyenletet.

Az és az egyenesünk által meghatározott két félsík pontjainak jellemzése.

Homogén, implicit egyenlet síkban

Az alakot hívjuk az egyenes implicit egyenletének.

A fentiek alapján és választással a ponton átmenő, normálisú egyenes implicit egyenletét kapjuk.

Ha , akkor Hesse-féle normalizált alakról beszélünk. Ekkor a korábbi normálvektor egység hosszúságú.

A homogén egyenlet determináns alakja

Ha az egyenesünket két, pontjával adjuk meg, akkor azon pontok fekszenek az egyenesen, amelyekre

Ez a determináns az pontok által meghatározott háromszög előjeles területének duplája, ami ha 0, akkor a három pint egy egyenesbe esik.

Parametrikus egyenlet irányvektorral (2D, 3D)

Az egyenes megadható egy pontjával és egy, az egyenes irányával megegyező irány irányvektorral:

Parametrikus egyenlet két pontal (2D, 3D)

Ekkor a és pontjait ismerjük az egyenesnek. Az előbbi esethez jutunk, ha választással élünk:

Homogén koordinátás alak

A kibővített (projektív) sík egy egyenese megadható az valós számhármassal, úgynevezett vonalkoordinátákkal, amelyeket felhasználásával az egyenes minden pontjára

A sík minden ideális pontjára illeszkedő ideális egyenes vonalkoordinátái

Polár koordinátás alak

Az origón áthaladó, a polártengellyel szöget bezáró irányú egyenesek polárkoordinátás (implicit) egyenlete:

Ha az egyenesünk nem halad át az origón, akkor legyen a metszéspontja az egyenesünknek és egy arra merőleges, origón áthaladó egyenesnek. Ekkor az egyenesünk polárkoordinátái közül a sugár a polárszög függvényeként felírható:

Sík

Normálvektoros egyenlet

A sík megadható egy pontjával és a síkra merőleges normálvektorával. Ekkor a sík minden pontjára:

Félterek:

Homogén, implicit alak

A sík implicit egyenletének alakja:

Előbbiből és
választással a ponton áthaladó, normálvektorú sík egyenletét kapjuk.

Hesse normál-alak itt is, ha

A homogén egyenlet determináns alakja

Determináns segítségével is megadhatjuk a sík egyenletét, a következő determináns csak pontok által kifeszített sík pontjaira lesz nulla:

Parametrikus egyenlet kifeszítő vektorral

A sík jellemezhető egy pontjával és két kifeszítő vektorával (bázisvektorával): ahol .

Parametrikus egyenlet három pontból

A síkot meghatározza három, nem egy egyenesbe eső pontja, . Ekkor a sík minden véges pontja megkapható.

alakban, ahol .

Az előbbiből is kaphatjuk ezt

Ez egy baricentrikus megoldás:

hiszen

Homogén koordinátás alak

A kibővített tér egy síkja is megadható "síkkordinátákkal", egy olyan négyessel, amely a sík minden pontjára

Nevezetes homogén alakú síkok

  • az ideális sík
  • az koordinátasík
  • az koordinátasík
  • az koordinátasík

Források

Transzformációk

A virtuális világunkban található összetett alakzatokat több, kisebb építőelemből is összerakhatjuk az alakzat részeit el kell helyeznünk a térben.

Az alakzatokat el kell helyeznünk a világban, mozgatnunk kell őket, stb.

A virtuális világunkból egy kétdimenziós képet is elő kell állítanunk.

A fenti lépésekhez mind szükségünk lesz geometriai transzfotmációkra, amelyekkel az alakzatainkat megváltoztathatjuk.

Transzformációkról általában

Az elvárásaink:

  • minden pontot lehessen transzformálni
  • pont képe legyen pont, egyenes képe egyenes, sík képe sík
  • illeszkedést tartsa
  • legyen egyértelmű és egyértelműen megfordítható

A pontjainkat a számítógépen valamilyen koordináta-rendszerben tároljuk
a transzformációk ezeken a koordinátákon végzett műveletek.

A továbbiakban azonosítunk az euklideszi tér, elemeit a valós vektorterünk elemeivel.

Ehhez rögzítünk egy pontot, origót, és minden ponthoz a vektort rendeljük.

Lineáris leképzések

Kiemelt jelentősége lesz a lineáris leképzéseknek, azaz azon leképzéseknek, amelyekre teljesül, hogy és esetén

  • (additív)
  • (homogén)

Az lineáris leképzéseket egy mátrixszal fel tudjuk írni; ekkor

Projektív és affin transzformációk

Az ideélis síkkal kibővített euklideszi tér önmagára való, kölcsönösen egyértelmű, pont-, egyenes-, sík-, és illesztkedést tartó leképzéseit kollineacióknak, vagy projektív transzformációknak nevezzük.

Affin transzformációk a projektív transzformációknak az az alcsoportja, amelynek a kibővített tér "közönséges", euklideszi részét önmagára képzik le, és az ideális síkot is önmagára képzi le.

Közös tulajdonságok

A projektív és affin transzformációk algebrai csoportot alkotnak a konkatenáció művelettel

  • a konkatenáció asszociatív (műveletek csoportosíthatóak)
  • létezik egységelem
  • a dimenziótartó transzformációknak van inverze
  • de nem kommutatív!

Affin transzformációk tulajdonságai

Az affin transzformációk megadhatóak egy lineáris transzformáció és egy eltolás segítségével, azaz ha affin transzformáció, akkor létezik és , hogy -ra:

A mátrix-vektor szorzást ilyen sorrendben végezzük el, azaz: a matrix a bal-, a vektor a jobboldalon áll.

A megadás homogén koordináták segítségével egyetlen mátrix-vektor szorzással is felírható:

Ugyanis ekkor

Az affin transzformációk a baricentrikus koordinátákat érvényben hagyják (a baricentrikus koordináták affin invariánsak)

Affin transzformációk megadása

-ben egy affin transzformációt egyértelműen meghatároz általános állású pont és annak képe

Azaz, például síkban ha adott három általános állású

pont és ezek képei, rendre

akkor -ket -kbe átvivő transzformációra

Projektív transzformációk megadása

-ben egy projektív transzformációt egyértelműen meghatároz általános állású pont és annak képe.

Tehát síkban 4: legyen és , ekkor megadható P-re:

Transzformációk osztályozása

Nevezetes affin transzformációk

Eltolás

Minden pontot egy adott vektorral eltolunk:

Általában -vel jelöljük

Mátrix alakhoz homogén koordináták kellenek, választással és akkor a következő -es mátrixszal adható meg:

Hiszen ha homogén koordinátáit hasznájuk az pontnak, akkor

Tulajdonságok

Az eltolások az affin transzformációk egy kommutatív részcsoportját alkotják.

A inverze

Forgatás

Forgatás síkban (a tengely körül) szöggel:

Mátrix alakban:

Hasonlóan kaphatjuk meg és síkokon is.

Forgatás mátrixok

tengely körül: tengely körül: tengely körül: ahol és

Tulajdonságok

Az azonos tengely körüli elforgatások az affin transzformációk egy kommutatív részcsoportját alkotják.

A térbeli forgatások felírhatók egyetlen mátrix segítségével. (lineáris transzformáció)

Az eltolás és forgatás sorrendje nem felcserélhető!

A forgatás inverze az eredeti forgatás nagyságával megegyező, de ellentétes irányú elforgatás:

Tetszőleges forgatás

Tetszőleges orientáció előállítható a három forgatás egymás utáni használatával.

Tetszőleges tengely körüli forgatás

Az eddigieket használva:

  • toljuk el a forgástengelyt az origóba ()
  • forgassuk be az egyik tengely körül a másik kettő síkjába (pl.: )
  • ebben a síkban a két tengely közül az egyikkel forgassuk be a másik tengelybe (pl.: )
  • végezzük el a forgatást (pl.: -szel, de ez az új \X{\prime\prime} tengely körül forgat!)
  • alkalmazzuk az eddigi transzformációk inverzeit

Azaz például:

Tetszőleges tengely körüli forgatás megadható egy egységvektorral, ami a forgatás tengelyét adja, és egy szöggel.
Ezt írja le a Rodrigues formula, aminek felhasználásával:

Yaw, pitch, roll

Egy objektum függőlege- (yaw), kereszt- (pitch) és hossztengelye (roll) menti elfordulásait egyszerre adjuk meg.

Repüléstanban és robotikában előszeretettel használt megadási mód.

Gyakorlatilag megegyezik azzal, mintha három "közönséges" tengely menti forgatást használnánk.

Csak akkor működik helyesen, ha az objektum tengelyei egybe esnek a koordináta-rendszer tengelyeivel.

Legtöbb API támogatja.

Mozgás-transzformációk

Az eltolások és tengely körüli elforgatások kombinációjaként leírható transzformációkat mozgás-transzformációknak nevezzük.

A tárgyak alakját és méretét nem változtatják.

Méretezés

Az tengelyek mentén "széthúzzuk", vagy "összenyomjuk" az alakzatot, azaz más léptéket választunk.

Mátrix alakban:

Speciális eset: tükrözés

Ha valamelyike negatív

  • ha egy negatív: tükrözés az irányra merőleges síkra
  • ha kettő negatív: tükrözés egy tengelyre
  • ha mindhárom negatív: középpontos tükrözés

Ha páratlan számú negatív együttható van, akkor a sodrásirány is megváltozik!

Az bázisvektorokat felhasználva, ha lineáris transzformáció, akkor

ha egy transzformáció mátrixának determinánsa negatív, akkor a sodrásirány (a tárgyak térbeli irányítása) megváltozik.

Speciális eset: vetítés

Ha valamelyike nulla

  • ha egy nulla: az irányra merőleges síkra vetítünk
  • ha kettő nulla: egy tengelyre vetítünk
  • ha mindhárom nulla: az origóba vetítünk mindent...

A determináns nulla nincs inverz!

Nyírás

nyírás

Ha például minden pontban az értékeket -vel arányos mértékben módosítjuk:

Általánosan:

Áttérés új koordináta-rendszerre

Tegyük fel, hogy az ortonormált bázisvektorok helyett át akarunk térni az ortonolmárt bázisra (az új bázisvektorok koordinátáit ismerjük a régi bázisban)

Mik lesznek az eddig koordinátákkal azonosított pont koordinátái az új bázisban? Azaz milyen -re teljesül, hogy ?

Ortonormált mátrix inverze a mátrix transzponáltja, így az új koordinátákat adó mátrixunk a következő alakú:

Ha az új origó koordinátája , akkor

Áttekintés

Kommutativitás

A mátrix szorzás nem kommutatív, úgyhogy általaban nem igaz, hogy Ez jó, mivel általában a transzformációk sem kommutatívak.

Transzformációs mátrixok determinánsai

A méretezésnél láttuk, hogy ha egy vagy három együtthatója negatív a transzformációnak, akkor az megfordítja a sodrásirányt.

Általános esetre megfogalmazva:

  • Ha , akkor a sodrásirány változatlan marad
  • Ha , akkor a sodrásirány megfordul

Normálvektorok transzformációja

Legyen egy szakasz a síkban, normálvektorral. Legyen az tengely mentén kétszeres nyújtást leíró transzformáció.

Probléma: -t megkaphatjuk, ha eltranszformáljuk a két végpontját. Mi a helyzet normálvektorával? lesz? Nem!

Vizsgáljuk a normálvektor által megadott érintősík egyenletét!

Legyen az érintősík egy pontja, ekkor akkor és csak akkor van rajta a síkon, ha

Ekkor testzőleges (invertálható) transzformáció mellett:

A skaláris szorzat és a mátrix szorzás szabályai alapján kapjuk, hogy

Azaz a normálvektorokat az mátrix helyett annak inverztranszponáltjával kell szorozni!

Megjegyzés

A sík affin transzformációit egyértelműen meghatározza három független pont és azok képe.

A tér affin transzformációit egyértelműen meghatározza négy független pont és azok képe.

Projektív transzformáció

A színterünk képét akarjuk előállítani: vetíteni egy síkra

Az ember által látott képet nem lehet előállítani affin transzformációk segítségével. A "távolodó" párhuzamosok összetartanak, nem maradnak párhuzamosak.

Ez a látvány előállítható középpontos vetítéssel. Ez a transzformáció a homogén térben lineáris transzformáció.

Az affin transzformációk nem "bántották" az ideális elemeket, a fentiekhez azonban ez "kell".

Általános eset

Ha egy homogén transzformációs mátrix utolsó sora nem , akkor az olyan homogén lineáris transzformáció, ami az euklidészi térnek nem lineáris transzformációja.

Párhuzamos vetítés (ortogonális)

A mátrix ami megadja egyszerű, például síkra való vetítést:

Perspektív transzformáció

Középpontos vetítést valósít meg.

Az origóból a tengely mentén "nézünk" a térre.

A látótérnek egy csonkagúla felel meg.

A transzformáció a szem pozícióban találkozó vetítő egyenesekből párhuzamosakat csinál.

A csonkagúlát egy téglatestté transzformálja.

Paraméterei:

  • a gúla függőleges nyílásszöge
  • a gúla alapjának az oldalainak az aránya
  • a közeli vágósík távolsága
  • a távoli vágósík távolsága

perspektív transzformáció

Homogén osztás

Mivel egy "valódi" projektív transzformáció utolsó sora nem , ezért transzformáció után, általános esetben.

Ha ezt a pontot az eukleidészi térbe szeretnénk átvinni, akkor végig kell osztanunk -vel (ha ).

Középpontos vetítés

Az origó, mint vetítési középpont és egy, attól a tengely mentén egységre található, síkkal párhuzamos vetítősíkra való vetítés mátrixa: Homogén osztás után (-vel) a fentit kapjuk.

Megjegyzés

A sík projektív transzformációit egyértelműen meghatározza négy független pont és azok képe.

A tér projektív transzformációit egyértelműen meghatározza öt független pont és azok képe.

Transzformációs mátrixok - összefoglalás

Mi történik, ha a vektorunk negyedik koordinátája nulla (vagyis ha vektort azonosít a számegyenes)?

Az eltolás rész nem hat rá!

Figyeljünk: nem mindenhol szoroznak jobbról a vektorral!

transzformációs mátrixok felépítése

Források

Görbék, felületek és a fény útja

Egyszerű görbék és felületek

A görbéket, felületeket egy-egy ponthalmaznak tekintjük.

Hogyan adjuk meg ezeket a halmazokat?

  • explicit:
  • parametrikus:
  • implicit:

Görbék

Görbék transzformációja

Hogyan transzformálhatunk görbéket a különböző megadási módokban?

  • Explicit:
    • Függőleges eltolás és nyújtás: függvényérték módosítása
    • Vízszintes eltolás és nyújtás: a paraméter módosítása
  • Parametrikus: az eredménypont transzformációja
  • Implicit: a paraméter transzformációja inverzzel

Parabola

Az tengelyű, fókuszpontú parabola egy

  • Implicit egyenlete:
  • Explicit egyenlete:
  • Parametrikus egyenlete:

Mi van ha a pontba akarjuk eltolni az origóból a parabolát?

Az implicit és az explicit alakban be kell vinni a koordinátákat. (pl. implicitből lesz)

Parametrikus alakban egyszerűen lesz az új alak.

Kör

A középpontú, sugarú kör egy

  • Implicit egyenlete:
  • Explicit alakban nem tudjuk az egész kört leírni egy függvénnyel
    (De két darabban menne, pl.: mellett , ahol )
  • Parametrikus egyenlete: , ahol

Ellipsis

A középpontú, nagytengelyével az tengellyel párhuzamos, nagytengelyű és kistengelyű ellipszis egy

  • Implicit egyenlete:
  • Explicit alakban ugyan az a probléma, mint a körnél.
  • Parametrikus egyenlete: , ahol

De mi van, ha nem akarjuk, hogy tengellyel párhuzamosak legyenek a tengelyeink?

  • Implicit egyenlet: ez munkás(nak tűnik és habár nem az, de nekünk most nem kell...)
  • Parametrikus egyenlete: bázisccsere! Ha az új tengelyek , akkor
    , ahol

Szakasz

Legyen adott két pont, . A két ponton átmenő egyenes parametrikus egyenlete: ahol

Ha , akkor az pontokat összekötő egyenes szakaszt kapjuk.

(lineáris interpoláció)

Görbék parametrikus alakja

Derivártak:

Ha a görbét egy mozgó pont pályájának tekintjük, akkor az első derivált a sebességnek tekinthető, a második agyorsulásnak stb.

Görbe érintőegyenese

A görbe első deriváltja
görbe érintője

Felületek

Felületek megadása:

  • Explicit:
  • Implicit:
  • Parametrikus:

Matematikában általában a felfelé mutató tengelynek a tengelyt tekintik

Az alábbi képletek is ennek megfelelően adják a "várt" képet Grafikában viszont sokszor az mutat felfelé!

Felületek felületi normálisa

A felület érintősíkjának normálisa

Ha a parametrikus alakban adott a felület:

Implicit alakban adott felületnél , ahol

felületi normális

Gömb

Implicit egyenlet:

Parametrikus egyenlet:

Ellipszoid

Implicit egyenlet:

Parametrikus egyenlet:

Egyszerű paraboloid

Parametrikus egyenlet:

A fény útja

Jelölések

  • a megvilágító, a fényt "adó" pont felé mutató vektor, ekkor a beesési irány .
  • a felületi normális.
  • egységvektorok.
  • az és az által bezárt szög.

Ideális tükröződés

Visszaverődési törvény

A beesési irány (), a felületi normális (), és a kilépési irány () egy síkban van, valamint a beesési szög () megegyezik a visszaverődési szöggel ()

Visszaverődési irány

Általános esetben, egy beeső vektorból a visszaverődési- vagy tükörirány:

Mivel , és egységnyi hosszúak.

Ideális törés

Snellius-Descartes törvény

A beesési irány (), a felületi normális (), és a törési irány () egy síkban van, valamint , ahol az anyagok relatív törésmutatója.

Törési irány

Snellius-Descartes törvény:

Források

Raycasting

Tekintsünk minden pixelre úgy, mint egy kis ablakra a világra.

Milyen színértéket vegyen fel ez a pixel? Nézzük meg, mi látszik onnan a világból és az alapján rendeljünk hozzá a pixelhez egy színt!

Az algoritmus

	for each pixel:
		cast a ray into the scene

		for each object in scene:
			check if the ray intersects the object

		set pixel to the color of the closest object

Sugár

A sugárnak van

  • egy kiindulási pontja
  • egy iránya

A parametrikus sugár: ahol (félegyenes).

?, ? sugár kezdőpontja, sugár mögötti részek.

Sugarak indítása

A szempozcióból indítunk sugarakat minden pixel középpontján keresztül

Most: középpontosan szeretnénk vetíteni egy kamerába, a vetítési sík egy négyszögletes részét megfeleltetve a képernyőnek.

Kamera tulajdonságok

  • Szempozíció (eye),
  • Egy pont amire néz (center),
  • Felfele irányt megadó vektor a világban (up),
  • Nyílásszög, amekkora szögtartományt lát (fov),
  • Vetítővászon mérete. Most legyen adott:

Ezek segítségével fogjuk megadni pixel világbeli koordinátáit.

Keressük a kamera saját (jobbkezes) koordináta-rendszerét.

  • Nézzen a kamera irányba!
  • Az tengely legyen merőleges mind -re, mind az irányra!
  • Az tengely merőleges -ra és -re is:

Pixel koordináták

Legyen az pixel középpontja, a vetítősík egységnyi távolságra a nézőponttól!
Ekkor: Ahol

A sugár egyenlete

A sugár egy félegyenes, amit kezdőpontjával és irányvektorával adhatunk meg.

Legyen a sugár kezdőpontja, pedig az irányvektora, ekkor megadja a sugár összes pontját.

Most a sugarak kezdőpontját az előbbieknek megfelelően számolhatjuk, azaz

A sugár irányvektora pedig

Metszések

A sugárkövető programok futásidejük döntő részében metszéseket fognak végezni.

Nézzük meg néhány egyszerű geometriai elemmel vett metszetét a sugárnak.

A sugarak mindig a korábban is látott alakú, ahol feltesszük a továbbiakban, hogy .

Ekkor a sugárparaméter éppen a pont távolsága -tól.

Parametrikus sugár és implicit felület metszéspontja

Legyen adva egy implicit egyenlet, ami meghatározza a metszeni kívánt felületet. ()

A sugarunk egyenlete -re meghatározott egy pontot a térben helyettesítsük be ezt a képletet az implicit egyenletbe!

Tehát a következő egyenletet kell megadnunk -re:

A kapott -től függően a következő esetek állhatnank fenn:

  • Ha , akkor a sugarunk előtt van a felület és metszi
  • Ha , akkor a sugár kezdőpontja a felületen van
  • Ha , akkor a sugár "mögött" van a felület és metszi a sugár egyenese a felületet (de nekünk kell!)

Parametrikus sugár és parametrikus felület metszéspontja

Legyen adva egy parametrikus felület.

Kell találni egy olyan sugárparamétert, amihez létezik , hogy

Ez három ismeretlenes (), három egyenletes ( koordinátáként egy) egyenletrendszer.

A ugyanúgy ellenőrizhető, mint előbb, de most az -re is figyeljünk, hogy a felületünk paramétertartományának megengedett részén van-e (általában kell)!

Sugár és implicit sík metszéspontja

Síkot megadhatunk implicit alakban:

A fenti sugár egyenese metszi a síkot, ha

Ezt -re átrendezve adódik

Látható a sík a nézőpontunkból, ha

Sugár és normálvektoros sík metszéspontja

Legyen a sík egy pontja, a normálvektora.

Legyen ez egyenes egy pontja, az irányvektora.

Az egyenes egyenlete:

A sík egyenlete: minden pontja a síknak kielégíti ezt az egyenletet.

Behelyettesítve -t a helyére:

ha

A sugár metszi a síkot, ha .

Ha , akkor az egyenes párhizamos a síkkal, és így vagy nincs metszéspontjuk, vagy az egyenes a síkon fut.

Sugár és parametrikus sík metszéspontja

Síkot megadhatunk egy pontjával és kifeszítő vektorokkal is:

Metszéspont a sugár egyenesével: keressük és -t úgy, hogy

Beírva a képletet adódik

Átrendezve kapjuk, hogy

Ez három ismeretlenes, három lineáris egyenletből álló egyenletrendszer, ami megoldható, ha lineárisan nem összefüggő.

Mátrix alakban:

Látjuk a síkot, ha (most a felület paramétertartománya, ez teljesülni fog)

Sugár és háromszög metszéspontja I.

A háromszög egyértelműen megadható három csúcsával.

Ha a háromszög csúcsai, akkor a hozzátartozó sík egy parametrikus megadésa

A korábbi jelölésekkel: és

Ez egyben egy baricentrikus megadása is, hiszen átrendezve kapjuk, hogy

ahol az együtthatók -re összegződnek.

Elvégezve tehát a parametrikus síkkal a metszést, megkapjuk a baricentriukus koordinátáit a sugár síkkal való metszéspontjának. A sugárparamétert ne felejtsük el ellenőrizni!

Utolsó lépésként ellenőriznünk kell, hogy a metszéspont a háromszögön belül van-e. Ez pontosan akkor teljesül, ha

Sugár és háromszög metszéspontja II.

A háromszög egyértelműen megadható három csúcsával.

Ha a háromszög csúcsai, akkor a hozzátartozó sík pont-normálvektoros implicit megadásához a sík

  • egy pontja bármelyike
  • normálvektora

ahol a vektorális szorzatot jelöli, és ekkor egységnyi hosszúságú.

Először számítsuk ki az egyenes és a háromszög síkjának metszéspontját, ez legyen (már ha létezik).

Legyenek a pont -re vonatkoztatott baricentrikus koordinátái, úgy hogy

akkor, és csak akkor van a háromszögön belül, ha

Pont a háromszögön vizsgálat

Tudjuk, hogy . Ekkor ill

A gyorsabb számolásértvegyük a fentiek egy síkra vett vetületét.

A koordinátasíkok közül (, vagy ) arra vegyük a háromszög 2D vetületét, amelyre a háromszög vetületének területe a legnagyobb! a héromszög és sík normálisa leginkább "egyálású".

A vetülethez egyszerűen elhagyjuk vagy egyenletét, megfelelően.

Azt a tengelyt kell választani, amelyik mentén a legnagyobb a háromszög normálvektorának abszolút értéke, így biztos nem fordulhat elő, hogy a háromszög merőleges a síkra, és csak egy szakasz marad belőle.

Pl. legyen a a választott tengely. Ekkor

Behelyettesítve -t, és rendezve:

Rendezve -re kapjuk:

A nevező csak degenerált háromszög esetén lehet nulla.

akkor, és csak akkor van a háromszögön belül, ha

Sugár metszése poligonnal

Tegyük fel, hogy a poligonunk csúcsai egy síkban vannak, ekkor a metszés két lépésben történik

  • A sugarat metsszük el a poligon síkjával
  • Döntsük el, hogy a metszőpont a poligonon belül van-e

A másodikat egy síkban érdemes csinálni (vagy a poligon síkjában, vagy a poligon valamely koordinátatengelyre vett vetületének síkjában)

Pont-poligon tartalmazás teszt síkban

A pont a poligonon belül van, ha tetszőleges irányú, belőle indított sugárnak páratlan számú metszéspontja van a poligon oldalaival. (azaz a sugarat a poligon összes oldalszakaszával el kell metszeni)

Konkáv és csillag alakú poligonra is működik.

Sugár metszése szakasszal

A poligon csúcspontjai közötti szakasz parametrikus alakja:

Ezt kell metszeni a alakú sugárral

Most: a pont az a pont, amiről el akarjuk dönteni, hogy a poligonon belül van-e, tetszőleges.

Legyen !

Így a egyenletet csak koordinátára kell megoldani.

Keressük meg, hogy hol metszi a oldal egyenese a sugarat ( melyik -re lesz ?)

Azaz

-t kifejezve:

Innen megkapjuk azt az koordinátát -be behelyettesítve, ahol a sugér metszi a szakaszt.

Ha : a sugár nem metszi a szakaszt (csak az egyenesét).

Ha : a sugár egybeesik a szakasszal, vagy mögötte van a metszéspont.

Sugár és gömb metszéspontja

Az sugarú, középpontú gömb implicit egyenlete:

Ugyanez skalárszorzattal felírva: ahol

Legyen az egyenes egy pontja, az irányvektora.

Ekkor az egyenes egyenlete:

Behelyettesítve a gömb egyenletébe ezt kapjuk:

Kifejtve:

Ez másodfokú egyenlet -re (minden más ismert).

Legyen

  • Ha , két megoldás van, az egyenes metszi a gömböt.
  • Ha , egy megoldás van, az egyenes érinti a gömböt.
  • Ha , nincs valós megoldás, az egyenes nem metszi a gömböt.

Sugárparamétert ezután ellenőrizni kell ().

Másodfokú egyenlet megoldása

Elméletileg a megoldás megkapható esetben:

Gyakorlatilag baj van, ha

  • Átalakítással megkapjuk, hogy formában felírható a két gyök (Citardauq Formula)

Gyakorlatilag akkor is baj van, ha

  • Ekkor , vagyis előjelétől függően vagy vagy pedig elveszít az értékes tizedesjegyeket.
  • Számítsuk ki az egyik gyököt azon az ágon, amelyiken nem vonunk ki egymásból két közrl azonos pozitív számot, a másik gyököt pedig a Viète-formulákból
  • Azaz például ha , akkor és

Sugár és transzformált objektumok metszése

Legyen egy adott objektum transzformációs mátrixa.

Feladat: Keressük sugár és az -mel transzformált objektum metszéspontját!

Probléma: Hogyan transzformálunk egy gömböt? Pontonként? Képletet írjuk át?

Megoldás: transzformáljuk inkább a sugarat!

Tétel: Az sugér és az -mel transzformált objektum metszéspontja az -el transzformált sugár és az objektum metszéspontja.

  • , homogén transzformáció
  • Sugár kezdőpontja:
  • Sugár iránya: . Így nem hat ré az eltolás.
  • Transzformált sugár:

Metszetvizsgálat: használjuk -t!

Metszéspont: , akkor az eredeti térben

Távolságokaz újra kell számolni az eredeti térben!

Normálvektorok: helyett (inverz-transzponált)

Sugér metszése AAB-vel

AAB axis aligned box, olyan téglatest, aminek az oldallapjai a koordinátasíkjainkkal párhuzamosak.

Legyen a sugarunk alakú, ahol
a téglatestet pedig adjuk meg átlójának két pontjával, és segítségével ()!

Tegyük fel, hogy a sugár kiindulópontja a doboztól balra helyezkedik el.

Legyen

Ha : merőleges az -tengelyre (pl. 2D-ben függőleges). Ekkor nincs metszéspont, ha , különben az -koordinátás számításokat kihagyhatjuk.

Ha , akkor legyen

Ha : cseréljük meg -t!

Ha :

Ha :

A fentit végezzük el az és koordinátákra is.

Ha : nem találtuk el a dobozt.

Ha : a doboz mögöttünk van.

Minden más esetben a sugarunk metszéspontjai a dobozzal és -ban lesznek (sorban a közelebbi és távolabbi metszéspontok)

Források

Fejlettebb raycasting

Rekurzív sugárkövetés

Minden pixelre egymástól függetlenül határozzuk meg azok színét, oldjuk meg az árnylási és takarási feladatokat.

Fénykomponensek

A fény útját kétféle komponensre bontjuk:

  • Koherens komponens:
    • Az optikának megfelelő ideális visszaverődés és törés
    • Továbbkövetjük a fény útját
  • Inkoherens komponens:
    • Minden egyéb
    • Ezek közül mi csak az absztrakt fényforrás direkt megvilágítását vesszük figyelembe.

Jelölés

Két vektor skalár szorzatát az egyszerűség kedvéért most -vel fogjuk jelölni.

Az irányok jelölésére stb. betűket használjuk, de ezek továbbra is egységhosszú vektorok, azaz

Egyszerűsített illuminációs egyenlet

1 2 3
4 5 6

Sugárkövetés

Az felületi pontból az irányban kibocsátott radiancia

  • A szempozícióból sugarakat indítunk minden pixelen keresztül
  • A sugarak irányát -val jelöljük
  • A sugár és a színtér objektumainak szemhez legközelebbi metszéspontja adja meg -et.

Emisszió

Ez a tag a felület saját sugárzását írja le az felületi pontból az irányába.

Ambiens fény

a felület, a környezet ambiens együtthatója. Az egyenlet ambiens tagja közelíti azt a fénymennyiséget, ami általánosan jelen van, minden felületet ér, azok helyzetétől és az absztrakt fényforrásoktól függetlenül. Célja a közelítések miatt elhagyott fénymennyiség pótlása.

Fényforrások

A figyelembe vett inkoherens visszaverődéseket foglalja össze a szummás tag.

Csak a fényforrások direkt hatását vesszük figyelembe, és csak akkor, ha az az felületi pontból látszik.

  • a fényforrásból a felületi pontba mutató egységvektor.
  • most csak a diffúz és spekuláris visszaverődést jellemző BRDF.
  • a felületi normális és a fényforrás felé mutató vektor
    által bezárt szög koszinusza egységnyi idő alatt -ből mennyi foton esik rá a felületre.
  • Ha az fényforrás teljesítménye felénk és pozíciója akkor
  • láthatósági függvény: Mi van / van-e valami és a fényforrás között?
    • , ha a fényforrás nem látható -ből
    • , ha igen,
    • , ha áttetsző objektumok vannak a kettő között.
    • kiszámításához úgynevezett árnyéksugarakat indítunk -ből -felé, és az objektumokkal való metszését nézzük.
Négyzetes elhalás

Miért a metszéspont és a fényforrás távolságának négyzetével osztunk?

Tekintsünk egy pontszerű fényforrást, ami minden irányban egyenletesen sugároz radianciát.

Egyre távolodva tőle, a pontszerű fényforrás köré írt gömbön négyzetcentiméterenként mennyi fényt mérnénk? Radiancia osztva a távolsághoz tartozó gömb felületével, azaz

Tehát két különböző távolságban mért fénymennyiség aránya

Tükröződés

A tükörirányból érkező fényt arányban vesszük figyelembe.

az ideális tüköriránynak megfelelő beeső vektor.

Az az -ből induló, irányvektorú sugár legközelebbi metszéspontja színtérbeli elemmel.

kiszámítása azonos kiszámításával: rekurzió!

Új sugár: szempozíció helyett -ből indul, irány

Fénytörés

A törési-irányból érkező fényt arányban vesszük figyelembe.

a törésiránynak megfelelő beeső vektor.

Az az -ből induló, irányvektorú sugár legközelebbi metszőpontja színtérbeli elemmel.

kiszámítása megint azonos kiszámításával: rekurzió!

Új sugár: szempozíció helyett -ből indul, az iránya pedig

Színek

A képletek csak fénymennyiséggel számolnak, így valójában egyetlen hullámhosszon számítottuk ki a kamerába érkező fényt.

A hullámhossztól függ majdnem minden:

  • A felület és a fényforrások által kibocsátott fény:
  • A felület fényvisszaverő tulajdonsága (BDRF, közelítő és koherens együtthatók):
  • ideális törésirány:

Tehát el kell végeznünk a számítást a látható fénytartomány minden hullámhosszára.

Ehelyett rendszerint csak néhány hullámhosszon.

Gyakorlatban sokszor csak RGB színhármasnak megfelelően.

Önárnyékolás

A numerikus pontatlanságok miatt előfordulhat, hogy a metszéspont valójában kissé a testen belül van.

Ilyenkor a fényforrások felé lőtt sugarak beleütközhetnek a kiindulási felületbe!

Vagy hagyjuk ki a metszésszámításokból a legutóbb metszett objektumot (ahonnan indulunk), vagy toljuk el a sugár kezdőpontját a felületi normális irányába.

Figyeljünk arra is, hogy mi is kell pontosan: a metszéspont helye vagy elég-e maga a metszés ténye?

Aliasing

Egyenközű pontonkénti mintavételezést csinálunk lényegében a mintavételezési frekvenciánál gyorsabb változások alias-olnak, azaz nem létező, alacsonyabb frekvenciás jelkomponensekként regisztráljuk őket.

Mintavételezés

Eddig csak pixelenként egyetlen sugarat indítottunk.

Ha többet indítunk, akkor a Nyquist-frekvencia nő.

Pixelenként egy szín kell csak a sugarak által behozott különböző színeket összegezni kell valahogy (pl. átlagolni)

De a több sugár eredményét is többféleképpen összegezhetjük (vagyis: szűrhetjük)

Egyenletes mintavételezéssel az alias nem szüntethető meg (csak ha a bejövő jel garantáltan nem tartalmaz túl magas frekvenciás komponenseket)

Azonban ha nem egyenletes a mintavételezés, hanem megfelelő eloszlás szerint történik, akkor az alias helyett véletlenszerő, nagyfrekvenciás zaj lesz a képen.

Ehhez a szemünk már alkalmazkodott!

Vegyük észre: a fényt fent végig részecskeként kezeltük.

Emiatt a fény hullám természetéből adódó jelenségeket (interferencia, diffrakció ) nem tusjuk visszaadni.

Mikor számítanak ezek?

  • Az interferencia miatt látjuk olyan színben a páva tollait, vagy a szappanbuborék felszínét amilyenben látjuk.
  • A diffrakció pedig a finom árnyjelenségek egy részében játszik szerepet.

Sugárkövetés gyorsítása

Metszésvizsgálat gyorsítása

Az algoritmus sebessége leginkább a metszésvizsgálat sebességétől függ.

Hogyan gyorsíthatnánk ezt?

Ne vizsgáljuk a metszést olyan objektumokra, amiket biztosan nem metsz a sugár!

Ne vizsgáljunk metszést olyan objektumokra, amik biztosan távolabbi metszéspontot adnak, mint a már megtalált!

Befoglaló keretek

Minden objektumot vegyünk körbe valamilyen kerettel amivel gyorsan lehet metszést számolni.

Ha egy sugár metszi az objektumot, akkor biztosan metszi a keretet is!

Fordítva is legyen minél nagyobb a valószínűsége! (Minél jobban közeltse a befoglaló test az igazit.)

Befoglaló gömb: másodfokú egyenlet megoldás.

Befoglaló doboz: élei a tengelyekkel párhuzamosak, Cohen-Sutherland szakaszvágó algoritmussal gyorsan számítható.

Konvex poliéderek

Egy -oldalú konvex poliéder felírható féltér metszeteként (féltér: )

Azaz az oldallapok síkjait kifelé mutató normálisokkal felírhatjuk alakban.

A korábban látott sugár-AAB metszés könnyen általánosítható erre az esetre!

Legyen a sugár

Legyen

Minden oldallapra:
Legyen a lap , egyenlete olyan, hogy az lapnormális a poliéderből kifelé mutat.

  • Számítsuk ki a sugár és az oldallap síkjának metszéspontját
  • Ha , akkor
  • Különben

Ha , akkor nincs metszéspont.

Különben a sugár egyenese -nél lép be és -nál hagyja el a konvex poliédert (azaz metszi a sugár a konvex poliédert, ha )

Hierarchikus befoglaló keretek

Kisebb kereteket nagyobb keretekbe fogjuk össze.

Fa struktúrát kapunk.

Egy részfát csak akkor kell kiértékelni, ha a gyökérrel van metszés.

Térfelosztó eljárások

Szabájos felosztás

Egy szabályos 3D ráccsal lefedjük az egészet színteret.

Előfeldolgozás: minden cellához feljegyezzük a beletartozó objektumokat.

Használat: csak azokkal az objektumokkal végzünk sugár metszést, amiknek a celláján a sugár áthalad.

Előnye: a vizsgálandó cellák gyorsan számíthatók szakaszrajzoló algoritmussal! (lsd.: raszterizáció)

Hátránya: feleslegesen sok cella, nagy részük üres teret fed le.

Oktális fá

Fa gyökere: a teljes színteret magában foglaló tengelyekkel párhuzamos élű befoglaló doboz (AABB)

Vágjuk ezt nyolc egyenlő részre!

Minden új dobozra: ha elég sok objektum van benne, akkor tovább osztjuk, különben megállunk.

Előny: az üres részeket nem osztjuk tovább feleslegesen.

Hátrány

  • Bonyolultabb bejárás
  • A fa mélysége elszállhat a gyakorlatban egy előírt mélység is adott, amit elérve már nem osztjuk tovább a cellákat.

Quadtree

Az oktális fa síkbeli változata

Az aktuális cellát mindig négy egyenlő részre osztjuk, a tengelyekkel párhuzamosan.

Kd fa

Probléma az oktális fával: mindig középen és mindig sík mentén vág, nem veszi figyelembe az objektumokat.

Oktális fa: keresési idő a fa magassága. De, az oktális fa kiegyensúlyozatlan.

kd-fa: minden lépésben egyetlen síkkal vágunk, ami egy tengelyre merőleges.

Sorrend:

Felező sík elhelyezése:

  • térbeli középvonal módszer
  • test középvonal módszer
  • költség modell alapú módszer

Sugárkövetés hardverben

DXR

2018 óta NVIDIA GPU-kban hardveresen gyorsított raytracing érhető el.

Ez a DX 12 szabvány része lett.

Compute shaders fallback-kel kibővített támogatás van Pascal architektúráig lefelé.

De valódi hardveres raytracing csak Volta, Turing és Ampere és újabb architektúrákon van.

DXR 1.0

5 új shader típus:

  • Raygeneration shader: sugarak előállítását végző shader
  • Intersection shader: procedurális geometriákra; van beépített hardveres sugár-háromszög metszés, nem kell feltétlen megírni.
  • Colsest hot shader: lényegében a fragment shader megfelelője; a legközelebbi metszéspontra egyszer lefutó shader.
  • Anyhit shader: átlátszósági tesztek eldöntésére meghívódó shader bejárás közben; a meghívások sorrendjére nincs semmilyen garancia.
  • Miss shader: ha nem volt metszett geometria, akkor ez hívódik meg. (Itt számíthatunk például égbolt színt, stb.)

DXR 1.1

Ami igazán érdekes, hogy innentől bármilyen shader-ben lehet hívni TraceRay parancsot (nem csak grafikus szerelőszalagbeliből, hanem compute shader-ből is!).

Illetve DispatchIndirect is van, ami rengeteg új lehetőséget ad.

Források

Számítógépes grafika gyakorlat

Alapadatok

Idő: Hétfő, 8:00 - 10:00
Helyszín: Déli Tömb 2-219
Oktató: Horváth Anna Lili
Csoport: 1

Értékelés

  • Órai munka
  • Házi feladatok
  • 2 kisbeadandó
  • Nagybeadandó vagy évfolyam ZH

Források

1. Gyakorlat

  • SDL ablakkezelés
  • SDL rajzolás
  • Double buffering
  • Pontok generálása körön

Házi faladat

Nap sugarakkal - részletek a Teamsen

Források

2. Gyakorlat

SDL event kezelés és OpenGL inicializáció

Házi feladat

Kocka forgatással SDL-bre (még nem 3D-en). Részletek teams-en. Az egér pozícióját viszonyítjuk a középponthoz, 2 négyzetet tolunk el ellenkező irányban. A négyzetek sarkait egyenesekkel kötjük össze.

Források

3. Gyakorlat

Grafikus szerelőszallag, shaderek, uniformok;

Házi feladat

Mandelbrot-halmaz nagyítás, mozgatás-

Források

4. Gyakorlat

Vertex buffer és vertex array objektumok.

Házi feladat

Körvonal rahzolása vertexekkel.

Források

5. Gyakorlat

Transzformációk.

Házi feladat

Naprendszer

Források

6. Gyakorlat

Indices, parametric surfaces.

Házi feladat

Nagy tóruszon guruljanak kisebb tóruszok.

Források

Elmaradt óra

Ez az óra elmaradt, és nem tartottak pótló órát.

8. Gyakorlat

Textures

Házi feladat

Két mintavételező használata és mixelés

Források

9. Gyakorlat

Normals

Házi feladat

(TBA)

Források

Elmaradt óra

Ez az óra elmaradt, és nem tartottak pótló órát.

11. Gyakorlat

Skybox, OGLBase

Házi feladat

A Normals projektben található földgömböt készítsd el az OGLBase projekt eszközeivel. A programban legyen egy pontfényforrás, ami a földgömb körül kering. Ez legyen megjelenítve egy kis sárga hömb formájában.

Források

12. Gyakorlat

OGLBase, Transparency, Physics

Források