<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sk">
	<id>http://www.kiwiki.info/index.php?action=history&amp;feed=atom&amp;title=Java_-_algoritmy_numerick%C3%A9ho_integrovania</id>
	<title>Java - algoritmy numerického integrovania - História úprav</title>
	<link rel="self" type="application/atom+xml" href="http://www.kiwiki.info/index.php?action=history&amp;feed=atom&amp;title=Java_-_algoritmy_numerick%C3%A9ho_integrovania"/>
	<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Java_-_algoritmy_numerick%C3%A9ho_integrovania&amp;action=history"/>
	<updated>2026-04-14T20:37:33Z</updated>
	<subtitle>História úprav pre túto stránku na wiki</subtitle>
	<generator>MediaWiki 1.34.0</generator>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Java_-_algoritmy_numerick%C3%A9ho_integrovania&amp;diff=9656&amp;oldid=prev</id>
		<title>Juraj: Vytvorená stránka „{{navigacne menu - java}} Ďalšími numerickými algoritmami sú algoritmy numerického integrovania. Pri výpočte integrálu pomocou numerických metód vychádzame z fa…“</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Java_-_algoritmy_numerick%C3%A9ho_integrovania&amp;diff=9656&amp;oldid=prev"/>
		<updated>2011-04-08T20:17:24Z</updated>

		<summary type="html">&lt;p&gt;Vytvorená stránka „{{navigacne menu - java}} Ďalšími numerickými algoritmami sú algoritmy numerického integrovania. Pri výpočte integrálu pomocou numerických metód vychádzame z fa…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{navigacne menu - java}}&lt;br /&gt;
Ďalšími numerickými algoritmami sú algoritmy numerického integrovania. Pri výpočte integrálu pomocou numerických metód vychádzame z faktu, hodnota určitého integrálu je plocha pod krivkou (definuje je integrovaná funkcia), ohraničená hranicami integrovania. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:numericky integral - definicia.png|center|thumb|400px|Interpretácia určitého integrálu]]&lt;br /&gt;
&lt;br /&gt;
Túto často nepravidelnú plochu si rozdelíme na také časti, ktorých plochu vieme spočítať a potom všetky tieto časti sčítame.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:numericky integral - princip.png|center|thumb|400px|Princíp výpočtu určitého integrálu numerickými metódami]]&lt;br /&gt;
&lt;br /&gt;
Podľa spôsobu rozdelenia celej plochy na jednotlivé časti poznáme metódy výpočtu určitého integrálu:&lt;br /&gt;
*Obdĺžniková metóda&lt;br /&gt;
*Lichobežníková metóta&lt;br /&gt;
*Simpsonova metóda&lt;br /&gt;
&lt;br /&gt;
==Obdĺžniková metóda==&lt;br /&gt;
Pri tejto metóde si plochu rozdelíme na obdĺžniky, ako to ukazuje nasledujúci obrázok:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:numericky integral - obdlznik princip.png|center|thumb|400px|Princíp výpočtu určitého integrálu obdĺžnikovou metódou]]&lt;br /&gt;
&lt;br /&gt;
Integrál, ktorý počítame môžeme zapísať nasledovne:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; I=\int\limits_{a}^{b}{f\left( x \right)dx}=\sum\limits_{i=0}^{n-1}{{{P}_{i}}}=\sum\limits_{i=0}^{n-1}{h\cdot f\left( \frac{{{x}_{i}}+{{x}_{i+1}}}{2} \right)}=h\sum\limits_{i=0}^{n-1}{f\left( \frac{{{x}_{i}}+{{x}_{i+1}}}{2} \right)} \\ &lt;br /&gt;
 &amp;amp; kde\,h=\frac{b-a}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Všimnite si, že výška jedného obdĺžnika sa vypočíta ako aritmetický priemer susedných funkčných hodnôt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Implementácia v Jave===&lt;br /&gt;
Triedu ''Solver'' doplníme o metódu ''integralObdlznik'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
    public double integralObdlznik(double a, double b, int n) {&lt;br /&gt;
        double krok = (b - a) / n;&lt;br /&gt;
        double I = 0, x;&lt;br /&gt;
        for (x = a; x &amp;lt; b; x += krok) {&lt;br /&gt;
            I += this.f.hodnota((2 * x + krok) / 2);&lt;br /&gt;
        }&lt;br /&gt;
        return I * krok;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Lichobežníková metóda==&lt;br /&gt;
Táto metóda je veľmi podobná predchádzajúcej, ale plochu nerozdelíme na obdĺžniky, ako na lichobežníky:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:numericky integral - lichobeznik princip.png|center|thumb|400px|Princíp výpočtu určitého integrálu lichobežníkovou metódou]]&lt;br /&gt;
&lt;br /&gt;
Integrál, ktorý počítame môžeme zapísať nasledovne:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; I=\int\limits_{a}^{b}{f\left( x \right)dx}=\sum\limits_{i=0}^{n-1}{{{P}_{i}}}=\sum\limits_{i=0}^{n-1}{h\cdot \frac{f\left( {{x}_{i}} \right)+f\left( {{x}_{i+1}} \right)}{2}}=\frac{h}{2}\sum\limits_{i=0}^{n-1}{\left( f\left( {{x}_{i}} \right)+f\left( {{x}_{i+1}} \right) \right)}=h\left( \frac{1}{2}f\left( {{x}_{0}} \right)+\sum\limits_{i=1}^{n-2}{f\left( {{x}_{i}} \right)+\frac{1}{2}f\left( {{x}_{n-1}} \right)} \right) \\ &lt;br /&gt;
 &amp;amp; kde\,h=\frac{b-a}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Implementácia v Jave===&lt;br /&gt;
Triedu ''Solver'' doplníme o metódu ''integralLichobeznik'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
    public double integralLichobeznik(double a, double b, int n) {&lt;br /&gt;
        double krok = (b - a) / n;&lt;br /&gt;
        double I = 0, x;&lt;br /&gt;
        for (x = a + krok; x &amp;lt; b - krok; x += krok) {&lt;br /&gt;
            I += this.f.hodnota(x);&lt;br /&gt;
        }&lt;br /&gt;
        I += (this.f.hodnota(a) + this.f.hodnota(b)) / 2;&lt;br /&gt;
        return I * krok;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Simpsonova metóda==&lt;br /&gt;
Táto metóda je presnejšia, ale výpočet trvá dlhší čas. Časti, na ktoré rozdelíme plochu budú zhora ohraničené parabolou. Obsah časti zhora ohraničenej parabolou je na nasledujúcom obrázku.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:numericky integral - simpsonprincip.png|center|thumb|400px|Princíp výpočtu určitého integrálu Simpsonovou metódou]]&lt;br /&gt;
&lt;br /&gt;
Integrál, ktorý počítame môžeme zapísať nasledovne:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; I=\int\limits_{a}^{b}{f\left( x \right)dx}=\sum\limits_{i=a}^{b}{{{P}_{i}}}=\sum\limits_{i=a}^{b}{\frac{h}{3}\cdot \left( f\left( {{x}_{i-2}} \right)+4f\left( {{x}_{i-1}} \right)+f\left( {{x}_{i}} \right) \right)}=\frac{h}{3}\sum\limits_{i=a}^{b}{f\left( {{x}_{i-2}} \right)+4f\left( {{x}_{i-1}} \right)+f\left( {{x}_{i}} \right)} \\ &lt;br /&gt;
 &amp;amp; kde\,h=\frac{b-a}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Implementácia v Jave===&lt;br /&gt;
Triedu ''Solver'' doplníme o metódu ''integralSimpson'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
    public double integralSimpson(double a, double b, int n) {&lt;br /&gt;
        double krok = (b - a) / n;&lt;br /&gt;
        double I = 0, x;&lt;br /&gt;
        for (x = a + 2 * krok; x &amp;lt;= b; x += 2 * krok) {&lt;br /&gt;
            I += (this.f.hodnota(x - 2 * krok) + 4 * this.f.hodnota(x - krok) + this.f.hodnota(x));&lt;br /&gt;
        }&lt;br /&gt;
        return I * krok / 3;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementácia algoritmov numerického integrovania v Java aplikácii==&lt;br /&gt;
Vo vzorovej aplikácii pridáme na kartu 'Integrál' komponenty podľa nasledujúceho obrázku: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:numericky integral - aplikacia 1.png|center|thumb|400px|Karta Integrál]]&lt;br /&gt;
&lt;br /&gt;
Opis komponentov:&lt;br /&gt;
&lt;br /&gt;
'''buttonGroup'''&lt;br /&gt;
*do aplikácie pridáme nevizuálny komponent buttonGroup&lt;br /&gt;
*názov komponentu integralGroup&lt;br /&gt;
&lt;br /&gt;
'''RadioButton'''&lt;br /&gt;
*Obdĺžniková metóda&lt;br /&gt;
**názov komponentu rbObdlznik,&lt;br /&gt;
**vlastnosť buttonGroup: integralGroup&lt;br /&gt;
*Lichobežníková metóta&lt;br /&gt;
**názov komponentu rbLichobeznik,&lt;br /&gt;
**vlastnosť buttonGroup: integralGroup&lt;br /&gt;
*Simpsonova metóda&lt;br /&gt;
**názov komponentu rbSimpson,&lt;br /&gt;
**vlastnosť buttonGroup: integralGroup&lt;br /&gt;
&lt;br /&gt;
'''textField'''&lt;br /&gt;
* zadávanie začiatku intervalu integrovania : a&lt;br /&gt;
**názov komponentu: textIntegralA&lt;br /&gt;
* zadávanie konca intervalu integrovania : b&lt;br /&gt;
**názov komponentu: textIntegralB&lt;br /&gt;
* zadávanie hodnoty n - delenie intervalu&lt;br /&gt;
**názov komponentu: textIntegralN&lt;br /&gt;
&lt;br /&gt;
'''label'''&lt;br /&gt;
* text, pre zobrazenie výsledku integrovania (na obrázku 0.00000)&lt;br /&gt;
**názov komponentu: labelntegralVysledok        &lt;br /&gt;
**prednastavený text komponentu: 0.00000&lt;br /&gt;
&lt;br /&gt;
'''button'''&lt;br /&gt;
* tlačidlo 'Integruj!' slúži na spustenie výpočtu integrálu&lt;br /&gt;
**názov komponentu: btnIntegruj&lt;br /&gt;
**udalosť tlačidla: actionPerformed &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Obsluha tlačítka 'Integruj!': &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
    private void btnIntegrujActionPerformed(java.awt.event.ActionEvent evt) {                                            &lt;br /&gt;
        double a, b, I = 0;&lt;br /&gt;
        int n;&lt;br /&gt;
        a = Double.valueOf(textIntegralA.getText());&lt;br /&gt;
        b = Double.valueOf(textIntegralB.getText());&lt;br /&gt;
        n = Integer.valueOf(textIntegralN.getText());&lt;br /&gt;
        if (rbObdlznik.isSelected()) {&lt;br /&gt;
            I = this.s.integralObdlznik(a, b, n);&lt;br /&gt;
        }&lt;br /&gt;
        if (rbLichobeznik.isSelected()) {&lt;br /&gt;
            I = this.s.integralLichobeznik(a, b, n);&lt;br /&gt;
        }&lt;br /&gt;
        if (rbSimpson.isSelected()) {&lt;br /&gt;
            I = this.s.integralSimpson(a, b, n);&lt;br /&gt;
        }&lt;br /&gt;
        labelntegralVysledok.setText(String.valueOf(I));&lt;br /&gt;
    }  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Vizualizácia vypočítané integrálu===&lt;br /&gt;
Do aplikácie doplníme zobrazenie hraníc integrálu a plochu pod integrovanou krivkou vyšrafujeme. Šrafovanie bude pozdĺžne. Budeme teda na intervale &amp;lt;nowiki&amp;gt;&amp;lt;a,b&amp;gt;&amp;lt;/nowiki&amp;gt; kresliť zvislé čiary. Doplníme predchádzajúcu metódu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
    private void btnIntegrujActionPerformed(java.awt.event.ActionEvent evt) {                                            &lt;br /&gt;
        double a, b, I = 0;&lt;br /&gt;
        int n;&lt;br /&gt;
        a = Double.valueOf(textIntegralA.getText());&lt;br /&gt;
        b = Double.valueOf(textIntegralB.getText());&lt;br /&gt;
        n = Integer.valueOf(textIntegralN.getText());&lt;br /&gt;
        if (rbObdlznik.isSelected()) {&lt;br /&gt;
            I = this.s.integralObdlznik(a, b, n);&lt;br /&gt;
        }&lt;br /&gt;
        if (rbLichobeznik.isSelected()) {&lt;br /&gt;
            I = this.s.integralLichobeznik(a, b, n);&lt;br /&gt;
        }&lt;br /&gt;
        if (rbSimpson.isSelected()) {&lt;br /&gt;
            I = this.s.integralSimpson(a, b, n);&lt;br /&gt;
        }&lt;br /&gt;
        labelntegralVysledok.setText(String.valueOf(I));&lt;br /&gt;
&lt;br /&gt;
//srafovanie&lt;br /&gt;
        g.setColor(Color.DARK_GRAY);&lt;br /&gt;
        double x,y,krok;&lt;br /&gt;
        krok=t.getKrok()*3;&lt;br /&gt;
        for(x=a;x&amp;lt;b;x+=krok){&lt;br /&gt;
            y=f.hodnota(x);&lt;br /&gt;
            g.drawLine(t.getX(x),t.getY(0) ,t.getX(x), t.getY(y));&lt;br /&gt;
        }&lt;br /&gt;
    }  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Výsledok:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:numericky integral - aplikacia 2.png|center|thumb|400px|Vizualizácia hodnoty integrálu]]&lt;/div&gt;</summary>
		<author><name>Juraj</name></author>
		
	</entry>
</feed>