ANNdotNET v1.0 has been released

Half year ago, in this post announced the new open source project ANNdotNET, which was ANN part of the GPdotNET v4 – artificial intelligence tool. On that day I finished my new book about machine learning and genetic programming when also released the new version of GPdotNET V5.0 genetic programming tool, without ANN and other non GP related modules. Now my second big open source project achieved the first stable released.

ANNdotNET ( is deep learning tool on .NET platform, which has similar workflow as GPdotNET. Both projects share several modules, mostly for data preparation, and model evaluation since all that stuff are same.


ANNdotNET is project which is more than GUI tool, since it contains CMD tool, which can be part of bigger cloud solution. There are several key concepts of the project which is worth to mention here:

1. Machine Learning Configuration mlconfig file

The ANNdotNET is based on so called machine learning configuration file, where everything about data, training and learning parameters, as well as neural network layers are store in the file so called mlconfig file. Along mlconfig file, there are several other file types generated during development of the ml solution. The mlconfig file can be shared between cloud services in order to prepare and transform data, train, evaluate or export ml models. If you want to see more information about files in ANNdotNET you can look at the wiki page of the project. Since the mlconfig file is independent of the tool, it can be executed with GUI or CMD tool, or any other custom tool, implemented on anndotnet API.

2. Machine Learning Project Explorer

In order to start developing ml solution with ANNdotNET, the first thing you do is create annproject file, by selecting New option from the Application command. Under annproject the user can create as many mlconfig files as he/she want. The annproject and related mlconfig files are presented in the ML Project Explorer, where the user can manage them as ordinary list items.


3. ANNdotNET MLEngine – Machine Learning Engine

ANNdotNET introduces the ANNdotNET Machine Learning Engine (MLEngine) which is responsible for training and evaluation models defined in the mlconfig files.The ML Engine relies on Microsoft Cognitive Toolkit, CNTK open source library which is proved to be one of the best open source library for deep learning. Through all application’s components ML Engine exposed all great features of the CNTK e.g. GPU support for training and evaluation, different kind of learners, but also extends CNTK features with more Evaluation functions (RMSE, MSE, Classification Accuracy, Coefficient of Determination, etc.), Extended Mini-batch Sources, Trainer and Evaluation models.


MLEngine is build on top of CNTK and .NET, with ability to provide backed component for any cloud/on-premise  ML solution.

4. Visual Neural Network Designer

ML Engine also contains the implementation of neural network layers which supposed to be high level CNTK API very similar as layer implementation in Keras and other python based deep learning APIs. With this implementation the ANNdotNET implements the Visual Neural Network Designer called ANNdotNET NNDesigner which allows the user to design neural network configuration of any size with any type of the layers. In the first release the following layers are implemented:

  • Normalization Layer – takes the numerical features and normalizes its values before getting to the network. More information can be found here.
  • Dense – classic neural network layer with activation function,
  • LSTM – LSTM layer with option for peephole and self-stabilization.
  • Embedding – Embedding layer.
  • Drop – drop layer.

More layer types will be added in the future release. More information about Visual Network Designer can be found on previous blog post.

5. Data Transformation

Along the ml related stuff, ANNdotNET implement set of components for data transformation from raw dataset into mlready datasets. The user doesn’t worry about complex CNTK file format, one-hot encoding, and other data and variable transformation e.g handling missing values, data normalization etc. Data transformation starts loading raw data file into ANNdotNET, then with set of GUI related options the data can be completely prepared to mlready dataset. There are set of short videos about how to quickly transform raw dataset into mlready dataset.

5. Model Evaluation, Saving Good Models & Retraining Trained Models

Once the model is trained, ANNdotNET provides basic evaluation tool for evaluating trained models. The MLEvaluator contains set of basic options in order to evaluate regression, binary or multi-class classification models. Without leaving ANNdotNET the user has ability to decide if the model is good or not by performing set of statistics measures agains model and related datasets (training, validation and test). Beside evaluation, ANNdotNET offers instantly evaluation during training phase, by providing an option for saving good models during training phase. On this way ANNdotNET has ability to select best trained model regardless of the number of iterations. Different strategy for selecting the best model among set of saved models will be implemented in the future. Also any previous trained models can be trained again from the last check point. This is important option in various scenario. For example to change some parameters and continue training. Also this option has ability to start training model on one machine or environment, and then continue with training on different machine or environment.


ANNdotNET – is an open source project for deep learning on .NET Platform. This is complete GUI solution for data preparation, training, evaluation and deployment ml models. ANNdotNET introduces the ANNdotNET Machine Learning Engine ( MLEngine) which is responsible for training and evaluation models defined in the mlconfig files. The MLEngine relies on Microsoft Cognitive Toolkit, CNTK open source library which is proved to be one of the best open source library for deep learning. Through all application’s components MLEngine exposed all great features of the CNTK e.g. GPU support for training and evaluation, different kind of learners. MLEngine also extends CNTK features with more evaluation functions (RMSE, MSE, Classification Accuracy, Coefficient of Determination, etc.), Extended Mini-batch Sources, Trainer and Evaluation models.
The process of creating, training, evaluating and exporting models is provided from the GUI Application and does not require knowledge for supported programming languages.

The ANNdotNET is ideal in several scenarios:

  • more focus on network development and training process using classic desktop approach, instead of focusing on coding,
  • less time spending on debugging source code, more focusing on different configuration and parameter variants,
  • ideal for engineers/users who are not familiar with programming languages,
  • in case the problem requires coding custom models, or training process, ANNdotNET CMD provides high level of API for such implementation,
  • all ml configurations developed with GUI tool,can be handled with CMD tool and vice versa.

In case you like this project star it on GitHub at In case you want to use it in you academic paper, please cite it appropriate as specified at this link:


Descriptive statistics and data normalization with CNTK and C#

As you probably know CNTK is Microsoft Cognitive Toolkit for deep learning. It is open source library which is used by various Microsoft products. Also the CNTK is powerful library for developing custom ML solutions from various fields with different platforms and languages. What is also so powerful in the CNTK is the way of the implementation. In fact the library is implemented as series of computation graphs, which  is fully elaborated into the sequence of steps performed in a deep neural network training.

Each CNTK compute graph is created with set of nodes where each node represents numerical (mathematical) operation. The edges between nodes in the graph represent data flow between operations. Such a representation allows CNTK to schedule computation on the underlying hardware GPU or CPU. The CNTK can dynamically analyze the graphs in order to to optimize both latency and efficient use of resources. The most powerful part of this is the fact thet the CNTK can calculate derivation of any constructed set of operations, which can be used for efficient learning  process of the network parameters. The flowing image shows the core architecture of the CNTK.

On the other hand, any operation can be executed on CPU or GPU with minimal code changes. In fact we can implement method which can automatically takes GPU computation if available. The CNTK is the first .NET library which provide .NET developers to develop GPU aware .NET applications.

What this exactly mean is that with this powerful library you can develop complex math computation directly to GPU in .NET using C#, which currently is not possible when using standard .NET library.

For this blog post I will show how to calculate some of basic statistics operations on data set.

Say we have data set with 4 columns (features) and 20 rows (samples). The C# implementation of this 2D array is show on the following code snippet:

static float[][] mData = new float[][] {
new float[] { 5.1f, 3.5f, 1.4f, 0.2f},
new float[] { 4.9f, 3.0f, 1.4f, 0.2f},
new float[] { 4.7f, 3.2f, 1.3f, 0.2f},
new float[] { 4.6f, 3.1f, 1.5f, 0.2f},
new float[] { 6.9f, 3.1f, 4.9f, 1.5f},
new float[] { 5.5f, 2.3f, 4.0f, 1.3f},
new float[] { 6.5f, 2.8f, 4.6f, 1.5f},
new float[] { 5.0f, 3.4f, 1.5f, 0.2f},
new float[] { 4.4f, 2.9f, 1.4f, 0.2f},
new float[] { 4.9f, 3.1f, 1.5f, 0.1f},
new float[] { 5.4f, 3.7f, 1.5f, 0.2f},
new float[] { 4.8f, 3.4f, 1.6f, 0.2f},
new float[] { 4.8f, 3.0f, 1.4f, 0.1f},
new float[] { 4.3f, 3.0f, 1.1f, 0.1f},
new float[] { 6.5f, 3.0f, 5.8f, 2.2f},
new float[] { 7.6f, 3.0f, 6.6f, 2.1f},
new float[] { 4.9f, 2.5f, 4.5f, 1.7f},
new float[] { 7.3f, 2.9f, 6.3f, 1.8f},
new float[] { 5.7f, 3.8f, 1.7f, 0.3f},
new float[] { 5.1f, 3.8f, 1.5f, 0.3f},};

If you want to play with CNTK and math calculation you need some knowledge from Calculus, as well as vectors, matrix and tensors. Also in CNTK any operation is performed as matrix operation, which may simplify the calculation process for you. In standard way, you have to deal with multidimensional arrays during calculations. As my knowledge currently there is no .NET library which can perform math operation on GPU, which constrains the .NET platform for implementation of high performance applications.

If we want to compute average value, and standard deviation for each column, we can do that with CNTK very easy way. Once we compute those values we can used them for normalizing the data set by computing standard score (Gauss Standardization).

The Gauss standardization is calculated by the flowing term:

nValue= \frac{X-\nu}{\sigma},
where X- is column values, \nu – column mean, and \sigma– standard deviation of the column.

For this example we are going to perform three statistic operations,and the CNTK automatically provides us with ability to compute those values on GPU. This is very important in case you have data set with millions of rows, and computation can be performed in few milliseconds.

Any computation process in CNTK can be achieved in several steps:

1. Read data from external source or in-memory data,
2. Define Value and Variable objects.
3. Define Function for the calculation
4. Perform Evaluation of the function by passing the Variable and Value objects
5. Retrieve the result of the calculation and show the result.

All above steps are implemented in the following implementation:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CNTK;
namespace DataNormalizationWithCNTK
    class Program
       static float[][] mData = new float[][] {
        new float[] { 5.1f, 3.5f, 1.4f, 0.2f},
        new float[] { 4.9f, 3.0f, 1.4f, 0.2f},
        new float[] { 4.7f, 3.2f, 1.3f, 0.2f},
        new float[] { 4.6f, 3.1f, 1.5f, 0.2f},
        new float[] { 6.9f, 3.1f, 4.9f, 1.5f},
        new float[] { 5.5f, 2.3f, 4.0f, 1.3f},
        new float[] { 6.5f, 2.8f, 4.6f, 1.5f},
        new float[] { 5.0f, 3.4f, 1.5f, 0.2f},
        new float[] { 4.4f, 2.9f, 1.4f, 0.2f},
        new float[] { 4.9f, 3.1f, 1.5f, 0.1f},
        new float[] { 5.4f, 3.7f, 1.5f, 0.2f},
        new float[] { 4.8f, 3.4f, 1.6f, 0.2f},
        new float[] { 4.8f, 3.0f, 1.4f, 0.1f},
        new float[] { 4.3f, 3.0f, 1.1f, 0.1f},
        new float[] { 6.5f, 3.0f, 5.8f, 2.2f},
        new float[] { 7.6f, 3.0f, 6.6f, 2.1f},
        new float[] { 4.9f, 2.5f, 4.5f, 1.7f},
        new float[] { 7.3f, 2.9f, 6.3f, 1.8f},
        new float[] { 5.7f, 3.8f, 1.7f, 0.3f},
        new float[] { 5.1f, 3.8f, 1.5f, 0.3f},};
        static void Main(string[] args)
            //define device where the calculation will executes
            var device = DeviceDescriptor.UseDefaultDevice();

            //print data to console
            foreach (var row in mData)

            //convert data into enumerable list
            var data = mData.ToEnumerable<IEnumerable<float>>();

            //assign the values 
            var vData = Value.CreateBatchOfSequences<float>(new int[] {4},data, device);
            //create variable to describe the data
            var features = Variable.InputVariable(vData.Shape, DataType.Float);

            //define mean function for the variable
            var mean =  CNTKLib.ReduceMean(features, new Axis(2));//Axis(2)- means calculate mean along the third axes which represent 4 features
            //map variables and data
            var inputDataMap = new Dictionary<Variable, Value>() { { features, vData } };
            var meanDataMap = new Dictionary<Variable, Value>() { { mean, null } };

            //mean calculation
            //get result
            var meanValues = meanDataMap[mean].GetDenseData<float>(mean);

            Console.WriteLine($"Average values for each features x1={meanValues[0][0]},x2={meanValues[0][1]},x3={meanValues[0][2]},x4={meanValues[0][3]}");

            //Calculation of standard deviation
            var std = calculateStd(features);
            var stdDataMap = new Dictionary<Variable, Value>() { { std, null } };
            //mean calculation
            std.Evaluate(inputDataMap, stdDataMap, device);
            //get result
            var stdValues = stdDataMap[std].GetDenseData<float>(std);
            Console.WriteLine($"STD of features x1={stdValues[0][0]},x2={stdValues[0][1]},x3={stdValues[0][2]},x4={stdValues[0][3]}");

            //Once we have mean and std we can calculate Standardized values for the data
            var gaussNormalization = CNTKLib.ElementDivide(CNTKLib.Minus(features, mean), std);
            var gaussDataMap = new Dictionary<Variable, Value>() { { gaussNormalization, null } };
            //mean calculation
            gaussNormalization.Evaluate(inputDataMap, gaussDataMap, device);

            //get result
            var normValues = gaussDataMap[gaussNormalization].GetDenseData<float>(gaussNormalization);
            //print data to console
            Console.WriteLine($"Normalized values for the above data set");
            var row2 = normValues[0];
            for (int j = 0; j < 80; j += 4)
                Console.WriteLine($"{row2[j]},\t{row2[j + 1]},\t{row2[j + 2]},\t{row2[j + 3]}");

        private static Function calculateStd(Variable features)
            var mean = CNTKLib.ReduceMean(features,new Axis(2));
            var remainder = CNTKLib.Minus(features, mean);
            var squared = CNTKLib.Square(remainder);
            //the last dimension indicate the number of samples
            var n = new Constant(new NDShape(0), DataType.Float, features.Shape.Dimensions.Last()-1);
            var elm = CNTKLib.ElementDivide(squared, n);
            var sum = CNTKLib.ReduceSum(elm, new Axis(2));
            var stdVal = CNTKLib.Sqrt(sum);
            return stdVal;

    public static class ArrayExtensions
        public static IEnumerable<T> ToEnumerable<T>(this Array target)
            foreach (var item in target)
                yield return (T)item;

The output for the source code above should look like:


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.


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.


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.


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:




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:



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:



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:



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:



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:



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:



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.


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.


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:


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


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.


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.


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.

Matematika odabrana poglavlja konačno u digitalnoj formi

Naslovna stranica MATEMATIKAU nekoliko blog postova objavljivao sam dio tekstova iz matematike kojeg sam davno pisao (1996. god), većinom uz svijeću jer prošlo je nekoliko mjeseci od prestanka rata, dok se uspostavio elekto-prenosni sistem. Nažalost sva planirana poglavlja nisam napisao, šteta, jer danas se ne mogu vratiti u tu furku koju sam tada furo, pa nastaviti ovo po meni vrlo korisno djelo pisati. Po reakcijama koji su mi prijatelji i rijetki čitaoci davali, nije izgledalo loše. Isto tako, od kako sam objavio prve stranice  teksta na blogu, post se jako puno čita što potkrepljuju i statistike koje pratim na blogu. Isto tako u rubrici “Naj postovi” svi mogu vidjeti da se tu konstantno nalaze članci o matematičkoj indukciji. Danas sam konačno završio naslovnu stranu, i otkucao sav tekst koji planiram objaviti. Ostalo je jedno nedovršeno poglavlje koje sam odlučio da ga ne uključujem. Naslovnu stranu koju sam osmislio, sproveo je u djelo moj prijatelj Almir Štrkljević oko 1997 godine.

Naime, kod naslovne strane imao sam ideju da prikažem karikaturu Newtona i famozne jabuke, kao i karikaturu integrala \int f(x) dx. Svojom nadarenošću i sklonošću za crtanjem stripova i karikatura Almir je to vrlo zdušno prihvatio i potrudio se da onako, kako sam zamislio da to i nacrta. Ovom prilikom mu se od srca zahvaljujem.

Tekst sam prekucao i  nije prošao lekturu i korekcije pa sam svjesan da sadrži puno kako kucanih tako i gramatičkih grešaka. Pokušaću ih ispraviti prije nego što cijelokupni tekst stavim za download.

U ovom sabranom radu nalaze se tri poglavlja i to : Matematička indukcija, Funkcije i Izvodi. Knjiga sadrži oko 100 stranica A4 formata i veličine fonta 11.

U koliko nađete za shodno da vam može poslužiti ova knjiga slobodno je komentirajte i dajte svoje sugestije i primjedbe. Nažalost, ne namjeravam ovu knjigu obrađivati ponovo odnosno pisati naredno izdanje, jedini cilj mi je bio pretvoriti je u digitalnu formu.  Cjelokupan tekst može se pogledati ovdje.

Na kraju nekoliko fotografija rukopisa:


II poglavlje: Funkcije–I dio

… dio teksta napisanog 1996 o nekim temama iz matematike …  Cjelokupan tekst može se pogledati ovdje.


Pojam funkcije

Čim čujemo riječ funkcije odmah pomislimo na razna mjesta koja nas čekaju kad završimo fakultet. Bit ćemo neki inženjeri bili diplomirani ili ne, ali funkcije nas čekaju, odnosno neko radno mjesto na kome ćemo obavljati neke poslove, gdje ćemo za uzvrat dobijati platu. Bilo kako bilo funkcija nam je neophodna da bi egzistirali, da bi smo postojali. Samim dobijanjem funkcije postajemo funkcioneri. Čitav ovozemaljski svijet sastoji se iz bezbroj funkcija, nekih procesa razmjenjivanja, uzimanja, oslobađanja, davanja itd. U stvari funkcija je neki proces pri kojem se nešto odvija-događa i pri kome postoji jedan ili više određenih pravila događanja, pa bili oni čak i slučajni (tada govorimoo slučajnim procesima). Sve te životne funkcije dosta su slične pojmu funkcije koju definiše matematika. U stvari nema ni jedne čak i najjednostavnije teoreme u matematici, a da se ne može primjeniti u stvarnom životu. Kada posmatramo neki proces zapazićemo da se neke od veličina koje učestvuju u tom procesu mjenjaju – uzimaju različite vrijednosti, dok druge imaju konstantnu vrijednost. Primjera za to ima bezbroj.

Kada stojimo pored štanda voća. Primjetićemo da svaka kila jabuke dobija jednu te istu sumu novaca od 2 DM (demokratske marke što bi rekao jedam moj prijatelj). Odnosno svaka kila krušaka 3 DM ili grožđa 5 DM. Kada se poveća masa jabuka i ostalog voća poveća se i njihova cijena. U ovom slučaju imamo proporcionalno povećanje cijene voća sa njegovom masom. Nadalje posmatrajmo jednu totalno glupu situaciju u kojoj želimo da naduvamo staklenu flašu. Duvanjem u flašu dovodimo zrak u flašu, ali volumen flaše ostaje isti, samo smo promjenili temparaturu vazduha i pritisak u staklenoj flaši. Ovo je jedan primjer kada se dvije veličine mjenjaju dok je treća konstantna. Primjera ima bezbroj no mi ćemo zaključak dati iz ova dva suštinska primjera. Vidimo da postoje veličine koje se mjenjaju, i koje ostaju konstantne pa ćemo definisati sljedeće:

Definicija 1.

Veličina koja pod datim uslovima može poprimiti različite brojne vrijednosti zovemo promjenjivom veličinom. Veličina koja se u datim uslovima ne mjenja već uvijek „stoji“ na istoj brojnoj vrijednosti zovemo stalnom ili konstantnom veličinom.

Skup svih brojnih vrijednosti date promjenjive veličine zovemo oblast promjene te promjenjive. Konstante koje nikako ne mjenjaju svoju vrijednost zovemo apsolutne konstante. Nrp clip_image002– Ludolfov broj, gravitaciona konstanta clip_image004 itd.

Međutim, u cilju općih formulacija i mogućnosti dobijanja zaključaka, dobro je i te kontantne veličine posmatrati kao specijalne slučajeve promjenjivih veličina. To je pogotovo korisno kod dokazivanja raznih teorema koje su povezane sa konstantnim veličinama.

Definišimo dva skupa clip_image006 i clip_image008, tako da je clip_image010 element skupa clip_image006[1], a clip_image012 element skupa clip_image008[1], drugim riječima clip_image014 i clip_image016. Preslikavanje skupa clip_image018 na clip_image020 definisano je zakonom korespodencije gdje svakom clip_image022odgovara jedan element clip_image024. Element clip_image010[1] koji pripada clip_image026zvaćemo argument ili nezavisno promjenjiva. Element clip_image012[1] koji pripada clip_image020[1] zvaćemo zavisno promjenjiva ili funkcija.

Definicija 2.

Funcija jedne nezavisno promjenjive (jednog argumenta) zovemo preslikavanje skupa clip_image028 (vrijednosti argumenata) na skup clip_image030 vrijednosti promjenjive po jednom određenom fiksnom zakonu korespodencije (dodjeljivanja).

Pravilo pridruživanja označavaćemo sa clip_image032 tako da se funkcija može simbolički napisati:

clip_image034 ili clip_image036 (čitaj y je jednako ef od x)

clip_image038 ili clip_image040 (čitaj y je jednako fi od x)

Definicija 2.2 je smisao simbolike clip_image036[1]. Znači svakom elementu clip_image014[1], odgovara jedan element clip_image016[1]. Definicija 2.2 također nam daje smjernice za definisanje funkcije. Pa tako da bi funkciju definisali potrebno je definisati:

  1. Skup clip_image006[2] vrijednosti elementata clip_image010[2].
  2. Zakon dodjeljivanja ili korespodencije clip_image042
  3. Skup clip_image044 vrijednosti funkcije clip_image036[2].

Skup clip_image046 vrijednosti koji može primiti argument clip_image010[3] zovemo još i oblast definisanosti ili domena funkcije clip_image036[3]. Skup clip_image020[2] zovemo skupom vrijednosti ili kodomena funkcije. Ako je na primjer clip_image048 tjclip_image050 pripada domeni funkcije clip_image052, tada clip_image052[1] pripada kodomeni funkcije odnosno clip_image054. Još se kaže da clip_image056 predstavlja sliku elementa clip_image048[1] u skupu clip_image058. Ako postoji clip_image060 tada clip_image062 nema smisla.

Također se može desiti sa clip_image064 i clip_image066 imamo istu vrijednost funcije odnosno vrijedi da je:


Ovo znači da dvije različite vrijednosti argumenata iz domene preslikavaju se i jednu te istu tačku kodomene. Ovaj slučaj možemo pokazati na jednom jednostavnom primjeru.

Primjer 1.

Ako imamo funkciju clip_image070 , tada za clip_image072 i clip_image074 imamo istu vrijednost funkcije clip_image076.

Matematički izraziti funkciju znači naći određenu uzajamnu korespodenciju između dva skupa. Načini na koji se funkcija zadaje ili izražava više je praktično pitanje nego suštinsko. Funkciju možemo zadati grafički, tablično i analitički.

Grafički način predstavljanja funkcije sastoji se iz geometrijske prezentacije jedne funkcije u koordinatnom sistemu, gdje svaki uređeni par brojeva clip_image078, gdje je clip_image056[1] – argument, a clip_image080– zavisno promjenjiva funkcija, zamišljamo kao par koordinata tačke u koordinatnom sistemu u ravni . Skup svih takvih tačaka u ravni clip_image082 čije su apcise vrijednosti argumenata clip_image056[2], a ordinate odgovarajuće vrijednosti funkcije zovemo grafik funkcije.

Grafik na vidan način prikazuje ponašanje funkcije tj. njenu monotonost, maksimalnu i minimalnu vrijednost, vrijednosti argument, nul tačke funkcije, odnosno sve osobine koje su sastavni dio funkcije. Zato se u drugim naukama Fizici, Biologiji, Psihologiji i dr. izrađuju slični grafici i dijagrami gdje se prati tok nekog procesa (pokusa) i grafički prikazuju osobine tog procesa. Jedan od primjera je dijagram momenta savijanja proste grede. Iz dijagrama možemo primjetiti kako se mjenja moment savijanja duž grede od početne tačke clip_image084 do krajnje tačke clip_image086.


Slika 2.1 Dijagram momenta savijanja grede

Sa slike vidimo da je najveći ili maksimalni momenat u tački clip_image090 koja se nalazi na sredini, odnosno na mjestu gdje djeluje skoncentrisano opterećenje clip_image092. Na slici također uočavamo da je izrađen dijagam u funkciji dužine grede clip_image010[4] odnosno matematički rečeno clip_image094.

Tabelarni način zadavanja funkcije imamo u slučaju kada izvjesnim vrijednostima argumenata clip_image096 pridružujemo zavisno promjenjive clip_image098, a da pri tom neznamo ili nas ne zanima način pridruživanja . Tablični način predstavljanja često koristimo u prirodnim i tehničkim naukama, u eksperimentalnim istraživanjim i sl. Na osnovu eksperimenta dolazimo do uređenih parova clip_image100. Ovi parovi se tabelarno prikazuju na sljedeći način:

Tabela 2.1 Tabearni prikaz funkcije









Analitički način zadavanje funkcije sastoji se u tome da zakon preslikavanja clip_image042[1] damo matematičkim izrazom ili formulom. Domenu funkcije zadane u analitičkom obliku određujemo iz samog izraza, odnosno pronalazimo skup svih mogućih rješenja za koje je izraz ima slisla.

Primjer 2.

Funkcija clip_image118 ima domenu svih realnih brojeva simbolički zapisano clip_image120, jer je izraz (formula) clip_image122 definisan za sve realne brojeve.

Primjer 3.

Funkcija clip_image124 ima domenu svih poziotivnih realnih brojeva manjih ili jednako od 5 simbolički zapisano clip_image126.

Primjer 4.

Funkcija clip_image128 ima domenu koja se izračunava na sljedeći način:

clip_image130 i clip_image132

clip_image134 i clip_image136

Na osnovu gornjih izraza domena je definisana za:


Ako dvije ili više funkcija imaju istu domenu tada se mogu posmatrati zbir, razlika proizvod i količnik funkcija, odnosno mogu se posmatrati određene algebarske operacije među funkcijama. Imamo:







Jednakost dviju funkcija

Zadane su funkcije clip_image152, clip_image154 koje se definisane na skupovima clip_image156, i clip_image158. Za dvije funkcije kažemo da su jednake ako je:

  1. clip_image156[1] – definišu istu domenu,
  2. clip_image158[1] – imaju istu kodomenu,
  3. clip_image160 – imaju iste funkcije.

Parne i neparne funkcije

Definicija 3.

Funkcija clip_image162 je parna ako za vrijednosti argumenata koji su suprotni brojevi njihove vrijednosti su jednake, odnosno ako je:


Definicija 4.

Funkcija clip_image162[1] je neparna ako za vrijednosti argumenata koji su suprotni brojevi njihove vrijednosti su također suprotne, odnosno ako je:


Geometrijska interpretacija parnosti i neparnosti funkcije

Iz definicije parne funkcije proizilazi da ako je tačka clip_image168 pripada grafiku fuhnkcije, tada i tačka clip_image170, također pripada grafu. Pošto su tačke clip_image084[1] i clip_image172 simetrične u odnosu na clip_image174 to je i graf funkcije simetričan u odnosu na clip_image174[1].


Slika 2.2 Grafička interpretacija parne (lijevo) i neparne (desno) funkcije

Analogno (Slika 2.2) iz definicije neparne funkcije uočavamo da ako je tačka clip_image178 pripada grafiku funkcije, tada i tačka clip_image180, također pripada grafiku funkcije. Pošto su tačke clip_image182 simtrične i odnosu na ishodište koordinatnog sistema, zaključujemo da je neparna funkcija centralno simetrična u koordinatnom početku.

Iz geometrijske interpretacije proizilazi da pri konstrukciji grafa parne i neparne funkcije dovoljno je da prvu konstruišemo za pozitivne brojeve clip_image010[5] dok ćemo ostatak konstruisati simetrično osi clip_image012[2], a drugu na pozitivnom dijelu clip_image012[3] ose, a ostatak centralno simetrično tački ishodišta koordinatnog sistem.

Definicija 5.

Funkcija clip_image162[2] koja nije ni parna ni neparna jednostavno zovemo ni parna ni neparna funkcija.

Primjer 5.

Funkcija clip_image184 , gdje je k- cijeli broj, clip_image186,clip_image188 – su parne funkcije.

Primjer 6.

Funkcija clip_image190 , gdje je k- cijeli broj, clip_image192,clip_image194 – su neparne funkcije.

Periodičnost funkcije

Definicija 6.

Funkcija clip_image162[3] se naziva periodičnom ako postoji jedan realan pozitivan broj clip_image196, takav da su vrijednosti funkcije clip_image162[4] u tačkama clip_image198jednake, tj. da za svako clip_image200 važi clip_image202, pri čemu se najmanji pozitivan broj clip_image196[1] zove primitivni period ili kraće periodom funkcije fclip_image204.

Ako clip_image206, domeni funkcije fclip_image208 tada svaki broj oblika clip_image210, gdje je clip_image212 također pripada oblasti definisanosti, i pri čemu je clip_image214. Ovo se lako dokazje jer ako krenemo od početne definicije imamo: clip_image216. Iz gornjeg lako zaključujemo da tačke clip_image218 iz domene funkcije preslikavaju se u jednu tačku clip_image220 skupa clip_image058[1] odnosno kodomene funkcije clip_image052[2]. Također zaključujemo da će se grafik periodične funkcije biti sastavljen od lukova koji se ponavljaju na svakom od segmenata clip_image222, gdje je clip_image224. Prema tome ako je funkcija peroodična dovoljno je analizirati istu na osnovnom segment clip_image226, a ostalom dijelu domene se periodičnost ponavlja.

Primjer 7.

Trigonometrijske funkcije clip_image192[1] , clip_image186[1] su periodične funkcije sa periodom clip_image228, a funkcije clip_image230, clip_image232 sa periodom clip_image234, tj.

clip_image236, pa je clip_image238

Primjer 8.

Funkcija clip_image240 je periodična funkcija s periodomclip_image242, jer je:


I uopće kada imamo:


Ovo ne morate čitati

Periodičnost funkcije može se zadati i samo na nekom segmentuclip_image248. Tako da u primjeru 7 funkciju clip_image250 ograničavamo samo na segment clip_image252, a ispitivanje funkcije clip_image254 na clip_image256.

Periodičnost je pojava vrlo česta u prirodi odnosno u svakodnevnom životu . Periodičnost pojave Sunca, poslije 24 sata, kao i općenito kretanje planeta itd.

Ograničene i neograničene funkcije

Definicija 7.

Funkcija clip_image258 je ograničena u svojoj Domeni (oblasti definisanosti) ako je skup K odnosno skup njenih vrijednosti (Kodomena) ograničena. Drugim riječima ako postoji takva dva broja clip_image260 i clip_image262 da je za sve vrijednosti x clip_image264 vrijedi clip_image266, gdje su clip_image260[1] i clip_image262[1] – realni brojevi.

Geometrijska interpretacija Definicije 7 je takva sa se cijeli grafik funkcije nalazi u dijelu ravni koja je ograničena sa pravcima clip_image268 i clip_image270.


Slika 2.3 Funkcija clip_image274, ograničena je pravim clip_image276 i clip_image278

Za ograničene funkcije jednog argumenta važi sljedeća teorema.

Teorema 2.1.

Ako je funkcija clip_image258[1] ograničena na skupu x clip_image264[1], tada postoji pozitivan broj clip_image280takav da je clip_image282 odnosno clip_image284.


Ako uzmemo da je brojclip_image286 tj. clip_image288 tada je clip_image290 odnosno clip_image292. Važi i obrnuto.

Primjer 9.

Funkcija clip_image294 ograničena je za clip_image296, tada imamo clip_image298, kao i to da je clip_image300. Ovo pak znači da grafik funkcije sin i cos leže unutar trake koju čine pravci y=1 i y=-1. Vidi sliku 2.4.

Napomena: Ograničenost funkcije može biti i samo s jedne strane odnosno sa gornje ili donje strane.Drugim riječima postoji broj clip_image260[2] takav da je clip_image302 -ograničenost sa donje strane i clip_image262[2] takav da je clip_image304 –ograničenost s gornje strane.

Primjer 10.

Funkcija clip_image070[1] ograničena sa donje strane jer je clip_image306.

Primjer 11.

Funkcija clip_image308 ograničena sa gornje strane jer je clip_image310.

Kažemo da funkcija nije ograničena u koliko ne postoji realni broj M takav da je clip_image312.


Slika 2.4 Ograničenost clip_image316, funkcija pravim clip_image276[1] i clip_image278[1]

Matematička Indukcija

…dio teksta napisanog 1996 o nekim temama iz matematike…. Cjelokupan tekst može se pogledati ovdje.

Uvodne riječi

Inspirisan skromnim iskustvom u prenošenju znanja mojim prijateljima i kolegama na fakultetu, odlučio sam da pokušam napisati ovaj tekst, u kojem sam obradio na nestandardan način neke teme iz područja matematike, koje se studiraju na prvoj godini Mašinskog fakulteta u Bihaću. Gotovo sve knjige iz matematike tako strogo obrađuju teme kao što i sama matematika to zahtjeva. Pokušao sam sebi dati malo slobode da na jedan nestandardan način potenciram i obradim neke detalje koji površno gledajući ne zahtijevaju mnogo pažnje, a temelj su u stvaranju prave slike i rasuđivanja u matematici.

Mnogi studenti dobijaju komplekse i razne male „traume“ kada ugledaju te silne teoreme, te matematičke simbole i zadatke. Koristio sam jedan, više simbolički način u rješavanju zadataka, a ne odstupajući od standarda rješavanja. Na taj način želio sam približiti i dati više hrabrosti studentima da se upuste u proučavanje te tako neophodne grane nauke i objasniti sve te strogo definisane zakone kroz jednu vrstu humora sa puno simbolike a koji u biti ostaju tamo gdje su uvijek pripadali – u matematici.

Protekli rat je učinio da mnogi studenti koji pohađaju I godinu nisu dolazili u dodir sa mnogim stvarima iz matematike, koje se obrađuju u srednjim školama. Kada jedan takav ratni srednjoškolac počinje da susreće sve te maloprije navedene stvari pada u jednu vrstu averzije prema matematici bez koje nikako ne može da napreduje. Averzija i strah od matematike u studentu živi cijelo vrijeme i jednostavno ga koči. U takvom stanju student postaje fobičan na svaku novu informaciju. On tada traži druge putove spoznaje: drži se strogih šablona uči na pamet određene teoreme i formule, jednostavno vodi jednu ogorčenu bitku s matematikom.

Prije nego što počnete čitati prve stranice ovog teksta, neka mi ne zamjere svi oni koji smatraju ovo nečim što ne pripada ovoj temi. Moj jedini cilj je u tome da ovaj djelić matematike bude lakše shvatljiv svim onima koji zbog rata to nisu dobili.

Bahrudin Hrnjica
U Bihaću, decembra 1996. godine.

Neki studenti i srednjoškolci, pri prvom susretu sa matematičkom indukcijom dobiju nekakav, nazvao bi ga »induktivni otpor« u moždanoj zavojnici. Radi smanjivanja i potpunog uklanjanja induktivnog otpora predlažem vam slijedeće.

» Zaboravite sve što ste znali, do sada, o Principu matematičke indukcije!«.

Kada ste obrisali i uklonili sve moždane vijuge glede matematičke indukcije, uvest ću vas u nju jednim drugim u biti istim putem. Prije nego što krenem u tu čudesnu i nevjerojatnu stvarnost ispičaću vam priču tko je kriv za to što nemate sna, i za sve noćne more koje dobijate od matematičke indukcije.

Sve je počelo ne tako davno, negdje blizu 20-tog stoljeća, kada je L. Peano ljetovao oko Venecije. U to doba dosta se govorilo o brojevima, posebno na gradskim trgovima i pijacama. Ali Peana, kao matematčara, nije zanimalo koliko šta košta, nego nešto sasvim drugo. On je razmišljao o tome kako sve te brojeve, koji su tako često u razgovoru i upotrebi, definiše i zasnuje na matematičkim osnovama, odnosno kako brojeve definisati pomoću jednog zatvorenog neproturječnog i konačnog skupa aksioma.

Jednog dana tako je i bilo…

Definicija 1 : Skupom Prirodnih bojeva zovemo svakim skupom N za čija ma koja dva elementa clip_image002 i clip_image004 postoji odnos da clip_image004[1] slijedi poslije clip_image002[1], i koji zadovoljavaju slijedeće aksiome.

Aksioma 1: 1 je prirodan broj.

( To je revolucionarno otkriće koje je mali korak za ljude sa trga a veliki za Peana)

Aksioma 2: Svaki prirodan broj clip_image002[2] ima svoj slijedeći broj clip_image004[2].

(Također ništa veći korak od prvog)

Aksioma 3: clip_image006. (Ili, jedan nije slijedeći broj ni za koji prirodan broj)

Aksiom 4: clip_image008. Dva prirodna broja su jednaka ako su im jednaki njihovi sljedeći brojevi.


Ova aksioma proizašla je nakon napornog rada na njivi gdje je Peano brao tek sazrjeli limun. »I limun je žut zar ne«.

Peta Peanova aksioma-aksioma poznata je pod nazivom »Noćna mora«. Aksioma zbog koje vi ne spavate, ne jedete, aksioma koja je frustrirala najviše studenata od svih Peanovih aksioma. Njen treći naziv je u narodu poznat pod imenom AKSIOMA INDUKCIJE.

Aksioma 5: Ako neki skup M prirodnih brojeva ima svojstvo:

· 1ϵM

· ako postoji prirodan brojclip_image010, pa također i njegov clip_image012. Tada M sadrži sve prirodne brojeve tj. M je identičan sa skupom prirodnih brojeva.

Nešto nije jasno? Da to je Aksioma indukcije. Šta, buni vas to što se spominju nekakvi skupovi M i N. Pa lijepo sam vam rekao da zaboravite sve što ste znali o matematičkoj indukciji.

Zadnja Peanova aksioma definiše matematićku indukciju.

Možda vam sad ništa nije jasno, ni matematička indukcija ni peanovi aksiomi. Možda vam je jedino jasno zašto je limun žut.

Tako sve počelo ( mislim na noćne more i branje limuna)…

To je bio čovjek koji je za sve kriv tj. definisao je matematičku indukciju. Reći ću vam nešto u povjerenju: Tu priču sam i ja čuo. Meni je bilo lakše, a vama…..?

Peta Peanova aksioma ili Aksioma indukcije modificirana je u teoremu. No prije nego je izložim pročitajte slijedeći primjer.

Zamislite da ste u vinskom podrumu i morate provjeriti kvalitet u 10 000 buradi. Jedino sto vlasnik želi od vas jeste da ga trijezni izvjestite da li je vino u svim buradima istog kvaliteta u roku od 15 minuta.

Sada kada je pred vama jedan gotovo nerješiv problem, ne klonite duhom. S takvim i sličnim situacijama priskače u pomoć ‘noćna mora’, hoću reći matematička indukcija.

Način na koji bi riješili ovakav problem sastoji se u sljedećem.

Probajte prvih nekoliko buradi s vinom. Uvjerite se da je vino istog kvaliteta. Sada ‘uzmite’ nasumice izabrano bure i pretpostavite da je vino zadanog kvaliteta (možete te ga čak i probati). Tada ispitajte vino u sljedećem buretu. Ako je ocjena ista kao kod pretpostavljenog bureta, možete otići vlasniku i obavijestiti ga da ste riješili problem odnosno da je vino istog kvaliteta.

Vlasnik će vam povjerovati jer poznaje princip matematičke indukcija.


Ni u kom slučaju nemojte popiti previše vina.«.

Ovo ne morate čitati

U matematici postoje dva načina rasuđivanja:



Deduktivni način rasuđivanja vodi do toga da morate probati vino u svim buradima i onda tako pijani date izvještaj vlasniku o kvalitetu vina u buradima. Drugim riječima dedukcija je način rasuđivanja u matematici koji se bazira na tome da sve pojedine zaključke dobijamo iz jednog općeg zakona.

Induktivni način zaključivanja, koji smo već prezentirali u primjeru, vodi do toga da pojedinačnim zaključivanjema dolazimo do jednog općeg zaključka.

Ako se sada svo to vino i burad zamijeni sa prirodnim brojevima dobijamo: princip matematičke indukcije.

Definicija 2 : PRINCIPA MATEMATIČKE INDUKCIJE. Ako neka tvrdnja P(n), koja zavisi od prirodnog broja n, vrijedi za prvih nekoliko prirodnih brojeva, te ako iz pretpostavke, da vrijedi za neki prirodni broj n=k tvrdnja P(k) vrijedi i za n=k+1, pomenuta tvrdnja vrijedi za sve prirodne brojeve odnosno za svaki prirodan broj n.

Za početak riješi ćemo jedan primjer. Sljedeći primjer je najjednostavniji primjer koji se rješava pomoću matematičke indukcije. Doista, jednostavnijeg primjera nema. Primjer je toliko jednostavan da ga ne možemo zvati zadatak.

Primjer 1 : Potrebno je provjeriti da li:


vrijedi za sve prirodne brojeve.


Prije samog početka vratite se na definiciju matamatičke indukcije. Nakon što ste još jednom pročitali definiciju, pročitajte je još jednom , i obratite pažnju na prvi dio rečenice. Definicija teoreme kaže da svaku trvdnju, bilo ona u obliku prmjera, ili zadatka, teoreme ili vinskog podruma – potrebno je provjerili validnost tvrdnje za prvih nekoliko prirodnih brojeva.

Uzmimo da je n=1.

Sada se dešava sljedeće (pošto je n=1):


vidimo da, ako izračunamo desnu stranu, dobijamo:


To znači da početna tvrdnja (1) vrijedi za prvi prirodan broj, što ne povlači da vrijedi ako je n=2, u to se moramo uvjeriti.

Ako je n=2, primjer se svodi na:




Vidimo da je tvrdnja (1) tačna i za n=2. Sada možemo preći na drugi korak jer nema smisla provjeravati dalje pojedinačno validnost trvdnje primjera 1. Međutim, ako se radi o vinskim buradima provjerava se najmanje prvih deset.

Pošto ste savladali prvi korak predlažem da pročitate ponovo definiciju matematičke indukcije i obratite pažnju na drugi dio rečenice tj. ‘ako iz pretpostavke da vrijedi na n=k …’.

Ovo znači da moramo izabrati neki prirodan broj k, znači bilo koji. Pošto je bilo koji, to ne možemo reći da je primjerice 5, 15 ili 155. Samim tim mi se nismo ograničili na određeni.

Pretpostavimo da za bilo koji n=k vrijedi tvrdnja (1). Na matematičkom jeziku zadnja rečenica izgleda sljedeće:


Sada pročitajte ponovo definiciju i pažnju stavite na zadnji dio rečenice ‘tvrdnja vrijedi za n=k’. To znači da moramo dokazati da tvrdnja vrijedi za n=k iz pretpostavke (2). U stvari mi sebi nešto pretpostavimo da bi smo s tom pretpostavkom nešto dokazali. To je isto kada moramo pretpostaviti da će vino poteći iz bureta prije nego natočimo čašu, inače ne bi ni otvarali bure.

Ovo je najbitniji momenat procedure dokazivanja baziranog na matematičkoj indukciji. Treći dio najjednostavnije možemo riješiti ako se pravimo da ništa ne znamo.

Napišimo pretpostavku:


U pretpostavku moramo uključiti sljedeći broj broja k tj. k+1 jer to definicija zahtjeva od nas. Ako sada, pošto ništa ne znamo, imamo na umu da jednoj ekvivalentnosti (bilo ona pretpostavljena ili ne) možemo dodati isti broj sa lijeve i desne strane i da ona i tada ostaje nepromijenjena (identična), tada smo primjer dokazali. Kako?

Dakle dodajmo lijevoj i desnoj strani sljedeći broj broja k. Broj koji je dodan je boldiran. Dobijamo:


Sada je potrebno lijevu i desnu stranu izmanipulisati tako da, gdje je god stajao broj k, mora biti sljedeći broj k+1. Jedino u takvom slučaju zadovolji ćemo definiciju 1, odnosno onog tipa iz Italije.

Pogledajmo lijevu stranu izraza (4). Tamo je k bio na posljednjem mjestu u jednakosti (2), sada stoji k+1. Znači tu smo odradili posao. Na desnoj strani imamo:


Postupiti ćemo kao da se nista ne dešava i uradi ćemo sve ono što se može uraditi na tako „oskudnoj“ desnoj strani. Sabraćemo razlomak sa k+1. Imamo:


Izvlačenjem zajedničkog člana k+1 u brojniku dobijamo sljedeće:




Promatrajući desnu stranu uočavamo da, gdje je god bio broj k i k+1 sada stoje sljedeći brojevi : k+1 i k+2 (odnosno (k+1)+1). A to znači da smo iz pretpostavke dokazali da tvrdnja vrijedi za n=k+1 prirodan broj.

Po posljednji put pročitajte definiciju, a pažnju usmjerite prema zadnjoj odnosno drugoj rečenici: ‘Tvrdnja vrijedi za svaki prirodan broj’.

Ako definicija kaže tako onda budite sigurni da ste stvarno dokazali primjer 1. Ako nevjerujete u to, predlažem vam da odete na pusto ostrvo sa šleperom papira i hrane, te polahko krenite od 1. Ostatak života ćete sigurno potrošiti dokazujući tvrdnju deduktivno, a možda ćete dospjeti i do naslovnica svjetskih časopisa pod naslovom ‘Čovjek sa pustog ostrva izmišlja toplu vodu’.

Ako ste shvatili prethodni primjer predlažem vam da odete u podrum i probate vino u 11-tom buretu.

Zadatak 1 : Dokazati primjenom matematičke indukcije da:


vrijedi za svaki prirodan broj.


Čim pogledamo zadatak primjetićemo da je lijeva strana zbir prvih n neparnih brojeva (desna strana je njihova vrijednost).

Ako je n=1 dobijamo,

clip_image040, tj. clip_image018[1]

clip_image042, tj. clip_image044

Pretpostavimo da je za n=k tvrdnja 6 tačna odnosno da je:


Smatrajući da su prva dva koraka razumljiva problem predstavlja korak 3, odnosno da iz pretpostavke 7, dokažemo da tvrdnja vrijedi i za n=k+1, što definicija hoće „reći“, da dokažemo da tvrdnja vrijedi i tada kada ubacimo u zbir i sljedeći neparni broj od broja 2k-1, odnosno 2k+1.Lijevoj i desnoj strani dodajemo broj 2k+1.

Možda se pitate: Zašto baš 2k+1? Zašto nije neki drugi, ljepši broj?

Pa jednostavno zato što je limu žut, tj. Pošto definicija traži od nas, da stavimo u glavnu ulogu broj k+1.

Kod postavljanja u glavnu ulogu broja k+1, morate ići na to da što jeftinije prođete s tim glumcem. Hoću reći da morate biti što ljenji glede rješavanja matematičkih zadataka.

Broj 2k+1 je sljedeći broj od broja 2k-1. Evo zašto: Kada u broj 2k-1, umjesto k stavimo sljedeći broj tj. k+1 imamo:




Prije nekoliko godina, vjerojatno kroz neku maglu prisjećate se 8 razreda kada vam je nastavnik govorio da je:


Zbog tog razloga desna strana jednakosti (8) poprima oblik:


Ponovo ista situacija kao i u primjeru. Gdje je god stajao broj k, sada stoji broj k+1. Zaključak se svodi na primjer:

Poprincipu matematičke indukcije naš zadatak 1 je dokazan.


Kod bilo kojeg rješavanja ovakvih tipova zadataka uvijek kod trećeg koraka idemo na to da kada dodamoneki broj dodajemo uvijek sljedeći u nizu na lijevoj strani (na strani gdje je suma). Tada više posla sa lijevom stranom nemamo, samo je (lijevu stranu jednakosti) vučemo za sobom i sređujemo desnu stranu.

Vidjeli ste kako se neke sume dokazuju primjenom matematičke indukcije. Međutim, postoji mnogo tipova drugih zadataka koji se rješavaju ovom metodom.

Pokušaću vam objasniti kako se djeljivost nekog broja može dokazati ovom metodom (matematičkom indukcijom). Također ćemo krenuti od jednog primjera.

Primjer 2 : Dokazati da je:


dijeljivo sa 2 za svaki prirodan broj.


Ako ste zaboravili definiciju (postupak) matematičke indukcije pročitajte je.

Provjeravamo tvrdnju za prvih nekoliko prirodnih brojeva:

Za n=1, clip_image058 , tj. 4 je dijeljivo sa 2, odnosno simbolički zapisano:


Za n=2, clip_image062 , tj. 10 je dijeljivo sa 2, odnosno simbolički zapisano


Vidimo da naš primjer vrijedi za prva dva prirodna broja.

Sad ćemo pretpostaviti da naša tvrdnja odnosno prosti primjer vrijedi za bilo koji broj k. Ako smo to učinili tada našu pretpostavku možemo napisati na matematičkom jeziku kao:

clip_image066, gdje je clip_image068

Za one kojim nije jasna zadnja jednakost neka ne čitaju sljedeći dio teksta.

Ako je neki prirodan boj Ž dijeljiv sa prirodnim brojem 2, tada je:

clip_image070, drugim riječima, to znači dakada podjelimo broj Ž sa brojem 2 dobijemo neki prirodni broj Č.

Ako zadnju jednakost pomnožimo sa 2 dobijamo:


a što je isto kao kad smo napisali:


Pomoću pretpostavke (11), trebamo dokazati da je:


Ponovo kao i svaki put kada radimo 3 korak pravimo se da ništa ne znamo:



Ako niste shvatili zadnje jednakosti tada uzmite teku iz prvog razreda srednje škole i ponovite stepene, ako je niste naložili.

Vidimo da je izraz u zagradi isti kao i naša pretpostavka pa je dijeljiva sa 2, tj.


Zadnja jednakost nam daje za pravo da zaključimo kako je clip_image084 djeljivosa 2, a definicija da je primjer 2 tj. clip_image086 djeljiv sa 2 za svaki prirodan broj n.

Ako niste sigurni u ovaj dokaz postupate kao i u prethodnom primjeru br. 1.

Ovo ne morate čitati

Kada kažemo“vidimo da smo dokazali i za n=k+1“ to znači u bukvalnom smislu (razmišljanjem jednog prosječnog osnovca) da mi u stvari pretpostavku uzmemo, malo je prevrnemo, odjenemo je u odjeću, počešljamo je, kupimo joj nove cipele i od jedne pepeljuge postane princeza. Znači mi tu u stvari ništa ne dokazujemo u smislu dugotrajnih sudskih procesa, svjedočenja, advokata, porote i slično. Samo dodamo saberemo i izvučemo zajednički član i pretpostavka za čudo postane upravo ono što mi trebamo dobiti, a to je jednakost za n=k+1.

Čudno zar ne?


Luigi Peano 1858-1918