import math import operator E_f собс-но сюда меня должны положиться ре

 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
import math
import operator
E_f = [] # собс-но, сюда у меня должны положиться решения уравнения
K = [8.62*10**(-5) for i in range(0, 901)]
T = [i for i in range(0, 901)]
N_c = [6.2*10**15*T[i]**(3/2) for i in range(0, 901)]
N_v = [3.5*10**(15)*T[i]**(3/2) for i in range(0, 901)]
E_g = [1.17-4.73*10**(-4)*T[i]**2/(T[i]+636) for i in range(0, 901)]
E_v = [-E_g[i]/2 for i in range(0, 901)]
E_c = [E_g[i]/2 for i in range(0, 901)]
# М-ды, дабы использовать map во всём уравнении мне пришлось тупо сгенерить списки из одинаковых элементов, чтобы реализовать операцию сложения числа со списком.
E_a = [0.045 for i in range(0, 901)]
E_d = [0.045 for i in range(0, 901)]
g = [2 for i in range(0, 901)]
l = [1 for i in range(0, 901)]
N_a = [4*10**15 for i in range(0, 901)]
N_d = [3*10**15 for i in range(0, 901)]
# Здесь во мне умер лиспер.
def foo(list):
global N_c, N_v, E_g, E_v, E_c, T, E_f
list(map(operator.sub, list(map(operator.add, (list(map(operator.mul, N_c, list(map(lambda x: math.exp(x), -list(map(operator.floordiv, list(map(operator.sub, E_c, E_f)), list(map(operator.mul, K, T))))))))), list(map(operator.floordiv, N_a, list(map(operator.add, l, list(map(operator.mul, g, list(map(lambda x: math.exp(x), list(map(operator.floordiv, list(map(operator.sub, E_a, E_f)), list(map(operator.mul, K, T))))))))))))))), list(map(operator.add, list(map(operator.mul, N_v, list(map(lambda x: math.exp(x), list(map(operator.floordiv, list(map(operator.sub, E_v, E_f)), list(map(operator.mul, K, T)))))))), list(map(operator.floordiv, N_d, list(map(operator.add, l, list(map(operator.mul, g, list(map(lambda x: math.exp(x), list(map(operator.floordiv, list(map(operator.sub, E_f, E_d)), list(map(operator.mul, K, T)))))))))))))))
# функция, реализующая метод бисекций.
def half_divide_method(a, b, f):
x = (a + b) / 2
while math.fabs(f(x)) >= e:
x = (a + b) / 2
a, b = (a, x) if f(a) * f(x) < 0 else (x, b) # вот здесь берутся значения функции в точках a и х. Как сие сделать в моей функции-массиве?
return (a + b) / 2
#print 'root of the equation half_divide_method #%s' % half_divide_method(5, 900, foo)