news 2026/4/21 0:37:41

9种缺失值插值算法Matlab代码 含三次样条插值、线性插值、Hermite插值等 使用该程序可以

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
9种缺失值插值算法Matlab代码 含三次样条插值、线性插值、Hermite插值等 使用该程序可以

9种缺失值插值算法Matlab代码 含三次样条插值、线性插值、Hermite插值等 使用该程序可以:(1)实现缺失数据插值;(2)对定义域外的样本点进行插值;(3)区分内插和外插,均可以选择不同的算法 内插策略包括: 1:线性插值 2:最近邻点插值 3:下一个邻点插值 4:上一个邻点插值 5:保形分段三次插值 6:三次卷积插值 7:修正Akima三次Hermite插值 8:三次样条插值 9:插入固定值 外插策略包括: 1:使用与内插所用相同的方法来计算落在定义域范围外的点 2:为落在定义域范围外的点返回一个特定常量值 程序纯手写,可修改。

日常做数据分析总免不了遇到缺失值,就像炒菜突然发现盐罐子空了。今天咱们来盘一盘手写实现的九宫格插值工具箱,覆盖从基础线性到三次样条的各种骚操作,顺便解决外插这个让人头秃的问题。

先看核心函数怎么玩转内外插:

function yi = myinterp1(x,y,xi,method,extrap_method,extrap_val) % 输入检查略过...直接上干货 valid_indices = ~isnan(y); xv = x(valid_indices); yv = y(valid_indices); % 内插核心 switch method case 1 % 线性 yi = interp1_linear(xv,yv,xi); case 8 % 三次样条 pp = spline(xv,yv); yi = ppval(pp,xi); % 其他case处理... end % 外拓处理 out_of_range = xi < min(xv) | xi > max(xv); if any(out_of_range) switch extrap_method case 1 % 同内插 yi(out_of_range) = interp1_extend(xv,yv,xi(out_of_range),method); case 2 % 固定值 yi(out_of_range) = extrap_val; end end end

这个函数骨架妙在把内外插策略解耦,比如可以内插用三次样条保持曲线顺滑,外插直接给固定值防止飞上天。重点看几个特色实现:

保形分段三次插值(PCHIP)的微分计算很有意思:

function slopes = pchip_slopes(x,y) h = diff(x); delta = diff(y)./h; slopes = zeros(size(y)); % 端点处理 slopes(1) = delta(1); slopes(end) = delta(end); % 中间点斜率调和 for k = 2:length(x)-1 w1 = 2*h(k)+h(k-1); w2 = h(k)+2*h(k-1); slopes(k) = (w1+w2)/(w1/delta(k-1) + w2/delta(k)); end end

这种加权调和算法既避免三次样条的过度震荡,又比单纯的平均值更符合数据趋势。实际测试时发现,对股价这类需要保持单调性的数据效果拔群。

外插的智能延伸策略有点讲究,比如线性外插不是简单延直线:

function ye = linear_extend(x,y,xe) dx = x(end)-x(end-1); dy = y(end)-y(end-1); k = dy/dx; if isinf(k) % 处理垂直情况 ye = y(end)*ones(size(xe)); else ye = y(end) + k*(xe - x(end)); end end

这里特意处理了斜率无穷大的极端情况,防止出现NaN污染数据。曾经在电梯运行数据中遇到过这种垂直跳变,这种防御性编程能救命。

实战演示:处理带缺口的心电信号

t = 0:0.1:10; ecg = 2*sin(t) + 0.5*cos(3*t); ecg(35:45) = NaN; % 模拟信号丢失 % 三次样条内插+固定外推 filled1 = myinterp1(t,ecg,t,8,2,0); % Akima外插延续趋势 filled2 = myinterp1(t,ecg,t,7,1,0); subplot(2,1,1); plot(t, filled1); % 缺口处平滑过渡 subplot(2,1,2); plot(t, filled2); % 外沿保持波形走势

对比发现三次样条在缺口内部更平滑,但Akima在外插时延续波形更自然。这工具箱妙在能像乐高一样组合不同策略,比如用保形插值处理陡峭边缘,卷积插值处理周期性信号。

最后给个忠告:别迷信三次样条!曾有个项目用样条插值温度数据,结果外插时预测出-50℃的极端值,实际传感器最高才测到40℃。这种时候设置extrap_method=2加个合理阈值,比算法自high靠谱多了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 20:52:48

【LLM学习】九、MCP深度解析

本期对MCP进行深入解析&#xff0c;MCP的最小应用回顾往期内容&#xff1a; 【LLM学习】【Ollama】四、MCP【LLM学习】【Ollama】五、MCP进阶 一、MCP 是什么&#xff1f;—— 从行业痛点看协议价值​ 在深入技术细节前&#xff0c;我们先明确 MCP 的核心定位&#xff1a;MC…

作者头像 李华
网站建设 2026/4/20 19:46:39

基于VUE的首选旅游网站[VUE]-计算机毕业设计源码+LW文档

摘要&#xff1a;随着互联网技术的飞速发展和人们旅游需求的日益增长&#xff0c;旅游网站在旅游行业中扮演着越来越重要的角色。本文旨在设计一个基于VUE框架的首选旅游网站&#xff0c;详细阐述其需求分析、技术选型、系统架构设计、功能模块设计以及具体实现过程。该网站实现…

作者头像 李华
网站建设 2026/4/19 8:17:25

测试可编程运放 MCP6S21

使用MCP6S22检测导航信号特性测试 **AD\Test\2025\December\TestMCP6S21STG8SOP8.SchDoc *** 增益可编程放大器MCP6S2101 MCP6S21测试特性 一、背景简介 之前测试了增益可编程运放 MCP6S22&#xff0c;  现在购买的 MCP6S21 芯片到货了&#xff0c; 它内部运放具有信号参考地…

作者头像 李华
网站建设 2026/4/16 13:59:57

月周日虚拟成交量通达信指标源码贴图

{}WD:IF(WEEKDAY<5,WEEKDAY,1);{返回周几} WDM:(WEEKDAY-1)*240FROMOPEN;{计算本周的开盘分钟数} CD:DAY; TWD:WEEKDAY; CMD:30; YINZI:7-(CD MOD 7)-TWD; CMW:((CMDYINZI)-1)*5TWD; V1:DAY;{日期} V2:WEEKDAY; V3:V2-(V1-INTPART(V1/7)*7); {取得当日和7以及周几的关连因子…

作者头像 李华
网站建设 2026/4/20 13:00:03

通达信涨停板主图 源码

{}VAR1:EMA(CLOSE,12)-EMA(CLOSE,26); JL01:MA(C,3); LJL07:(3*CLOH)/6; 牛线:(20*LJL0719*REF(LJL07,1)18*REF(LJL07,2)17*REF(LJL07,3)16*REF(LJL07,4)15*REF(LJL07,5)14*REF(LJL07,6)13*REF(LJL07,7)12*REF(LJL07,8)11*REF(LJL07,9)10*REF(LJL07,10)9*REF(LJL07,11)8*REF(LJ…

作者头像 李华
网站建设 2026/4/20 13:26:30

天机学堂-排行榜功能-day08(六)

接口 一 实时排行榜 1.查询赛季列表功能参数说明请求方式GET请求路径/boards/seasons/list请求参数无返回值[ { "id": "110", // 赛季id "name": "第一赛季", // 赛季名称 "beginTime": "2023-05-01", …

作者头像 李华