from math import log
from math import sin,cos
import random
#Q1
def bifection(f,a,b,error,n):
"""f stands for the function we want to approximate to, while a and b are the
left and right number of the intervalwhere the f effects in, and n means for the
time we have tried to make a approximation"""
"""bifection(f,0,1,10**-6,20)"""
FA f(a)
for i in range(n):
p a + (b-a)/2
FP f(p)
if FP 0 or (b - a)/2 < error:
return p
if FA * FP > 0:
a p
else:
b p
def iteration(f,p0,n,error):
"""iteration(f,0.5,22,10**(-6))"""
p 0
for i in range(n):
p (2.71828)**(-p0)
if abs(p - p0) < error:
return p
else:
p0 p
def fastitertion(f,p0,n,error):
"""fastitertion(f,0.5,20,10**-6)"""
p 0
q0 p0
for i in range(n):
p (2.71828)**(-p0)
q p + g(p)/(1 - g(p))*(p - q0)
if abs(q - q0) < error:
return q
else:
p0 p
q0 q
def newton(f,g,p0,n,error):
"""newton(f,0.5,3,10**-6)"""
for i in range(n):
p p0 - f(p0)/g(p0)
if abs(p - p0) < error:
return p
else:
p0 p
def secant(f,p0,p1,n,error):
"""secont(f,0.5,1,6,10**-6)"""
for i in range(n):
p p0 - f(p0)*(p1 - p0)/(f(p1) - f(p0))
if abs(p - p0) < error:
return p
else:
p0 p
def fastsecant(f,p0,p1,n,error):
"""secont(f,0.5,1,4,10**-6)"""
for i in range(n):
p p0 - f(p0)*(p1 - p0)/(f(p1) - f(p0))
if abs(p - p0) < error:
return p
else:
p1 p0
p0 p
def f(x):
return x - pow(2.71828, - x)
def g(x):
return 1 + pow(2.71828, - x)
#Q2
def q2_eqp(x):
retu