impressive_i

Search x(y) by y(x) bisection

Jan 15th, 2021
501
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import math
  2.  
  3. # Функция, корень которой будем искать
  4. def f(T, P):
  5.     return 22.82 - 2816.91/T - 3.99*math.log10(T) + 0.0000252*T - math.log10(P * 1000000)
  6.  
  7. '''
  8. Функция бисекции, которая возвращает корень на интервале [T_start ; T_end]
  9. eps - погрешность. P - давление (параметр) для текущего уравнения,
  10. которое нужно решить и найти температуру.
  11. '''
  12. def bisection(T_start, T_end, P):
  13.    
  14.     eps = 0.1 # Погрешность метода
  15.     count = 0 # Количество итераций
  16.     Tm = ( T_start + T_end ) / 2 # Среднее значение на интервале
  17.     # Уменьшаем интервал, пока не достигнем заданной погрешности
  18.     while( math.fabs(f(Tm, P)) >= eps ):
  19.        
  20.         Tm = ( T_start + T_end ) / 2
  21.         # Если значения на концах первой половины интервала имеют разные знаки
  22.         if( f(T_start, P) * f(Tm, P) < 0 ):
  23.             T_end = Tm # то корень в 1-й половине и смещаем правую границу в середину
  24.         else:
  25.             T_start = Tm #иначе корень во 2-й половине, смещаем левую границу в середину
  26.  
  27.         count += 1
  28.        
  29.     return round(( T_start + T_end ) / 2, 2)
  30.  
  31.  
  32. # Табуляция, нахождения обратных значений x = g(y)
  33. def table_solution(P_start, P_end):
  34.     T_start = 273
  35.     T_end = 1000
  36.    
  37.     dP = 0.1
  38.     P = P_start
  39.     while(P <= P_end):
  40.         T = bisection(T_start, T_end, P)
  41.         print('Давление P = ', round(P, 2), 'МПа -> Температура T = ', T,'K' )
  42.         P = P + dP
  43.  
  44. #Вызов функции
  45. table_solution(0.8, 1.5)
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×