Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Procijenite apsolutnu pogrešku pri izračunavanju volumena idealnog plina formulom ako je poznato da je
- tx=280
- apt=0.2
- px=101325
- app=20
- nx=100
- apn=0.1
- r=8.3144621
- vx=(nx*r*tx)/px
- ap=abs((r*tx)/px)*apn + abs(nx*r*tx*(-1./(px**2)))*app + abs((nx*r)/px)*apt print "apsolutna pogreska:" , ap
- -Izracunaj uvjetnost za neku funkciju x zadano
- from math import * x=1.12 conda=abs(x/sqrt(x**2 + 1)) print "apsolutna uvjetovanost",conda
- -#2. Zaokružite broj π na tri decimale,
- # zatim odredite apsolutnu I relativnu grešku aproksimacije.
- from math import *
- pix=round(pi,3)
- apsgr=abs(pi-pix)
- relgr=apsgr/pix
- print "apsolutna greska", apsgr
- print "relativna greska", relgr
- -IzraÄŤunajte apsolutnu i relativnu uvjetovanost funkcije
- # f(x) = ln(x) u okolini toÄŤke x0 = 2.
- from math import log
- x=2.
- condfaps=abs(1./x)
- condfrel=abs(1./log(x))
- print condfaps
- print condfrel
- -6. Aproksimirajte funkciju 1/(x^2+1) na intervalu [0, 5]
- # upotrebom 5, 10, 20 čvorova. Izračunajte relativnu pogrešku u čvoru 0.6.
- from numpy import *
- from scipy import interpolate as i
- import pylab as py
- def fun(x):
- return 1./(x**2+1)
- x5=linspace(0,5,5)
- i5=i.BarycentricInterpolator(x5,fun(x5))
- aps5=abs(fun(0.6)- i5(0.6))
- print "apsolutna greška na 5 cvorova", aps5
- x10=linspace(0,5,10)
- i10=i.BarycentricInterpolator(x10,fun(x10))
- aps10=abs(fun(0.6)- i10(0.6))
- print "apsolutna greška na 10 cvorova", aps10
- x20=linspace(0,5,20)
- i20=i.BarycentricInterpolator(x20,fun(x20))
- aps20=abs(fun(0.6)- i20(0.6))
- print "apsolutna greška na 20 cvorova", aps20
- x=linspace(0,5,1000)
- py.plot(x,fun(x),'g')
- py.plot(x,i5(x),'r')
- py.plot(x,i10(x),'b')
- py.plot(x,i20(x),'y')
- py.show()
- -Odredite Lagrangeov polinom koji interpolira funkciju zadanu tablicom
- # xi = -1, 0, 1
- # yi = 10, 5, 6
- from numpy import *
- from scipy import interpolate as i
- x=array([-1,0,1])
- y=array([10,5,6])
- lpol=i.lagrange(x,y)
- print lpol
- -4. Aproksimirajte Lagrangeovim polinomom funkciju x*e^x.
- # Interpolirajte funkciju u čvorovima 1, 2, 3 i
- # Izračunajte relativnu pogrešku aproksimacije u čvoru 1.5.
- from numpy import *
- from scipy import interpolate as i
- import pylab as py
- def l0(x,x0,x1,x2):
- return ((x-x1)*(x-x2))/((x0-x1)*(x0-x2))
- def l1(x,x0,x1,x2):
- return ((x-x0)*(x-x2))/((x1-x0)*(x1-x2))
- def l2(x,x0,x1,x2):
- return ((x-x0)*(x-x1))/((x2-x0)*(x2-x1))
- def fun(x):
- return x*exp(x) #exp(x)=e^x
- def Lag(x,x0,x1,x2):
- return fun(x0)*l0(x,x0,x1,x2)+fun(x1)*l1(x,x0,x1,x2)+fun(x2)*l2(x,x0,x1,x2)
- #provjera da li je vrijednost funkcije i Lagrangea u cvorovima jednaka
- print fun(1.),Lag(1.,1.,2.,3.)
- print fun(2.),Lag(2.,1.,2.,3.)
- print fun(3.),Lag(3.,1.,2.,3.)
- #racunanje relativne greske
- aps=abs(fun(1.5)-Lag(1.5,1.,2.,3.))
- print "apsolutna greska",aps
- rel=aps/abs(fun(1.5))
- print "relativna greska",rel
- ## crtanje polinoma i funkcije
- xk=linspace(0,4,1000)
- py.plot(xk,fun(xk),'g')
- py.plot(xk,Lag(xk,1.,2.,3.),'r')
- cv=[1.,2.,3.]#za crtanje cvorova
- py.plot(cv,fun(cv),'o')#crtamo cvorove
- py.show()
- -4. Aproksimirajte Lagrangeovim polinomom funkciju x*e^x.
- # Interpolirajte funkciju u čvorovima 1, 2, 3 i
- # Izračunajte relativnu pogrešku aproksimacije u čvoru 1.5.
- from numpy import *
- from scipy import interpolate as i
- import pylab as py
- def l0(x,x0,x1,x2):
- return ((x-x1)*(x-x2))/((x0-x1)*(x0-x2))
- def l1(x,x0,x1,x2):
- return ((x-x0)*(x-x2))/((x1-x0)*(x1-x2))
- def l2(x,x0,x1,x2):
- return ((x-x0)*(x-x1))/((x2-x0)*(x2-x1))
- def fun(x):
- return x*exp(x) #exp(x)=e^x
- def Lag(x,x0,x1,x2):
- return fun(x0)*l0(x,x0,x1,x2)+fun(x1)*l1(x,x0,x1,x2)+fun(x2)*l2(x,x0,x1,x2)
- #provjera da li je vrijednost funkcije i Lagrangea u cvorovima jednaka
- print fun(1.),Lag(1.,1.,2.,3.)
- print fun(2.),Lag(2.,1.,2.,3.)
- print fun(3.),Lag(3.,1.,2.,3.)
- #racunanje relativne greske
- aps=abs(fun(1.5)-Lag(1.5,1.,2.,3.))
- print "apsolutna greska",aps
- rel=aps/abs(fun(1.5))
- print "relativna greska",rel
- ## crtanje polinoma i funkcije
- xk=linspace(0,4,1000)
- py.plot(xk,fun(xk),'g')
- py.plot(xk,Lag(xk,1.,2.,3.),'r')
- cv=[1.,2.,3.]#za crtanje cvorova
- py.plot(cv,fun(cv),'o')#crtamo cvorove
- py.show()
- -5. Nacrtajte grafove Lagrangeovih baza za čvorove 0, 2, 3
- from numpy import *
- from scipy import interpolate as i
- import pylab as py
- def l0(x,x0,x1,x2):
- return ((x-x1)*(x-x2))/((x0-x1)*(x0-x2))
- def l1(x,x0,x1,x2):
- return ((x-x0)*(x-x2))/((x1-x0)*(x1-x2))
- def l2(x,x0,x1,x2):
- return ((x-x0)*(x-x1))/((x2-x0)*(x2-x1))
- x=linspace(-0.5,3.5,1000)
- py.plot(x,l0(x,0.,2.,3.),'g')
- py.plot(x,l1(x,0.,2.,3.),'b')
- py.plot(x,l2(x,0.,2.,3.),'r')
- py.show()
- -#primjer sa slajdova predavanja za RC funkciju 1/(1+25x^2 )
- from numpy import *
- from scipy import interpolate as i
- import pylab as py
- def fun(x):
- return 1./(25*x**2+1)
- x5=linspace(-1,1,5)
- i5=i.BarycentricInterpolator(x5,fun(x5))
- aps5=abs(fun(0.95)- i5(0.95))
- rel5=aps5/abs(fun(0.95))
- print "relativna greška na 5 cvorova", rel5
- x10=linspace(-1,1,10)
- i10=i.BarycentricInterpolator(x10,fun(x10))
- aps10=abs(fun(0.95)- i10(0.95))
- rel10=aps10/abs(fun(0.95))
- print "relativna greška na 10 cvorova", rel10
- x20=linspace(-1,1,20)
- i20=i.BarycentricInterpolator(x20,fun(x20))
- aps20=abs(fun(0.95)- i20(0.95))
- rel20=aps20/abs(fun(0.95))
- print "relativna greška na 20 cvorova", rel20
- x=linspace(-1,1,1000)
- py.plot(x,fun(x),'r')
- py.plot(x,i5(x),'g')
- py.plot(x,i10(x),'b')
- py.plot(x,i20(x),'y')
- py.show()
- -2. Formirajte Newtonov interpolacijski polinom koji zadovoljava uvjete
- # p(0) = â’1; p(2) = 2; p(6) = 3
- from numpy import *
- x=array([0,2.,6.])
- f=zeros([3,3])
- f[0,0]=-1.
- f[1,0]=2.
- f[2,0]=3.
- f[0,1]=(f[1,0]-f[0,0])/(x[1]-x[0])
- f[1,1]=(f[2,0]-f[1,0])/(x[2]-x[1])
- f[0,2]=(f[1,1]-f[0,1])/(x[2]-x[0])
- def npol(t,x):#u t racunamo vrijednost newtnovog polinoma, u x su cvorovi
- return f[0,0]+(t-x[0])*f[0,1]+(t-x[0])*(t-x[1])*f[0,2]
- print npol(0.,x)
- print npol(2.,x)
- print npol(6.,x)
- -3. Formirajte Newtonov interpolacijski polinom koji interpolira funkciju e^x
- # u čvorovima 2, 3, 5 i ocjenite globalnu pogrešku na intervalu.
- #ne radimo procjenu nego relativnu gresku u 2.4
- from numpy import *
- def fun(x):
- return exp(x)
- x=array([2.,3.,5.])
- f=zeros([3,3])
- f[0,0]=fun(x[0]) #podljeljena razlika f[x0]=vrijednosti funkcije u cvoru x0
- f[1,0]=fun(x[1])
- f[2,0]=fun(x[2])
- f[0,1]=(f[1,0]-f[0,0])/(x[1]-x[0])
- f[1,1]=(f[2,0]-f[1,0])/(x[2]-x[1])
- f[0,2]=(f[1,1]-f[0,1])/(x[2]-x[0])
- def npol(t,x):#u t racunamo vrijednost newtnovog polinoma, u x su cvorovi
- return f[0,0]+(t-x[0])*f[0,1]+(t-x[0])*(t-x[1])*f[0,2]
- #provjera da li su iste vrijednosti fije i polinoma u cvorovima interpolacije
- print npol(2.,x),fun(2.)
- print npol(3.,x),fun(3.)
- print npol(5.,x),fun(5.)
- # relativna greska u cvoru 2.4
- aps=abs(fun(2.4)-npol(2.4,x))
- rel=aps/abs(fun(2.4))
- print "relativna greska u cvoru 2.4 je:",rel
- --#1. Aproksimirajte linarnim splajnom funkciju x^2*sin(x) na intervalu â’Ď€, Ď€.
- # Koristite uniformnu mreĹľu od 10, 20 i 40 numeriÄŤkih ÄŤvorova.
- # Izračunajte apsolutnu pogrešku aproksimacije u čvoru x = 1 za sva tri slučaja.
- from scipy import interpolate as i #interp1d
- from numpy import *
- import pylab as py
- def fun(x):
- return x**2*sin(x)
- x10=linspace(-pi,pi,10)
- y10=fun(x10)
- s10lin=i.interp1d(x10,y10,kind="linear") #gotovo formiranje splinea
- aps10=abs(fun(1.)-s10lin(1.))
- print "apsolutna na 10 cvorova",aps10
- x20=linspace(-pi,pi,20)
- y20=fun(x20)
- s20lin=i.interp1d(x20,y20,kind="linear")
- aps20=abs(fun(1.)-s20lin(1.))
- print "apsolutna na 20 cvorova",aps20
- x40=linspace(-pi,pi,40)
- y40=fun(x40)
- s40lin=i.interp1d(x40,y40,kind="linear")
- aps40=abs(fun(1.)-s40lin(1.))
- print "apsolutna na 40 cvorova",aps40
- x=linspace(-pi,pi,1000)
- py.plot(x,fun(x), 'b')
- py.plot(x,s10lin(x),'y')
- py.plot(x,s20lin(x),'g')
- py.plot(x,s40lin(x),'r')
- py.show()
- --#2. KubiÄŤnim splajnom aproksimirajte funkciju 1/(1+5*x^2) na intervalu [â’1, 1]
- # upotrebom 5, 10, 20 čvorova. Izračunajte relativnu pogrešku u čvoru
- # 0.95 u sva tri sluÄŤaja.
- from numpy import *
- from scipy import interpolate as i
- import pylab as py
- def fun(x):
- return 1./(1+5*x**2)
- x5=linspace(-1,1,5)
- y5=fun(x5)
- s5k=i.interp1d(x5,y5,kind="cubic")
- aps5=abs(fun(0.95)-s5k(0.95))
- rel5=aps5/abs(fun(0.95))
- print "relativna na 5 cvorova",rel5
- x10=linspace(-1,1,10)
- y10=fun(x10)
- s10k=i.interp1d(x10,y10,kind="cubic")
- aps10=abs(fun(0.95)-s10k(0.95))
- rel10=aps10/abs(fun(0.95))
- print "relativna na 10 cvorova",rel10
- x20=linspace(-1,1,20)
- y20=fun(x20)
- s20k=i.interp1d(x20,y20,kind="cubic")
- aps20=abs(fun(0.95)-s20k(0.95))
- rel20=aps20/abs(fun(0.95))
- print "relativna na 20 cvorova",rel20
- x=linspace(-1,1,1000)
- py.plot(x,fun(x),'b')
- py.plot(x,s5k(x),'y')
- py.plot(x,s10k(x),'r')
- py.plot(x,s20k(x),'g')
- py.show()
- --#2. Konstruirajte i nacrtajte interpolacijski polinom koji zadovoljava uvjete:
- # p(1) = 1; p'(1) = 2; p(4) = 3
- from numpy import *
- from numpy import linalg as l
- import pylab as py
- from numpy.polynomial import polynomial as p
- M1=array([[1,1,1],[0,1,2],[1,4,16]])
- M2=array([1,2,3])
- ipol=l.solve(M1,M2)
- print p.polyval(1,ipol)
- print p.polyval(1,p.polyder(ipol))
- print p.polyval(4,ipol)
- x=linspace(1,4,100)
- y=p.polyval(x,ipol)
- py.plot(x,y)
- py.show()
- --
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement