曲线拟合:年月份的温度函数

我们有阿拉斯加州每个月一年中的最高和最低温度。我们想找到一个函数来描述这种年度变化。

为此,我们将拟合一个周期函数。

数据

import numpy as np
temp_max = np.array([17, 19, 21, 28, 33, 38, 37, 37, 31, 23, 19, 18])
temp_min = np.array([-62, -59, -56, -46, -32, -18, -9, -13, -25, -46, -52, -58])
import matplotlib.pyplot as plt
months = np.arange(12)
plt.plot(months, temp_max, "ro")
plt.plot(months, temp_min, "bo")
plt.xlabel("Month")
plt.ylabel("Min and max temperature")
plot curvefit temperature data
Text(35.472222222222214, 0.5, 'Min and max temperature')

拟合到周期函数

import scipy as sp
def yearly_temps(times, avg, ampl, time_offset):
return avg + ampl * np.cos((times + time_offset) * 2 * np.pi / times.max())
res_max, cov_max = sp.optimize.curve_fit(yearly_temps, months, temp_max, [20, 10, 0])
res_min, cov_min = sp.optimize.curve_fit(yearly_temps, months, temp_min, [-40, 20, 0])

绘制拟合曲线

days = np.linspace(0, 12, num=365)
plt.figure()
plt.plot(months, temp_max, "ro")
plt.plot(days, yearly_temps(days, *res_max), "r-")
plt.plot(months, temp_min, "bo")
plt.plot(days, yearly_temps(days, *res_min), "b-")
plt.xlabel("Month")
plt.ylabel(r"Temperature ($^\circ$C)")
plt.show()
plot curvefit temperature data

脚本总运行时间:(0 分钟 0.106 秒)

由 Sphinx-Gallery 生成的图库