Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function solve(x,solver)
- local result=solver[0]
- for i=1,#solver//2 do
- result=result*(x-solver[i*2-1])+solver[i*2]
- end
- return result
- end
- function f(x)
- return x*x-2*math.abs(x)+1
- end
- function getStart(xs)
- local t={}
- for i=1,#xs do
- t[i]=f(xs[i])
- end
- return t
- end
- function table.print(t,n)
- local n=n or #t
- for i=1,n do
- print(t[i])
- end
- end
- function getSolver(xs)
- local t=getStart(xs)
- local n=#t
- local solver={}
- solver[n*2-2]=t[1]
- for i=1,n-1 do
- for j=1,n-i do
- t[j]=(t[j+1]-t[j])/(xs[j+i]-xs[j])
- end
- solver[(n-i)*2-2]=t[1]
- solver[(n-i)*2-1]=xs[i]
- end
- return solver
- end
- function getR(solver,xs)
- local max=0
- for i=1,#xs-1 do
- local x=(xs[i]+xs[i+1])/2
- local err=solve(x,solver)-f(x)
- if math.abs(err)>math.abs(max) then
- max=err
- print(x)
- end
- end
- return max
- end
- local xs1={}
- for i=0,10 do
- xs1[i+1]=i*0.4-2
- end
- local xs2={}
- for i=0,25 do
- xs2[i+1]=i*0.16-2
- end
- local xs3={}
- for i=0,50 do
- xs3[i+1]=i*0.8-2
- end
- local solver1=getSolver(xs1)
- print(getR(solver1,xs1))
- local solver2=getSolver(xs2)
- print(getR(solver2,xs2))
- local solver3=getSolver(xs3)
- print(getR(solver3,xs3))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement