Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- # Функция, корень которой будем искать
- def f(T, P):
- return 22.82 - 2816.91/T - 3.99*math.log10(T) + 0.0000252*T - math.log10(P * 1000000)
- '''
- Функция бисекции, которая возвращает корень на интервале [T_start ; T_end]
- eps - погрешность. P - давление (параметр) для текущего уравнения,
- которое нужно решить и найти температуру.
- '''
- def bisection(T_start, T_end, P):
- eps = 0.1 # Погрешность метода
- count = 0 # Количество итераций
- Tm = ( T_start + T_end ) / 2 # Среднее значение на интервале
- # Уменьшаем интервал, пока не достигнем заданной погрешности
- while( math.fabs(f(Tm, P)) >= eps ):
- Tm = ( T_start + T_end ) / 2
- # Если значения на концах первой половины интервала имеют разные знаки
- if( f(T_start, P) * f(Tm, P) < 0 ):
- T_end = Tm # то корень в 1-й половине и смещаем правую границу в середину
- else:
- T_start = Tm #иначе корень во 2-й половине, смещаем левую границу в середину
- count += 1
- return round(( T_start + T_end ) / 2, 2)
- # Табуляция, нахождения обратных значений x = g(y)
- def table_solution(P_start, P_end):
- T_start = 273
- T_end = 1000
- dP = 0.1
- P = P_start
- while(P <= P_end):
- T = bisection(T_start, T_end, P)
- print('Давление P = ', round(P, 2), 'МПа -> Температура T = ', T,'K' )
- P = P + dP
- #Вызов функции
- table_solution(0.8, 1.5)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement