Презентация 1 / Определение Тпп сплава.pptx
- Количество слайдов: 15
Определение Тпп (Ас3) титанового сплава (“β-transus”) по данным ДСК/ДТА-исследования
Погружение в предметную область / - 1 м … о -т де Г ь ес зд Рис. 1 Участок ДСК-кривой и кривой производной ДСК (по времени) непрерывного нагрева сплава Ti-6 -4 (Тпп = 983 °С) со скоростью 50 °/мин Красивая картинка, но где Тпп ?
Погружение в предметную область / - 2 м Тпп = Тпм ± ∆Т Рис. 2 Зависимость величины температурной поправки от значения молибденового эквивалента … оказывается, всё связано!
One more thing… © Steve Jobs Рис. 3 Вид идеального эндотермического эффекта в DSC теория часто не выполняется на практике …
… но жить приходится с практикой
Код, наконец-то код! # -*- coding: utf 8 -* # Импортирует Num. Py и Mat. Plot. Lib и прочие важные штуки from __future__ import print_function import numpy as np import matplotlib. pyplot as plt from matplotlib import rc from Approximation import Approximation ### Включаем отображение кириллицы на графиках. . . font = {'family': 'Verdana', 'weight': 'normal'} rc('font', **font)
Входные данные – это важно! # Имя файла с данными по-умолчанию exp_data_fname = u"C: \Users\kruft\Yandex. Disk\Experiments. Data\STA_Data. csv” try: # Пробуем спросить у Юзера exp_data_fname = input(u"Введите путь до файла с данными DSC-эксперимента [%s]: " % exp_data_fname) except: pass
# Грузим данные try: dsc_raw_data = np. loadtxt(exp_data_fname, skiprows=1) except: # Произошло исключение (файла такого нет? ) print(u"Не удалось загрузить данные из %s" % exp_data_fname) exit(1) try: exp_data_Mo_eq = float(str(input(u"Введите значение молибденового эквивалента сплава: ")). replace(', ', '. ', 1)) print(u"t указанное значение Mo_eq: %f" % exp_data_Mo_eq) except: ### !!! TODO !!! exp_data_Mo_eq = 0. 8 print(u"Введено некорректное значение. Используется %f" % exp_data_Mo_eq) #exit(1)
l_interpol_temp_range = [750, 850] try: l_interpol_temp_range = input( u'Введите температурный интервал (через пробел) для линейой интерполяции базовой линии, гр. С (%s): n' % l_interpol_temp_range) # l_interpol_temp_range = (i for i in l_interpol_temp_range) print(u"Указанный интервал: %s" % l_interpol_temp_range) except: print(u"Введено некорректные значения. Будет использован интервал [%s]" % l_interpol_temp_range) print(u'Вы выбрали отрезок T 1. . . T 2: (%s) гр. С' % l_interpol_temp_range)
Функция для определения необходимой темп-ой поправки # Определяет необходимую темп-ую поправку в зависимости от Мо_экв сплава def DSCData. Correction(Mo_eq): return 18 # Magic number : ) ЭТО ПРОСТО ПРИМЕР
Удобство – превыше всего! # Создаем _копию_ с температурами t = dsc_raw_data[: , 0] # Определяем параметры аппроксимирующей функции базовой линии fit_dsc_base_line = Approximation(t, dsc_raw_data[: , 3], 1) ''‘ Это тоже комментарий print(u"СКО - %f, коээфициенты - %s, значение полинома в центре интервала - %f" % (fit_dsc_base_line. deviation, fit_dsc_base_line. coefficients, fit_dsc_base_line. function( l_interpol_t 2 - l_interpol_t 1) )) '''
Математика – царица всех наук. Доказано. ### Считаем интерполяционные значения # Подход с массивом и списковым выражением dsc_approx_data = [fit_dsc_base_line. function(t[i]) for i in xrange(0, t. size)] # Вычитаем расчетную базовую линию из экспериментальных данных. Векторизованый подход dsc_corrected_data = dsc_raw_data[: , 3] - dsc_approx_data # Определяем численную производную ДСК (корр. ) сигнала по температуре в каждой точке (векторизация) ddsc_data = np. diff(dsc_corrected_data) / np. diff(t) # Макс и мин значения производной ddsc_max_v, ddsc_max_i = ddsc_data. max(), ddsc_data. argmax() # Определяем бета-трансус t_transus = t[ddsc_max_i] - DSCData. Correction(exp_data_Mo_eq) print(u"Тпп исследованного сплава: %i (поправка %f гр. С)" % (t_transus, DSCData. Correction(exp_data_Mo_eq)))
В цифрах не разобраться, покажите нам график!!! # Рисуем fig, ax 1 = plt. subplots() ax 1. plot(t, dsc_raw_data[: , 3], '--', t, dsc_approx_data, 'k: ', t, dsc_corrected_data, 'k-') ax 1. set_ylabel(u'$DSC, м. В/мг$') # Создаем вторую ось со своим масштабом ax 2 = ax 1. twinx() ax 2. plot(t[1: ], ddsc_data, 'r-') ax 2. set_xlabel(u'Температура, гр. С') ax 2. set_ylabel(u'Частная производная (корр. ) ДСК по температуре') ax 2. axvline(x=t_transus, color='g', ls='dashed') ax 2. annotate( u'$Т_{пп} сплава$', xy=(t_transus, ddsc_max_v), xytext=(t_transus + 5, ddsc_max_v * 1. 02))
# Украшаем plt. title(u'ДСК-кривые сплава ВТ 18 Уn(скорость нагрева 50 гр/мин)') plt. legend([u"$Т_{пп} = T_{max ddsc} (%i) - CONST(%i deg. C) = %i$" % (t[ddsc_data. argmax()], DSCData. Correction(exp_data_Mo_eq), t_transus)], loc='upper left') # положение легенды # Показываем результат plt. show()
Просто, не правда ли ? Спасибо, это всё! Вопросы, комментарии ? !? mailto: d. v. gadeev@urfu. ru
Презентация 1 / Определение Тпп сплава.pptx