Одномерный линейный эквивалент для экспоненциальных функций?

#python #numpy #spline #exponential

Вопрос:

В настоящее время у меня есть набор данных, из которых я хочу сделать функцию, определенную для всех значений возможных значений temp_vp (в данном случае мои данные x).

 temp_vp = [280.0,290.0,300.0,310.0,320.0,330.0,340.0,350.0,360.0,370.0,380.0,390.0,400.0,410.0,420.0,430.0,440.0,450.0,460.0,470.0,480.0,490.0,500.0] vp_in = [3.88e-52,5.16e-50,4.95e-48,3.53e-46,1.93e-44,8.26e-43,2.83e-41,7.93e-40,1.85e-38,3.62e-37,6.07e-36,8.79e-35,1.11e-33,1.25e-32,1.24e-31,1.11e-30,9.03e-30,6.66e-29,4.51e-28,2.81e-27,1.62e-26,8.72e-26,4.38e-25]  

Я использовал UnivariateSpline это раньше для интерполяции между точками данных и получения постоянных значений за пределами заданного диапазона данных. Однако, когда я пытаюсь использовать его на этот раз для этих данных, я получаю следующее: введите описание изображения здесь

Кто-нибудь знает, как я могу получить желаемую интерполированную функцию для этих данных в соответствии с требованиями, описанными ранее?

Мой текущий код приведен ниже:

 import numpy as np from scipy.interpolate import interp1d from scipy import interp from scipy.interpolate import UnivariateSpline import matplotlib.pyplot as plt  temp_vp = [280.0,290.0,300.0,310.0,320.0,330.0,340.0,350.0,360.0,370.0,380.0,390.0,400.0,410.0,420.0,430.0,440.0,450.0,460.0,470.0,480.0,490.0,500.0] vp_in = [3.88e-52,5.16e-50,4.95e-48,3.53e-46,1.93e-44,8.26e-43,2.83e-41,7.93e-40,1.85e-38,3.62e-37,6.07e-36,8.79e-35,1.11e-33,1.25e-32,1.24e-31,1.11e-30,9.03e-30,6.66e-29,4.51e-28,2.81e-27,1.62e-26,8.72e-26,4.38e-25]  tempspace = np.linspace(200,10000,10000) vp_f = UnivariateSpline(temp_vp, vp_in, k = 1, ext = 3) fig=plt.figure(figsize=(4.5,3.6)) ax=fig.add_subplot(1,1,1) ax.minorticks_on() # enable minor ticks ax.set_axisbelow(True) # put grid behind curves ax.grid(b=True, which='major', color='black', linestyle='-', zorder=1, linewidth=0.4, alpha = 0.12) # turn on major grid ax.grid(b=True, which='minor', color='black', linestyle='-', zorder=1, linewidth=0.4, alpha = 0.12) # turn on minor grid ax.scatter(temp_vp,vp_in, color = 'black', label = 'data', s= 5, zorder = 3) ax.plot(tempspace, vp_f(tempspace), color = 'blue', label = 'Fit', zorder = 2) ax.set_yscale('log') ax.set_xscale('log') ax.set_xlabel('Temperature [K]') ax.set_ylabel('Vapor Pressure [Pa]') ax.legend(labelspacing=0.25, fontsize = 8) plt.xlim([250,600]) #plt.ylim([1e-10,1e5]) plt.savefig('Al_vpdata.pdf', bbox_inches='tight', format='pdf') plt.savefig('Al_vpdata.png', dpi=300, bbox_inches='tight', format='png')   

Ответ №1:

Вы действительно измеряете давление 1e-50 Па?

Вероятно, у вас возникают ошибки недостаточного потока.

Если вы умножите vp_in на 1e52, вы получите:

введите описание изображения здесь

Комментарии:

1. Да, я действительно измеряю значения 1e-50, поэтому умножение данных на самом деле не вариант, если я не сдвину все обратно после того, как будет найдено соответствие