У меня есть два кадра данных, соответствующих интенсивности и времени, которые я взял из файла (Pos10.csv).
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
csv_file="Pos10.csv"
df=pd.read_csv(csv_file)
df_01=df.iloc[:,0]
df_time=df_01*10
df_02=df.iloc[:,2]
df_intensity=df_02
plt.scatter(df_time,df_intensity)#scatter plot
plt.xlabel("Time (min)")
plt.ylabel("Normalized intensity")
plt.title("Kinetic exponential decay")
plt.show
Так выглядят мои данные после выполнения кода выше
Значения, соответствующие df_intensity и df_time, могут быть получены ниже.
df_intensity [2.80816437e-04 4.68942336e-03 1.86014497e-03 4.91956615e-03 1.71023544e-03 1,27739808e-03 2,69837148e-03 3,03619576e-03 2,93695988e-03 1,00000000e + 00 9,86672832e-01 9.35505121e-01 9.10113403e-01 8.63508432e-01 8.13620231e-01 7.95973130e 1017 840 944 844 944 844 044 744 844 044 744 044 744 844 044 744 044 744 844 044 738 044 738 844 929 810 910 910 940 940 910 910 940 931 937 910 910 910 940 931 937 910 910 739 831 037 0 5 5 5 5 6 6 9 9 9 9 8 8 8 9 9 13 13 8 13 9 01 13 13 0 13 8 7 39 9 9 8 7 9 59 7 6 0 8 7 959 731, 6, 10, 8, 9, 39, 2, 3, 3, 3, 3, 3, 39, 39, 8, 13, 39, 13, 13, 13,. -01 7.51126961e-01 7.23412701e-01 6.78247705e-01 6.94902443e-01 6.83302401e-01 6.61177022e-01 6.58689791e-01 6.40576075e-01 6.31106438e-01 6.36152688e-01 6.2496012e 0130568012e 5.75500561e-01 5.79641019e-01 5.79132172e-01 5.63659819e-01 5.61770115e-01 5.59135085e-01 5.48466172e-01 5.32841799e-01 5.28933594e-01 5.22816863e-01 5.11256939e-01 0168688226393 -01 4.97034536e-01 4.89032323e-01 4 .82624219e-01 4.79193191e-01 4.73355165e-01 4.61712896e-01 4.59367128e-01 4.59443139e-01 4.51200226e-01 4.44606319e-01 4.46339779e-01 4.39093449e-01 4.30048203e-01 4.225 850508e 0101 -01 4.19683332e-01 4.13034528e-01 4.14086006e-01 4.11921819e-01 4.04496019e-01 3.96624713e-01 3.98299055e-01 3.89500844e-01 3.82822480e-01 3.81116467e-01 3.85759439e-01 3.85759439e-01 3.85759439e-01 3.85759439e-01 3.85759439e-01 3.85759439e-3 3.75875968e-01 3.75905527e-01 3.75681719e-01 3.69588213e-01 3.65200720e-01 3.66254310e-01 3.66418999e-01 3,61814032e-01 3,55682521e-01 3,56459517e-01 3,54392455e-01 3,47 375 834,83,33,83 3,83 373,88 -01 3.49859275e-01 3.48366514e-01 3.40265065e-01 3.41580469e-01 3.40355856e-01 3.37516020e-01 3.33388230e-01]
df_time [20. 30. 40. 50. 60. 70 80. 90. 100. 110. 120. 130. 140. 150. 160. 170. 180. 190. 200. 210. 220. 230. 240. 250. 260. 270. 280. 290. 300. 310. 320 330. 340. 350. 360. 370. 380. 390. 400. 410. 420. 430. 440. 450. 460. 470. 480. 490. 500. 510. 520. 530. 540. 550. 560. 570 580, 590, 600, 610, 620, 630, 6. 40. 650. 660. 670. 680. 690. 700. 710. 720. 730. 740. 750. 760. 770. 780. 790. 800. 810. 820. 830. 840. 850. 860. 870. 880. 890. 900. 910.]
С этими данными ... Я хотел бы: 1) установить экспоненциальный спад от точки максимальной интенсивности (y = 1, независимо от того, в каком положении x находится y = 1 потому что это меняется от следа к следу) до конца следа. 2) нанесите на график мои данные с помощью подбора и получите коэффициенты из подбора.
Я совершенно неопытен с python ... и до сих пор мне удалось включить следующий код для подгонки моих данных, но я не удалось ограничить подгонку диапазоном (от максимальной точки до конца кривой или построить ее)
from pylab import *
from scipy.optimize import curve_fit
def func(x, a, c, d):
return a*np.exp(-c*x)+d
popt, pcov = curve_fit(func, df_time, df_intensity)