Streaming PDC10 može se pratiti uživo i preko kućinh konekcija


U koliko niste stigli doći na jednu od 5 lokacija u Bosni i Hercegovini na kojima se održava live streaming PDC10, moguće ga je pratiti i preko javnih url adresa koje je obezbjedio Microsoft. Naime u koliko želite da gledate uživo prenos uvodnog predavanja Bob Muglia President, Server and Tools Business, te Steve Ballmer Microsoft chairman to možete učiniti sa sljedećih adresa:

 

PDC10 Keynote – http://bit.ly/PDC10BiHKeynote – samo za uvodno predavanje.
PDC10 Live Player – http://bit.ly/PDC10BiH   -sve sesije po redu, uzivo.

O konferenciji i sadržaju mogli ste vidjeti i na blog postu o PDC10, kao i tome da će prije svega biti posvećena novim rješenjima koja se usko vežu za narednu generaciju cloud servisa, frameworka, razvojnih alata, a treba napomenuti kako je upravo PDC konferencija mjesto na kojoj Microsoft još od 1991. godine redovno objavljuje najveće novosti vezane za Microsoft platformu uz izvrsna predavanja vodećih stručnjaka iz oblasti softvera.

P.S. Moja pretpostavka kako sam ranije rekao da će objaviti Internet Explorer 9, ako ne release onda sigurno RC.

Advertisement

Detaljni pregled LINQ – Integrirani SQL upiti u .NET programskom jeziku


LINQ ili Language Integrated Query je sastavni dio  .NET programskog jezika prilagođen da izvršava upit nad bilo kojom vrstom izvora podataka na način kako se to radi sa SQL jezikom. LINQ čini skup operatora koji po mnogo čemu sliče SQL komandama. Pomoću LINQ operatora mnogostuko se skraćuje vrijeme sortiranja, grupiranja, filtriranja podataka koji se dosada morao implementirati ili koristiti biblioteke trećih lica. LINQ koristimo kako za memorijske rtko i za eksterne izvore podataka poput DB i XML. Skraćenica LINQ najbolje bi se mogla prevesti kao SQL osobine integrirane u programski jezik.

Uvod

U Posljednjih 20 godina razvoj programskih jezika došao je do stadija kada posjedujemo moćne objektno orijentisane programske jezike poput C++, C# i JAVA. Programeri, koristeći ove jezike danas koriste sve blagodati OOP poput klasa, objekata, nasljeđivanja, polimorfizma, iskorištavanje postojećeg koda. Možemo kazati da je era OOP  došla do svog vrhunca, uz prethodno programeri danas koriste programske jezike koji imaju sposobnost oslobađanja i kontrole curenja memorije u programskim jezicima. U posljednjih nekoliko godina postavlja se pitanje šta dalje i u kom pravcu razvijati programske jezike, na način da pomažu programerima u razvijanju softvera.

Jedan pravac u kojem se programski jezici razvijaju, a koji je posljednjih nekoliko godina sve više zastupljen je razvijanje IDE alata za automatsko generiranje koda tzv. Rapid Application Developmen (RAD).  Danas kad pogledamo softvere za razvoj aplikacija vidimo mnogo ugrađenih alata za generiranje raznih, uglavnom ponavljajući sekvenci izvornog koda. Danas se aplikacije razvijaju na način da imate osjećaj kako radite u nekom od klasičnih softvera za crtanje: povlačite stavke iz kutija sa alatima, dijagramski pišete klase i dodajete metode, članove, nasljeđivate klase itd.

Sagledavajući današnju tehnologiju i pravac u kome se razvija buduća tehnologija, svakako je smanjivanje kompleksnosti pristupa i integracije informacijama koja nije prirodno povezana se OPP. Naime, svaka aplikacije manipuliše određenim podacima koji su po prirodi stvari odvojeni od same aplikacije. Podaci kojim manipulišemo dolaze uglavnom iz dva glavna izvora, a to su relacijske baze podataka i XML.

Manipulacija sa podacima koji dolaze iz ova dva izvora programera više stvara svestranijim nego stručnijim, jer stvara uslov poznavanja drugih tehnologija osim primarne tehnologije razvoja aplikacija u određenom programskom jeziku. LINQ projekat se bazira na problemima manipulacije podataka prethodno opisanih.  Engleski izgovor ove kratice izgovara se kratko LINK.

LINQ kako i sam naziv govori je sastavni dio primarnog programskog jezika, koji sa sastoji od standardnih operatora upita  za manipulaciju, projekciju i filtriranje sa podacima na način sličan kako se to radi pomoću SQL. Izvor podataka nad kojim se vrše upiti ne ograničava se samo na eksterne izvore podataka, nego na generalno svaki izvor podataka kako eksterni tako i interni – aplikacijski izvor podataka. Ovo omogućuje da programer ostaje u svom primarnom programskom jeziku dok manipuliše podacima iz izvora podataka.

LINQ operatori mogu se primjeniti na svaki izvor podataka koji je izveden iz IEnumerable interfejsa. Ovo omogućava razvijanje komponenti trećih strana baziranih na LINQ-u preklapanjem standardnih operatora. Do sada takvih implementacija je urađeno, a najpoznatiji su LINQ to Amazon, LINQ  to Google i td. Važno je spomenuti da se na Open Source zajednicama poput Source Forge pokrenuto više desitina sličnih projekata.

Upoznavanje sa LINQ

Najbolji način kako se približiti LINQ je da se napiše jednostavan primjer napisan u izvornom kodu.

class Program
{
static void Main(string[] args)
{
   //Definisanje polja stringova gradova
   string[] gradovi = {
                        "Sarajevo",
                        "Tuzla",
                        "Mostar",
                        "Banja Luka",
                        "Zenica",
                        "Bihać",
                        "Cazin"
                    };

//Konstrukcija LINQ upita
IEnumerable izraz = from g in gradovi where g.Length == 5 orderby g select g.ToUpper();

//izvršavanje upita na poljem stringova
foreach (string grad in izraz)
Console.WriteLine(grad);

}
}

Ako se ovaj program pokrene pritiskom na F5, dobijamo rezultat kao na sljedećoj slici.

image

Kao što smo naglasili svaki tip koji je izveden iz IEnumerable interfejsa podržava LINQ operatore. U našem primjeru koristili smo 3 standardna operatora upita: select, where, orderby. Isti primjer možemo napisati bez dotičnih operatora na sljedeći način:

var izraz = gradovi.Select(g => g.ToUpper())
.Where(g => g.Length == 5)
.OrderBy(g=>g);

Argumenti koji se pojavljuju u metodama standardnih upita zovem lambda izrazi (lambda expressions) , oni obezbjeđuju da se standardni operatori upita definišu posebno kao metode i spajaju lančano korištenjem tačka notacije (dot notation).

Izvršavanje LINQ upita

U prethodnom primjeru značajno je kazati da se evaluacija upita ne dešava u trenutku njegovog deklarisanja. Evaluacija LINQ upita se dešava u onom trenutku kada pristupamo varijabli odnosno u našem primjeru evaluacija upita vrši se u bloku koji je označen naredbom foreach. Ovakva odgođena (defered) evaluacija upita upit čini fleksibilnim i dozvoljava izvršavanje više puta sa jednom definicijom. Pretpostavimo sljedeći primjer:

class Program
{
static void Main(string[] args)
{
   //Definisanje polja stringova gradova
   string[] gradovi = {
                        "Sarajevo",
                        "Tuzla",
                        "Mostar",
                        "Banja Luka",
                        "Zenica",
                        "Bihać",
                        "Cazin"
                    };

  //Konstrukcija LINQ upita
  var izraz = from g in gradovi where g.Length == 5 orderby g select g.ToUpper();

  //izvršavanje upita na poljem stringova
  foreach (string grad in izraz)
    Console.WriteLine(grad);

   Console.WriteLine("-------- Drugo izvršavanje upita----");

   //Modifikacija polja
   gradovi[1] = "Brčko";

   //ponovno izvršavanje upita na poljem stringova
   foreach (string grad in izraz)
    Console.WriteLine(grad);

   Console.ReadLine();
 }
}

Ako gornji primjer kompajliramo i pokrenemo rezultat se dobije kao na sljedećoj slici.

image

Upit se evaluira svaki put kada smo iterirali varijablu izraz. Međutim, odgođeno izvršavanje LINQ upita može dovesti u zabludu, posebno ako se ne poznaje dovoljno način na koji se izvršava LINQ upit. Kao dokaz uzmimo sljedeći primjer:

class Program
{
static void Main(string[] args)
{
   //Definisanje polja stringova gradova
   string[] gradovi = {
                        "Sarajevo",
                        "Tuzla",
                        "Mostar",
                        "Banja Luka",
                        "Zenica",
                        "Bihać",
                        "Cazin"
                    };

   string prvoSlovo = "S";

   //Konstrukcija LINQ upita
   var izraz = from g in gradovi where g.StartsWith(prvoSlovo) select g;

   string ispisNaKOnzolu = "Gradovi koji počinju s prvim slovom '" + prvoSlovo + "'\n";

   //promijenimo varijablu prvoSLovo
   prvoSlovo = "B";

   Console.WriteLine(ispisNaKOnzolu);

  foreach (string grad in izraz)
   Console.WriteLine(grad);

   Console.ReadLine();
}
}

U primjeru imamo definisan LINQ upit sa varijablom prvoSlovo, i gdje smo formirali LINQ upit kada je dotična varijabla imala vrijednost „S“. U normalnim uslovima, onako kako smo naučili da se varijable inicijaliziraju i po logici stvari, LINQ upit bi trebao vratiti sve gradove koji počinju sa prvim slovom S. Medjutim, rezultat upita je vratio gradove koji počinju slovom B, jer smo vrijednos slova B, pridružili vrajiabli prije same evaluacije LINQ upita, što potvrđuje i pokretanje primjera i sljedeća slika.

image

To upravo pokazuje način i vrijeme kada se LINQ upit generiše i evaluira nad izvorom podataka.

LINQ standardni operatori upita

Prethodno smo vidjeli upotrebu nekoliko operatora upita. U ovom poglavlju pozabavit ćemo se više oko ovih operatora, te vidjeti na koji ih način koristiti efikasno u programima. Razvijajući aplikacije, programer  konstantno rješava određene probleme manipulacije sa podacima, riješava i definiše algoritme I pomoćne programe. U tu svrhu koriste se određene preinstalirane biblioteke kao i biblioteke od trećih lica. Nažalost, nismo uvijek u prilici da sa bibliotekama koje koristimo imamo riješene sve probleme.

LINQ operatori upita mnoge naše probleme kojim smo svakodnevno okruženi tokom razvoja aplikacija, mogu zaista efektivno riješiti u samo nekoliko linija koda. Kao što smo kazali LINQ ne predstavlja manipulaciju samo sa eksternim izvorima podataka, jer se mogu koristiti I kako smo ranije kazali sa memorijskim izvorima podataka. U narednom tekstu upoznat ćemo se sa operatorima upita te kroz primjere primjene pokazati njihovu jednostavnost, efikasnost i lakoću.

Operatori sortiranja (orderby, reverse, descending)

Već smo u  prvom dijelu vidjeli upotrebu sortiranja podataka. Prednosti korištenja ovog operatora nad kolekcijama koje nemaju implementiranu ovu mogućnost su vrlo korisne. Uzmimo iz prethodnog primjera polje stringova i primjenimo operator sortiranja. Npr sortirajmo uzlaznim i slizanim redom gradove u BiH:

//sortiranje niza abecedno
var g1 = gradovi.OrderBy(g=>g);
var g2 = gradovi.OrderByDescending(g=>g);

Međutim, sortiranje možemo izvršiti po nekom drugom kriteriju npr.  po broju slova u nazivu.

//sortiranje niza po broju slova u nazivu
var gs1 = gradovi.OrderBy(g=>g.Length);
var gs2 = gradovi.OrderByDescending(g=>g.Length);

Kriterije možemo lančano slagati i sa tačka notacijom. U tom slučaju koristimo ThenBy operator poslije OrderBy operatora. Kombinirajmo prethodna dva primjera i napišimo sljedeći primjer:

//sortiranje niza po broju slova u nazivu i abecedno
var g = gradovi.OrderBy(g => g.Length).ThenBy(g => g);

Reverse operator koristimo kada želimo sortirani niz obrnuti. Sljedeći primjer prikazuje upotrebu operatora Reverse i OrderbyDescending, da bi prikazali suštinsku razliku između ova dva operatora.

//suštinske razlike operatora sortiranja
var g1 = gradovi.OrderBy(g => g.Length);
var g2 = gradovi.OrderByDescending(g=>g.Length);
var g3 = gradovi.OrderBy(g => g.Length).Reverse();

Rezultat prethodnih upita prikazan je na sljedećoj slici:

image

Reverse operator za razliku od OrderBy operatora  oslanja se samo na poredak podataka koji je dobijenih iz izvora podataka.

GroupBy operator

Skup standardni operatora upita čini i operator grupiranja GroupBy, koji uspostavlja podjelu nad sekvencijalnim vrijednostima baziranih na funkcijama ekstrakcije. Ovaj operator vraća skup IGrouping podataka za svaki različiti vrijednosni kriterij. Svakako da je IGrouping izvedeni interfejs od IEnumerable koji dodatno sadrži kriterij koji je korišten za ekstrakciju podataka iz izvora. Jednostavan primjer upotrebe GroupBy operatora možemo predstaviti na sljedećem primjeru:

class Program
{
static void Main(string[] args)
{
   //Definisanje polja stringova gradova
   string[] gradovi = {
                        "Sarajevo",
                        "Tuzla",
                        "Mostar",
                        "Banja Luka",
                        "Zenica",
                        "Bihać",
                        "Cazin"
                    };

   //Grupiranje po dužini riječi
   var grupeGradova = gradovi.GroupBy(g => g.Length);
   foreach (IGrouping grupe in grupeGradova)
     {
        Console.WriteLine("Dužine riječi u nazivima gradova od {0} slova", grupe.Key);
        Console.WriteLine("-----------------------------------------------");

        foreach (string grad in grupe)
           Console.WriteLine("  {0}",grad);
      }

   Console.ReadLine();
 }
}

Poslije pokretanja ovog programa rezultat je prikazan na sljedećoj slici:

image

Agregacijski operatori

Agregacijski operatori koji su podržani u LINQ definišemo na sličan način, kao I prethodne operatore. Napišimo primjer upotrebe agregacijskog operatora Agregate. Ovaj operator vrši određenu kalkulaciju na sekvencom podataka. Operator vrši operacije koristeći  lambda izraze nad svakojm sekvenco podataka. Sljedeći primjer izračunava broj karaktera korištenih u cijelom nizu:

   //Definisanje polja stringova gradova
   string[] gradovi = {
                        "Sarajevo",
                        "Tuzla",
                        "Mostar",
                        "Banja Luka",
                        "Zenica",
                        "Bihać",
                        "Cazin"
                    };
   int brojSlova = gradovi.Aggregate(0, (c, s) => c + s.Length);
   Console.WriteLine("Broj slova svih gradova u nizu iznosi: {0}",brojSlova);

Rezultat pokretanja programa:

image

Agregate operator propisuje  Count  operator i 4 numerička agregacijska operatora(Min, Max, Sum, i Average) minimum, maksimum, suma i srednja vrijednost respektivno. Ovi se numerički operatori procesuiraju nad sekvencama podataka bilo kojeg numeričkog tipa podataka: int, double, decimal i sl. Sljedeći primjer prokazuje upotrebu nekoliko pomenutih operatora:

int[] brojevi = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
int ukupno = brojevi.Sum();
int sumaKvadrata = brojevi.Sum(x=>x*x);
Console.WriteLine("Suma članova niza: {0}",ukupno);
Console.WriteLine("Suma kvadrata članova niza: {0}", sumaKvadrata);

Rezultat pokretanja programa prikazan je na sljedećoj slici:

image

Sintaksa upita u LINQ

U prethodnim paragrafima vidjeli smo načine kako možemo formirati upit nad izvorom podataka. Takodjer se može primjetiti da svaki upit možemo formirati na dva, u suštini ista, a sintaktički različita načina. Naime svaki LINQ upit formiran Lambda izrazom, takodjer  možemo formirati tačka notacijom (Dot Notaton). Ovakav fleksibilam pristup definisanju upita u LINQ rezultat su proširenja koja se pojavljuju u verziji C#3.0, a koje smo spominjali u prethodnim blog postovima postovima. Npr. definišimo LINQ upit tačka notacijom. Imamo:

var izraz= nazivi.Where(s=>s.Lenght==6)
                     .OrderBy(s=>s)
                     .Select(s=>s.ToUpper());

Prethodni upit  možemo formirati Lambda izrazom na sljedeći način:

var izraz= from s in imena
              where s.Lenght ==6
              orderby s
              select s.ToUpper();

Na kraju ovog članaka pobrojat ćemo sve operatore koji se mogu pojaviti u LINQ upitima:

OPERATOR

Opis

Where

Restriktivni operator.

Select / SelectMany

Operator projekcije.

Take/Skip

TakeWhile/SkipWhile

Parcijalni operator baziran na poziciji ili uslovnoj funkciji.

Join/GroupJoin

Operator spajanja u odnosu na zadani uslov.

Concat

Operator spajanja.

OrderBy/ThenBy/

OrderByDescending

ThenByDescending

Sortiranje u uzlaznom, silaznom smijeru u odnosu na zadani uslov.

Reverse

Operator sortiranja sekvence u suprotnom smijeru

GroupBy

Operator grupiranja u odnosu na zadani uslov.

Distinct

Operator uklanjanja duplikata elemenata u skupu.

Union/Intersect

Operatr koji vraća uniju ili podskup zadanih skupova elemenata.

Except

Operator koji vraća komplement zadanog skupa.

ToSequence

Operator konverzije u IEnumerable

ToArray/ToList

Operator konverzije u List

ToDictionary/ToLookup

Operator konverzije u Dictionary ili LookUp u odnosu na zadani ključ.

OfType/Cast

Operator konverzije u Ienumerableu odnosu na filtrirane elemente ili konverzije u tip argumenta.

EqualAll

Operator jednakosti koji vraća jedenake uparene elemente.

First/FirstOrDefault/

Last/LastOrDefault/

Single/SingleOrDefault

Operator vraćanja početne/zadnje/jednog elementa u odnosu na zadanu funkciju.

ElementAt/

ElementAtOrDefault

Operator vraćanja elementa određene pozicije.

DefaultIfEmpty

Operator zamjene prazne vrijednosti sa podrazumijevanom.

Range

Generatorski operator vraćanja broja u opsegu.

Repeat

Generatorski operator vraćanja višestrukih pojavljivanja elementa zadane vrijednosti.

Empty

Generatorski operator vraćanja prazne sekvence.

Any/All

Kvantifikator provjere egzistencije ili univerzalnosti funkcije izraza.

Contains

Kvantifikator provjere postojanja datog elementa.

Count/LongCount

Agregacijski operatori brojanja elemenata.

Sum/Max/Min/Average

Agregacijski oparatori kao opcione funkcije selektora.

Aggregate

Agregacijski oparator , vidi dio III

References

1. The LINQ Project .NET Language Integrated Query May 2006 Don Box, Architect, Microsoft Corporation and Anders Hejlsberg, Technical Fellow, Microsoft Corporation
2. http://forums.microsoft.com/msdn/showforum.aspx?forumid=123&siteid=1
3. http://weblogs.asp.net/scottgu/
4. http://microsoft.com

Oktobarski sastanak Bihać .NET User grupe


Sastanak Bihac .NET User Grupe: Edukativni Centar Laser Doo, 28. Oktobar u 17 sati.

Bihać .NET User grupa organizira svoj drugi odnosno treći po redu sastanak. Ovog puta će to biti live prenos uvodnog predavanja sa PDC2010 – Microsoftove  konferencije za developere, koji će se održati od 28.-29 10. 2010. godine u Redmondu.

Koliki je interes za ovu konferenciju pokazuje i činjenica da su mjesec dana prije početka konferencija sva mjesta rasprodana. Ove godine PDC2010 će se po prvi put prenositi i uživo gdje će pored učesnika konferencije hiljade ljudi dijem svijeta uživo gledati cijelokupnu konferenciju. Pored navedenog PDC2010 će se grupno prenositi na rednovnim sastancima User grupa diljem svijeta. I naša grupa kao i user grupe u Bosni i Hercegovini prenosit će grupno uvodno predavanje. Na http://www.microsoftpdc.com/Local zvaničnoj stranici PDC2010 izlistane su sve User grupe koje će ovaj događaj pratiti uživo. Naravno i naša kao i ostale user grupe iz BiH se nalaze na ovoj listi. Biće vrlo interesantno pratiti ovaj događaj kada znamo da Microsoft sprema grupu novih proizvoda da objavi poput Windows Phone 7, Internet Exporer 9, skup novih alata, cloud servisi i mnoštvo drugih stvari.

Na PDC2010 pored uvodnog predavanja održaće se ukupno 160 predavanja raspoređenih u 3 smijera i to: Client & Device, Cloud Service i Framework & Tools.

Client & Device – smijer na kojem će se najviše govoriti o Windows Phone 7 i razvoju aplikacija na ovoj platformi, kao i Internet Explorer 9 koji će vjerojatni biti objavljen na ovoj konferenciji. Ovu informaciju nisam nigdje čuo nego iz iskustva bi se moglo pretpostaviti da će se to desiti.

Cloud Service – tehnologija budućnosti u kojoj je Microsoft skoro sve svoje proizvode poput Windows OS, SQL Server, Office application razvio i verzije koje se vrte u oblacima. Računanje u oblacima je budućnost i na PDC2010 će se čuti zadnja dostignuća u ovoj oblasti.

Frameworks & Tools – razne teme posvećene microsoftovima programskim jezicima, i alatima za razvoj poput LightSwitch i sličnim razvojnim alatima.

Kao i svaki drugi sastanak imaćemo i vrijedne nagrade, a i predstavit ćemo neke nove sponzore, koje smo dobili od zadnjeg sastanka. Registracija na sastanak je kao i svaki put na oficijelnoj stranici www.bihac.mscommunity.ba.

Vidimo se na sastanku.

Poglavlje III – IZVODI FUNKCIJE


Zadnji u nizu blog postova teksta iz 1996 godine. Cjelokupan tekst može se pogledati ovdje.

1.1 Povijest izvoda

Kad ne bi bilo izvoda (derivacije) svi naši snovi vezani za uspjeh u polju matematike bili bi lako ostvarivi. Matematika bi se bavila samo elementarnim stvarima. Doista, matematika bi se svela na elementarnu matematiku. Kažu da padom jabuke na Newtonovu glavu sve je krenulo drugačije. Ta nesretna jabuka okrenula je Newtona tada ka spoznaji osnovnih zakona dinamike i gravitacije. Newton je za dokaz svojih zakona, povrh siromašnih eksperimenata koje je izvodio, za svoje zakone morao naći matematički aparat da ih dokaže. Otkrićem diferencijalnog i integralnog računa Newton je dokazao svoje zakone, a nama običnim smrtnicima – studentima ostavio jabuke i diferencijalni račun za posvetu.

Mnogi filozofi se spore o tome koliko je jabuka palo na Newtonovu glavu. Veliki dio njih zagovara tezu da je nemoguće da padom samo jedne jabuke opravdava činjenicu Newtonovog djela. Po njihovom mišljenju smatra se da je na Newtonovu glavu palo bar desetak jabuka i to krupnijih koje rastu na vrhu drveta, u malom vremenskom intervalu clip_image002. Kad ne bi bilo izvoda, čitav ovozemaljski razvoj tehnike i tehnologije sigurno bi bio na stepenu razvoja u Newtonovo doba. Možemo s pravom reći da smo imali sreće. Da nema izvoda sigurno ne bi bilo ni kompjutera, ni video igrica ni flipera. Povrh svih mučnina koje nam zadaje izvod, ipak neka samo postoje kompjuteri i ostalo uz njih, a za izvode ćemo lako – rekao je neko iz mase.

POJMOVI PREKO KOJIH SE DEFINIŠE IZVOD

Da bismo definisali izvod neke funkcije moramo objasniti neke sporedne stvari koje okružuju izvod, a to su:

• Tangenta i konstrukcija tangente

• Srednja i trenutna brzina

1.1.1 Konstrukcija tangente

Definicija tangente u elementarnoj geometriji, koja se radi u osnovnoj školi, definiše tangentu kao jednu pravu koja ima samo jednu zajedničku tačku sa kružnicom. Međutim, ima tu nešto. Tačno je da se radi o jednoj tački i tačno je da se radi o pravoj. Međutim, kada pogledamo iz drugog ugla stvari odnosno sliku 3.1, vidimo kako jedna prava clip_image004 siječe parabolu samo u jednoj tački, ali ova prava nije tangenta date parabole u toj tački. Prava tangenta u toj tački je prava clip_image006 koja je normalna na pravu clip_image004[1] i prolazi tačkom clip_image008.

clip_image010

Slika  3.1  Položaj krive, sječice i tangente

Da bi smo došli do valjane definicije tangente uočimo sliku i sve što je na njoj nacrtano. Slika 3.2 sadrži jednu krivu clip_image012, dvije tačke clip_image014te pravu clip_image016koja spaja ove tačke. Vidimo da prava clip_image018 siječe krivu u obliku kriške lubenice te ćemo je nazvati sječica clip_image020. Kada hoćemo da odsjećemo što manji komad lubenice odnosno krive, mi ćemo postupiti tako da tačkuclip_image022pomjeramo prema tački clip_image024 preko ruba lubenice odnosno krive. Ako se tačka clip_image026, krijući se, približava tački clip_image024[1] kriška lubenice će se sve više smanjivati.

clip_image028

Slika  3.2  Sječica

Sječica će se mijenjati u odnosu na početni položaj, i kad tačka clip_image026[1] teži tački clip_image024[2], teži jednom graničnom položaju. Granični položaj sječice clip_image020[1] upravo će biti tangenta, tj. lubenica će ostati čitava.

Definicija 3.1.

Tangenta krive  u datoj tački clip_image030 zove se granični položaj sječice clip_image032 kada tačka clip_image034 ove krive teži  po krivoj ka tački clip_image030[1].

Ako se napravimo Englezi i želimo da ne odsječemo lubenicu tj. da nam tačka clip_image026[2] teži tački clip_image024[3] koeficijent smjera krive u tački clip_image024[4] jednak je koeficijentu smjera tangente krive u toj tački. Sve prethodno rečeno kažimo na jednom drugom (matematičkom) jeziku.

Posmatrajmo sliku, tamo ćemo vidjeti krivu clip_image012[1] sličnu prošloj krivoj i koordinatni sistem clip_image036. Ova kriva koju vidimo je grafik neprekidne funkcije clip_image038. U gornjem dijelu smo kazali da je kojeficijent smjera sječice koja prolazi tačkama clip_image040 koje imaju koordinateclip_image042, a clip_image044. Koordinate tačke clip_image026[3] lako se prepoznaju ako znamo da je clip_image046 odnosnoclip_image048, što se sa slike može vidjeti. Nadalje, znamo da je koeficijent smjera dat izrazom:

clip_image050

(2.1)

clip_image052

Slika  3.3  Sječica

Dakle koeficijent smjera tangente clip_image006[1] krive clip_image038[1] u tački clip_image054 jednak je graničnoj vrijednosti količnika clip_image056 priraštaja funkcije clip_image058 i priraštaja argumenta (nezavisno promjenjive clip_image060) clip_image062 kad on teži nuli.

Kao i u Poglavlju I (Matematička indukcija) mi definišemo neke sporedne pojmove, nesvjesno dolazimo do onoga čemu ovdje težimo da definišemo – to je prvi izvod funkcije. Zadnja tvrdnja koju smo napisali izraz 2.1 zovemo prvi izvod funkcije clip_image064 ili kraće izvod funkcije clip_image064[1], a kojeg obilježavamo sa clip_image066 (čitaj clip_image068 prim jednako clip_image070 prim od clip_image060[1]). Dakle prvim izvodom funkcije zovemo:

clip_image072

(2.2)

Na ovaj način smo definisali šta je koeficijent smjera krive u tački, odnosno koeficijent smjera tangente u tački, a istovremeno smo se upoznali sa osnovnom metodom određivanja koeficijenta smjera tangente u datoj tački krive, odnosno vidjeli smo jednostavni postupak konstruisanja tangente.

1.1.2 Srednja i trenutna brzina

Iz fizike nam je dosta stvari jasno kada spomenemo srednju i trenutnu brzin. Kada smo slušali predavanja iz fizike profesori su nam objašnjavali da je srednja brzina količnik priraštaja puta clip_image074 i vremenskog intervala clip_image076tj. priraštaja vremena za koje je tijelo prešlo put clip_image074[1], odnosno:

clip_image078

(2.3)

Znamo da je zakon puta skoro uvijek povezan sa vremenom clip_image006[2], pa je clip_image080. Ako posmatramo priraštaj puta clip_image074[2] koji je tijelo prešlo za clip_image082 možemo napisati kao clip_image084, pa nam je srednja brzina jednaka:

clip_image086

(2.4)

S gornjim izrazom uvijek se može izračunati neka srednja brzina koje se u toku nekog vremenskog intervala clip_image082[1] promijenila više puta. Međutim, ako posmatramo vremenski interval clip_image082[2] što manji promjene brzine za dati vremenski interval će biti sve manje. Kada pustimo da clip_image088 srednja brzina će postati trenutna:

clip_image090

(2.5)

Trenutna brzina (brzina u trenutku t odnosno clip_image092 je granična vrijednost srednje brzine u vremenskom intervalu clip_image094 kad clip_image096. Drugim riječima:

clip_image098

(2.6)

I ovdje vidimo da je trenutna brzina kretnja izvod dužine puta po vremenu. Na ovaj način (preko srednje i trenutne brzine) je Newton definisao izvod funkcije pa se čak može reći da je orginalna definicija izvoda upravo definisana preko srednje odnosno trenutne brzine. Možemo s pravom kazati: Izvod je brzina promjene dužine puta po vremenu.

 

1.2 Pojam IzvodA funkcije

Namjernim raspravljanjem o tangenti i srednjoj i trenutnoj brzini odnosno koeficijentu smjera tangente došli smo do pojma izvoda:

clip_image066[1]

(2.7)

Kao i kod definisanja trenutne brzine, u koliko je poznat zakon puta clip_image080[1], do pojma izvoda možemo doći bilo kakvim izračunavanjem brzine promjene neke veličine u toku vremena ako je poznat zakon ovisnosti te veličine od vremena.

Definicija 3.2.

Izvod funkcije clip_image100 po argumentu clip_image102 je granična vrijednost količnika priraštaja funkcije i priraštaja argumenta kad priraštaj teži nuli, tj.

clip_image104

Kada govorimo o izvodima često se spominje riječ od 3 slova – diferenciranje. Diferenciranje nije ništa drugo do granični proces kojim se dolazi do izvoda y’ funkcije clip_image068[1]. Za funkciju clip_image038[2] koja ima izvod u tački clip_image060[2] kažemo da je diferencijabilna u toj tački. Kada kažemo da je funkcija direfencijabilna na nekom intervalu clip_image106 to znači da je ista diferencijabilna u svakoj tački intervala.

Vidjeli smo i prije nego smo definisali izvod da ona (kako je na početku rečeno) ima veliku primjenu. Kada krenemo od geometrijske interpretacije izvoda do mehanike, preko fizike i td, sve do kompjutera video-igrica i flipera.

Razmotrimo jednu važnu osobinu izvoda funkcije, a to je diferencijabilnost i neprekidnost. Prije nego smo interpretirali izvod, pretpostavljali smo da nam funkcija mora biti neprekidna. Neprekidnost i diferencijabilnost tvore sljedeću teoremu:

Teorema 3.1.

Ako funkcija clip_image100[1] definisana na intervalu clip_image108 ima izvod u tački koja pripada tom intervalu odnosno clip_image110, (odnosno diferencijabilna je u datoj tački), tada je ona i neprekidna.

Dokaz:

Pretpostavka teoreme je da je funkcija diferencijabilna u tački clip_image060[3] tj. postoji clip_image112. Ako nam je clip_image114, tada možemo pisati:

clip_image116

Sada imamo, ako primijenimo granični proces na zadnji izraz:

clip_image118

Dakle, kada clip_image120, tada clip_image122. To znači da diferencijabilna funkcija clip_image038[3] je istovremeno i neprekidna u datoj tački.

Ovo je jedan od najvažnijih teorema koji se tiče Izvoda funkcije. Jednostavno bez ovog teorema ne bi smo mogli tako jednostavno “šetati” područjem izvoda. Gotovo kod svakog zadatka koji se tiče izvoda neke funkcije koristi se ovaj teorem.

Ako bi se pitali da li važi obrnut teorem, tj. da li je funkcija diferencijabilna ako je neprekidna, odgovor na ovo pitanje bio bi “NE”. Prije nego dokažemo ovaj teorem pročitajte sljedeću napomenu.

Napomena 3.1.

U matematici postoje dokazi za neke teoreme koje sprovodimo na taj način da nađemo bar jedan primjer koji opovrgava datu teoremu. Jednostavno pokazujući na jednom primjeru kontradiktornost teoreme mi je samim tim i dokazujemo.

Teorema 3.2.

Da li važi obrnut teorem prethodne Teoreme 2.1.

Dokaz:

Ovaj teorem ćemo dokazati navođenjem samo jednog primjera koji govori o tome da obrat ne važi. Posmatrajmo funkciju clip_image124. Ta funkcija je neprekidna na čitavom intervalu realnih brojeva. Graf funkcije daje je na slici 2.3. Sa slike se može vidjeti da jeclip_image126a clip_image128. Iz zadnjih izraza vidimo da je granična vrijednost količnika clip_image130za lijevu i desnu graničnu vrijednost po argumentu clip_image132različita, što znači da derivacija funkcije clip_image124[1] u tački clip_image134 nema jedinstven izvod. Drugim riječima funkcija clip_image038[4] u tački clip_image134[1] nije diferencijabilna. Dokaz teoreme je završen.

clip_image136

Slika  3.4  Grafik funkcije clip_image138.

Na osnovu prethodne dvije teoreme zaključujemo: svaka diferencijabilna funkcija ujedno je i neprekidna, dok svaka neprekidna funkcija nije uvijek i diferencijabilna. Pojam diferencijabilnosti je uži pojam od pojma neprekidnosti.