Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def relaksacijos_metodas(function,interval,init,precision,bound=None,N=5000,lower=None,upper=None):
- a,b=interval[0],interval[1]
- def f(x): return function(x)+x
- def g(x,w): return (1-w)*x+w*f(x)
- dx=float(b-a)/N
- gx=[(a+i*dx,f(a+i*dx)) for i in range(N)]
- fx=[(a+i*dx,a+i*dx) for i in range(N)]
- if bound==None:
- diff=[(gx[i-1][1]-gx[i][1]) for i in range(1,N)]
- m,M=min(diff)/dx,max(diff)/dx
- else: m,M=bound[0],bound[1]
- w=2/(2+m+M)
- print 'pasirinkom: m =',m,', M =',M,', w =',w
- print '-'*100
- x=g(init,w)
- array=[(init,x),(x,x)]
- t=time()
- while abs(array[-2][1]-array[-2][0])>precision:
- x=g(array[-1][1],w)
- array+=[(array[-1][1],x)]
- if time()-t>0.3:
- print "nekonverguoja (per ilgas iteracijos procesas?), bet x reiksmes kinta intervale (", min(array)[0],max(array)[0],')'
- break
- if not(a<x<b):
- print "nekonverguoja, gautas x =",x,"neprikl. intervalui",interval
- break
- array+=[(x,x)]
- #print 'artejimas:', [n[0] for n in array[::2]]
- print 'galiausiai,',x
- graph([[("blue",5)]+fx,[("purple",5)]+gx,[("yellow",1)]+array],rounding=3,lower=lower, upper=upper)
- 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