Advertisement
Vitaliy_Novichikhin

2.3.7partBponimanie

Sep 10th, 2020
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.02 KB | None | 0 0
  1. # Понимание решение второй части задачи из начала урока
  2. # Файл lambda_exp.txt с экспериментально полученными значениями находится в этой же папке
  3. # 1. Напишем функцию формулы расчета теплопроводсти
  4. def compute_lambda(t):
  5.     b = 33 # константа, выведенная экспериментальным путём
  6.     l_0 = 884 # теплопроводность кремния при 100 К
  7.     t_0 = 100 # температура равная 100 К
  8.     y = b * (l_0 / (t - t_0))
  9.     return y
  10.  
  11. # 2. Откроем файл для чтения, кодировку можно не указывать, т.к. там только числа
  12. f = open('lambda_exp.txt', 'r')
  13.  
  14. # 3. Cоздаем пустые списки для значений температур и теплопроводности:
  15.  
  16. t_list = [] # пустой спискок значений температур
  17. lambda_exp_list = [] # пустой спискок значений теплопроводности
  18.  
  19. # 5. Последовательно считываем строки файла.
  20. # Из каждой строки (числа в ней разделены пробелом) создать список t_lambda_list, состоящий из двух элементов с помощью функции split()
  21. # (Исходная строка 200 264, t_lambda_list = ['200', '264'])
  22. # Первый элемент списка t_lambda_list добавить к списку температур, второй - к списку тепловодности
  23. # преобразовав строковое значение к вещественному float
  24. for line in f:
  25.     t_lambda_list = line.split() # разобьём каждую строку на строковые значения списка
  26.     t_list.append(float(t_lambda_list[0])) #создадим список температур из первого столбика, т.е. первых значений каждой строки
  27.     lambda_exp_list.append(float(t_lambda_list[1])) #создадим список теплопроводности из второго  столбика, т.е. вторых значений каждой строки
  28.  
  29. f.close() # 5. Закроем файл
  30. #print(t_list, 'temp') - для предварительного теста программы, работает!
  31. #print(lambda_list, 'thermal conductivity')
  32.  
  33. # 6. Cформировать список со значениями теплопроводности, посчитанными с помощью функции compute_lambda(t) для температур из списка t_list
  34. lambda_list = [compute_lambda(t) for t in t_list] # cписок посчитанных по формул значений теплопроводности
  35. #print(lambda_list, 'thermal conductivity')
  36.  
  37. # 7. Найдём отностельную погрешность вычисления теплопроводности для каждого значения температуры.
  38. # Для этого формула вычисления погрешности применяется к соответсвущим элементам списков lambda_list и lambda_exp_list.
  39. # В резултате создаем новый список error_list.
  40. error_list = [abs((lambda_exp_list[i] - lambda_list[i]) / lambda_exp_list[i]) for i in range(len(t_list))] # abs - модуль значения, т.к. процент не может быть отрицательным
  41. #print(error_list)
  42.  
  43. # 8. Сформировать таблицу вывода значений температур, экспериментально полученной теплопроводности,
  44. # расчитанной по формуле теплопроводности и погрешности вычислений...
  45. print('-' * 45)
  46. print('| %1s | | %7s | %7s | %7s |%8s |' % ('№', 't', 'L(t)', 'Exp(t)', 'error'))
  47. print('-' * 45)
  48. for i in range(len(t_list)):
  49.     print('|%2d | %7d | %7.2f | %7d |%7.2f%% |' % (i+1, t_list[i], lambda_list[i], lambda_exp_list[i], error_list[i] * 100)) # |%7.2f%% | - почему без ошибки обязательно нужно два знака процентов в конце форматного вывода
  50.     #i+1 не добавляет значений, а Прибавляет цифру к текущему значению, чтобы был ровный счёт
  51.     # если в форматном выводе мы пишем %8d или %8s, а число или строка состоит из меньшего количества знаков, то остальные знаки будут пробелами в начале или конце
  52. print('-' * 45)
  53.  
  54. # 9. Найдём максимальную погрешность:
  55. max_error = max(error_list)
  56. # Найдём температуру, которой эта погрешность соответсвует
  57. # В Питоне реализованы различные методы работы со списками, в частности метод index(x),
  58. # который находит первый встретившийся элемент x и возвращает индекс этого элемента.
  59. # Например [5, 3, 6, 3].index(3) вернёт 1.
  60. # В нашем случае индекс максимального значения в списке погрешностей error_list можно найти с помощью оператора:
  61. index_max_error = error_list.index(max_error)
  62. #print(index_max_error+1) - testok
  63. # Вывести значение максимальной погрешности и соответсвующей ей температуры:
  64. print('Максимальная погрешность - %5.2f, при t = %3d, строка № %1d' % (max_error * 100, t_list[index_max_error], index_max_error+1)) #выведется один раз, хоть и второе в квадратных скобках [там просто число], т.к. это не в цикле for
  65. # Аналогично вычислим минимальную погрешность
  66. min_error = min(error_list) #значение минимальной погрешности из списка
  67. #print(min_error*100)
  68. index_min_error = error_list.index(min_error) # индекс(номер по счету первый попавшийся) этого минимального числа в списке error_list
  69. #print(index_min_error+1) - testok
  70. print('Минимальная погрешность - %5.2f, при t = %3d в строке номер %1d' % (min_error * 100, t_list[index_min_error], index_min_error+1))
  71.  
  72. # 11. Найдём среднюю погрешность:
  73. avg_error = sum(error_list) / len(error_list) # cумму каждого элемента разделим на количество 15
  74. print('Cредняя погрешность = %5.2f%%' % (avg_error * 100))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement