asdas
Ruby
code posted
by
asfd
created at 23 Nov 12:16
Edit
|
Back
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
trueroot=0.42630275100686274567 Restults=Hash.new() def f(x) x**(0.5) - Math.exp(-x) end def f1(x) 1/(2*Math.sqrt(x)) + Math.exp(x) end def bisection(inta, intb, epsilon ) a, b = inta, intb c = (inta+intb)/2 eps = epsilon i=0 while(b - a > eps) do c = (a+b)/2 curval = f(c)*f(a) if (curval<=0) b=c else a=c end Restults[[1,i]]=c i+=1 end return c end def newton(init, inta, intb, epsilon) x = init d = f(x)/f1(x) i=0 while( d > epsilon ) do x = x-d d=f(x)/f1(x) Restults[[2,i]] = x i+=1 end return x end def newton_simple(init, inta, intb, epsilon) x = init d = f(x)/((f(x+f(x))-f(x))/f(x)) i=0; while(d.abs > epsilon ) do x = x-d d = f(x)/((f(x+f(x))-f(x))/f(x)) Restults[[3,i]] = x i+=1 end return x end def secant(init1, init2, inta, intb, epsilon) x = init1 x1 = init2 x0 = init1 temp=epsilon+1; i=0 while( temp.abs > epsilon ) do temp = f(x1)*( (x1-x0)/(f(x1)-f(x0)) ) x = x1-temp x0 = x1 x1 = x Restults[[4,i]] = x i+=1 end return x end e=0.0001 p bisection(0,1.2,e) p newton(0.6,0,1.2,e) p newton_simple(0.6,0,1.2,e) p secant(0.6, 1, 0,1.2,e) Restults.sort.each {|x,y| puts "method nr #{x[0]} #{x[1]}. -->#{y} \t \t \t #{(trueroot-y).abs}" } |
1.31 KB in 5 ms with coderay