Numerická integrácia Simpsonovou metódou (Python): Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
(Vytvorená stránka „Numerické integrovanie Simpsonovou metódou využíva aproximáciu pôvodnej funkcie pomocou paraboly. Hodnotu funkcie f(x) nahradíme pre všetky body x z podintervalu <x…“)
 
 
(4 medziľahlé úpravy od 2 ďalších používateľov nie sú zobrazené)
Riadok 1: Riadok 1:
 +
{{sablona_python_priklady|Matematika}}
 
Numerické integrovanie Simpsonovou metódou využíva aproximáciu pôvodnej funkcie pomocou paraboly. Hodnotu funkcie f(x) nahradíme pre všetky body x z podintervalu <x<sub>2k-1</sub>,x<sub>2k+1</sub>> parabolou prechádzajúcou bodmi f(x<sub>2k-1</sub>),f(x<sub>2k</sub>),f(x<sub>2k+1</sub>).  
 
Numerické integrovanie Simpsonovou metódou využíva aproximáciu pôvodnej funkcie pomocou paraboly. Hodnotu funkcie f(x) nahradíme pre všetky body x z podintervalu <x<sub>2k-1</sub>,x<sub>2k+1</sub>> parabolou prechádzajúcou bodmi f(x<sub>2k-1</sub>),f(x<sub>2k</sub>),f(x<sub>2k+1</sub>).  
 
f(x<sub>2k-1</sub>)=Ah<sup>2</sup>-Bh+C
 
f(x<sub>2k-1</sub>)=Ah<sup>2</sup>-Bh+C
Riadok 4: Riadok 5:
 
f(x<sub>2k+1</sub>)=Ah<sup>2</sup>+Bh+C
 
f(x<sub>2k+1</sub>)=Ah<sup>2</sup>+Bh+C
 
kde A,B,C sú neznáme parametre funkcie.
 
kde A,B,C sú neznáme parametre funkcie.
[[Súbor:Príklad.jpg]]
 
  
 +
[[Súbor:Simpson_rule_resize.png]]                [[Súbor:Simpsons_method_illustration_resize.png]]
 +
 +
Integrovaný interval <a,b> pod parabolou je rozdelený na 2r intervalov s veľkosťou <math>h=\frac{b-a}{2r}</math>.
 +
Integrál je potom možné vypočítať podľa vzťahu:
 +
 +
 +
<math> \int_a^b \! f(x) \, \mathrm{d}x </math><math> = \frac{b-a}{6r}</math><math>*{f(x_0)+4*[f(x_1)+f(x_3)+...f(x_2r-1)]+2[f(x_2)+f(x_4)+...f(x_2r-2)]+f(x_2r)}</math>
  
  
Integrovaný interval <a,b> pod parabolou je rozdelený na 2r intervalov s veľkosťou h=(b-a)/2r.
 
  
 
<source lang="python">
 
<source lang="python">
 
# Numerické integrovanie Simpsonovou metódou
 
# Numerické integrovanie Simpsonovou metódou
 
 
# Simpsonova metóda spočíva v nahradení integrovanej funkcie parabolou prechádzajúcou troma bodmi
 
# Simpsonova metóda spočíva v nahradení integrovanej funkcie parabolou prechádzajúcou troma bodmi
 
 
# na začiatku použivateľ zadá funkciu (sin(x),cos(x),tan(x),x^2,ln(x),exp(x))
 
# na začiatku použivateľ zadá funkciu (sin(x),cos(x),tan(x),x^2,ln(x),exp(x))
 
 
# potom zadá interval, na ktorom sa má funkcia zintegrovať
 
# potom zadá interval, na ktorom sa má funkcia zintegrovať
 
 
# a nakoniec zadá presnosť, resp. krok, s akým ju chce zintegrovať
 
# a nakoniec zadá presnosť, resp. krok, s akým ju chce zintegrovať
 
 
  
 
import math
 
import math
 
 
  
 
print("Funkcie, ktoré môžete zadať, sú: sin(x),cos(x),tan(x),x^2,ln(x),exp(x)")
 
print("Funkcie, ktoré môžete zadať, sú: sin(x),cos(x),tan(x),x^2,ln(x),exp(x)")
 
 
funkcia = input("Zadajte funkciu, pod ktorou chcete vypočítať obsah: ")
 
funkcia = input("Zadajte funkciu, pod ktorou chcete vypočítať obsah: ")
 
 
a = input("Zadajte spodnú hranicu intervalu, v ktorom chcete integrovať: ")
 
a = input("Zadajte spodnú hranicu intervalu, v ktorom chcete integrovať: ")
 
 
b = input("Zadajte hornú hranicu intervalu, v ktorom chcete integrovať: ")
 
b = input("Zadajte hornú hranicu intervalu, v ktorom chcete integrovať: ")
 
 
krok = input("Zadajte krok, s ktorým chcete integrovať: ")
 
krok = input("Zadajte krok, s ktorým chcete integrovať: ")
 
 
  
 
f=[]
 
f=[]
 
 
x=float(a)
 
x=float(a)
 
 
krok=float(krok)
 
krok=float(krok)
 
 
a=float(a)
 
a=float(a)
 
 
b=float(b)
 
b=float(b)
 
 
i=0
 
i=0
 
 
 
  
  
 
if funkcia=="sin(x)":
 
if funkcia=="sin(x)":
 
 
     while x<=b:
 
     while x<=b:
 
 
         f.append(math.sin(x))
 
         f.append(math.sin(x))
 
 
         x+=krok
 
         x+=krok
 
 
         i+=1
 
         i+=1
 
 
elif funkcia=="cos(x)":
 
elif funkcia=="cos(x)":
 
 
     while x<=b:
 
     while x<=b:
 
 
         f.append(math.cos(x))
 
         f.append(math.cos(x))
 
 
         x+=krok
 
         x+=krok
 
 
         i+=1
 
         i+=1
 
 
elif funkcia=="tan(x)":
 
elif funkcia=="tan(x)":
 
 
     while x<=b:
 
     while x<=b:
 
 
         f.append(math.tan(x))
 
         f.append(math.tan(x))
 
 
         x+=krok
 
         x+=krok
 
 
         i+=1
 
         i+=1
 
 
elif funkcia=="x^2":
 
elif funkcia=="x^2":
 
 
     while x<=b:
 
     while x<=b:
 
 
         f.append(math.pow(x,2))
 
         f.append(math.pow(x,2))
 
 
         x+=krok
 
         x+=krok
 
 
         i+=1
 
         i+=1
 
 
elif funkcia=="ln(x)":
 
elif funkcia=="ln(x)":
 
 
     while x<=b:
 
     while x<=b:
 
 
         f.append(math.log(x))
 
         f.append(math.log(x))
 
 
         x+=krok
 
         x+=krok
 
 
         i+=1
 
         i+=1
 
 
elif funkcia=="exp(x)":
 
elif funkcia=="exp(x)":
 
 
     while x<=b:
 
     while x<=b:
 
 
         f.append(math.exp(x))
 
         f.append(math.exp(x))
 
 
         x+=krok
 
         x+=krok
 
 
         i+=1
 
         i+=1
 
 
else:
 
else:
 
 
     print("fukcia bola zadaná nesprávne")
 
     print("fukcia bola zadaná nesprávne")
 
 
  
 
sum1=0
 
sum1=0
 
 
sum2=0
 
sum2=0
 
 
j=0
 
j=0
 
 
  
 
while j<i:
 
while j<i:
 
 
     if (j/2)>(int(j/2)):  
 
     if (j/2)>(int(j/2)):  
 
 
       sum1+=f[j]
 
       sum1+=f[j]
 
 
     else:
 
     else:
 
 
       sum2+=f[j]
 
       sum2+=f[j]
 
 
     j+=1
 
     j+=1
 
 
        
 
        
 
 
I=((b-a)/(3*i))*(f[0]+4*sum1+2*sum2)
 
I=((b-a)/(3*i))*(f[0]+4*sum1+2*sum2)
 
 
  
 
print ("Vypočítaný obsah je: "+str(I))
 
print ("Vypočítaný obsah je: "+str(I))
 
 
 
 
 
 
</source>
 
</source>

Aktuálna revízia z 11:37, 18. marec 2013

Tento príklad patrí pod predmet Základy informatiky - jazyk Python, časť Matematika

Numerické integrovanie Simpsonovou metódou využíva aproximáciu pôvodnej funkcie pomocou paraboly. Hodnotu funkcie f(x) nahradíme pre všetky body x z podintervalu <x2k-1,x2k+1> parabolou prechádzajúcou bodmi f(x2k-1),f(x2k),f(x2k+1). f(x2k-1)=Ah2-Bh+C f(x2k)=C f(x2k+1)=Ah2+Bh+C kde A,B,C sú neznáme parametre funkcie.

Simpson rule resize.png Simpsons method illustration resize.png

Integrovaný interval <a,b> pod parabolou je rozdelený na 2r intervalov s veľkosťou [math]h=\frac{b-a}{2r}[/math]. Integrál je potom možné vypočítať podľa vzťahu:


[math] \int_a^b \! f(x) \, \mathrm{d}x [/math][math] = \frac{b-a}{6r}[/math][math]*{f(x_0)+4*[f(x_1)+f(x_3)+...f(x_2r-1)]+2[f(x_2)+f(x_4)+...f(x_2r-2)]+f(x_2r)}[/math]


# Numerické integrovanie Simpsonovou metódou
# Simpsonova metóda spočíva v nahradení integrovanej funkcie parabolou prechádzajúcou troma bodmi
# na začiatku použivateľ zadá funkciu (sin(x),cos(x),tan(x),x^2,ln(x),exp(x))
# potom zadá interval, na ktorom sa má funkcia zintegrovať
# a nakoniec zadá presnosť, resp. krok, s akým ju chce zintegrovať

import math

print("Funkcie, ktoré môžete zadať, sú: sin(x),cos(x),tan(x),x^2,ln(x),exp(x)")
funkcia = input("Zadajte funkciu, pod ktorou chcete vypočítať obsah: ")
a = input("Zadajte spodnú hranicu intervalu, v ktorom chcete integrovať: ")
b = input("Zadajte hornú hranicu intervalu, v ktorom chcete integrovať: ")
krok = input("Zadajte krok, s ktorým chcete integrovať: ")

f=[]
x=float(a)
krok=float(krok)
a=float(a)
b=float(b)
i=0


if funkcia=="sin(x)":
    while x<=b:
        f.append(math.sin(x))
        x+=krok
        i+=1
elif funkcia=="cos(x)":
    while x<=b:
        f.append(math.cos(x))
        x+=krok
        i+=1
elif funkcia=="tan(x)":
    while x<=b:
        f.append(math.tan(x))
        x+=krok
        i+=1
elif funkcia=="x^2":
    while x<=b:
        f.append(math.pow(x,2))
        x+=krok
        i+=1
elif funkcia=="ln(x)":
    while x<=b:
        f.append(math.log(x))
        x+=krok
        i+=1
elif funkcia=="exp(x)":
    while x<=b:
        f.append(math.exp(x))
        x+=krok
        i+=1
else:
    print("fukcia bola zadaná nesprávne")

sum1=0
sum2=0
j=0

while j<i:
    if (j/2)>(int(j/2)): 
      sum1+=f[j]
    else:
      sum2+=f[j]
    j+=1
      
I=((b-a)/(3*i))*(f[0]+4*sum1+2*sum2)

print ("Vypočítaný obsah je: "+str(I))