Advertisement
miklis

aproksimacijos konvergavimo pavyzdys

Jan 8th, 2015
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. def relaksacijos_metodas(function,interval,init,precision,bound=None,N=5000,lower=None,upper=None):
  2. a,b=interval[0],interval[1]
  3. def f(x): return function(x)+x
  4. def g(x,w): return (1-w)*x+w*f(x)
  5. dx=float(b-a)/N
  6. gx=[(a+i*dx,f(a+i*dx)) for i in range(N)]
  7. fx=[(a+i*dx,a+i*dx) for i in range(N)]
  8. if bound==None:
  9. diff=[(gx[i-1][1]-gx[i][1]) for i in range(1,N)]
  10. m,M=min(diff)/dx,max(diff)/dx
  11. else: m,M=bound[0],bound[1]
  12. w=2/(2+m+M)
  13. print 'pasirinkom: m =',m,', M =',M,', w =',w
  14. print '-'*100
  15. x=g(init,w)
  16. array=[(init,x),(x,x)]
  17. t=time()
  18. while abs(array[-2][1]-array[-2][0])>precision:
  19. x=g(array[-1][1],w)
  20. array+=[(array[-1][1],x)]
  21. if time()-t>0.3:
  22. print "nekonverguoja (per ilgas iteracijos procesas?), bet x reiksmes kinta intervale (", min(array)[0],max(array)[0],')'
  23. break
  24. if not(a<x<b):
  25. print "nekonverguoja, gautas x =",x,"neprikl. intervalui",interval
  26. break
  27. array+=[(x,x)]
  28. #print 'artejimas:', [n[0] for n in array[::2]]
  29. print 'galiausiai,',x
  30. graph([[("blue",5)]+fx,[("purple",5)]+gx,[("yellow",1)]+array],rounding=3,lower=lower, upper=upper)
  31.  
  32. relaksacijos_metodas(lambda x: 2*cos(x)-x,(0,3.84),0.1,0.001,N=5000)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement