求若干时间点的气温值问题——分段线性和分段三次插值

分别用分段线性和分段三次插值,求气温对时间的函数(Python程序,含可视化结果)

问题描述:
在凌晨1点至中午12点,每隔1小时测量一次温度为:[5,8,9,15,25,29,31, 30,22,25,27,24];预测时间为 3.2,5.6,7.8,11.5时的温度。

测试用例:
温度:[5,8,9,15,25,29,31, 30,22,25,27,24];
时间: 3.2,5.6,7.8,11.5。

1、分段线性插值算法实现:

import numpy as np
#import matplotlib
#matplotlib.use('Qt5Agg')
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d
X = np.arange(1, 13)
Y = np.array([5, 8, 9, 15, 25, 29, 31, 30, 22, 25, 27, 24])
f = interp1d(X, Y, 'linear')
print('预测值:')
PX, PY = [], []
for t in [3.2, 5.6, 7.8, 11.5]:
    print('时间:%4.1f  温度:%4.1f' % (t, f(t)))
    PX.append(t)
    PY.append(f(t))
    plt.plot([t, t], [0, f(t)], '--')
plt.scatter(PX, PY, marker='.', color='r')
plt.plot([1, 12], [0, 0], 'k')
plt.show()

测试结果:

在这里插入图片描述
在这里插入图片描述
2、分段三次插值算法实现:

import numpy as np
#import matplotlib
#matplotlib.use('Qt5Agg')
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d

X = np.arange(1, 13)
Y = np.array([5, 8, 9, 15, 25, 29, 31, 30, 22, 25, 27, 24])
f = interp1d(X, Y, 'cubic')

t = np.linspace(1, 12, 200)
plt.plot(t, f(t))
plt.title('cubic')

print('预测值:')
PX, PY = [], []
for t in [3.2, 5.6, 7.8, 11.5]:
    print('时间:%4.1f  温度:%4.1f' % (t, f(t)))
    PX.append(t)
    PY.append(f(t))
    plt.plot([t, t], [0, f(t)], '--')
plt.scatter(PX, PY, marker='.', color='r')
plt.plot([1, 12], [0, 0], 'k')
plt.show()

测试结果:
在这里插入图片描述
在这里插入图片描述

两种算法测试结果分析:
该问题分别使用了分段线性和分段三次插值,生成了一个连续的温度曲线,并且可以根据该曲线预测任意时间点的温度值。与线性插值相比,三次插值更加平滑,更能反映数据的变化趋势。预测值部分,程序预测了4个时间点的温度值,并将预测值标记在图中,方便用户进行查看和比较。可以看出,三次插值所得到的预测值相比线性插值更加平滑,更能反映真实的温度变化趋势。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值