MATLAB 线性插补缺省值
任务描述:站点降水有缺省值,所以需要线性插补空白数据
写成了函数,可以直接调用
第一种
%% 本函数用于线性插补缺省值
function A = default_linear_interpo(A,B)
%A是时间序列
%B是缺省值,站点的缺省值是32700
if A(1) == BA(1) = 0; %如果首位缺省,则赋值零
end
i = 2;
while i<=length(A)if A(i) == B %发现缺省值则向后搜索找到非缺省值for j = i+1:length(A)if A(j) == B continue %仍为缺省值则跳过elsebreak %找到非缺省值就结束循环,j记录了非缺省值的位置endendslope = (A(j)-A(i-1))/(j-i+1); %线性插补的斜率for k = i:j-1A(k) = A(i-1)+(k-i+1)*slope; %根据斜率插补i到j-1endi = j-1; %因为i到j-1都已经插补好了,所以i直接到j-1,避免重复插补endi = i+1;
end
第二种
%% 本函数用于缺失数据的线性插补
%% 修改时间 2021/10/26function A = f_Linear_interpolate(A)
%A是swe的一维时间序列,缺失数据需标记为nan%% 如果首位缺省,则向下搜索两个观测值,线性延长
loc = [0,0]; %记录观测值出现位置
if isnan(A(1)) %确定缺省值位置B = ~isnan(A);for i = 1:length(B)if loc(1) == 0 && sum(B(1:i)) == 1loc(1) = i; %记录第一个观测值的位置endif sum(B(1:i)) == 2 %说明出现了两个观测值loc(2) = i; %记录第二个观测值的位置breakendend%插值slope = (A(loc(2))-A(loc(1)))/(loc(2)-loc(1)); %线性插值的梯度for i = 1:loc(2)if ismember(i,loc)continueelseA(i) = A(loc(2))-(loc(2)-i)*slope;if A(i)<0A(i) =0; %避免负值endendend
end%% 如果末位缺省,则向上搜索两个观测值,线性延长
loc = [0,0]; %记录观测值出现位置
if isnan(A(end)) %确定缺省值位置B = ~isnan(A);for i = length(B):-1:1if loc(2) == 0 && sum(B(i:end)) == 1loc(2) = i; %记录倒序第一个观测值的位置endif sum(B(i:end)) == 2 %说明出现了两个观测值loc(1) = i; %记录倒序第二个观测值的位置breakendend%插值slope = (A(loc(2))-A(loc(1)))/(loc(2)-loc(1)); %线性插值的梯度for i = length(A):-1:loc(1)if ismember(i,loc)continueelseA(i) = A(loc(1))+(i-loc(1))*slope;if A(i)<0A(i) =0; %避免负值endendend
end%% 缺省值在中间,则向上向下各搜索最近实测值,进行线性插值
i = 2;
while i<=length(A)if isnan(A(i)) %发现缺省值则向后搜索找到非缺省值for j = i+1:length(A)if isnan(A(j))continue %仍为缺省值则跳过elsebreak %找到非缺省值就结束循环,j记录了非缺省值的位置endendslope = (A(j)-A(i-1))/(j-i+1); %线性插补的斜率for k = i:j-1A(k) = A(i-1)+(k-i+1)*slope; %根据斜率插补i到j-1endi = j-1; %因为i到j-1都已经插补好了,所以i直接到j-1,避免重复插补endi = i+1;
endend
MATLAB 线性插补缺省值相关推荐
- matlab求分段函数的值.,如何用MATLAB求分段函数的最小值和最大值?
7.1.1 分段线性插值 所谓分段线性插值就是通过插值点用折线段连接起来逼近原曲线,这也是计算机绘制图形的基本原理.实现分段线性插值不需编制函数程序,MATLAB自身提供了内部函数interp1其主要 ...
- matlab实现线性函数逼近,[转载]【MATLAB】MATLAB 线性拟合小结 ——nb
MATLAB 线性拟合小结 -- REGRESS多元线性回归(用最小二乘估计法) http://wenku.baidu.com/view/0a0ea0de941ea76e59fa0418.html?r ...
- CV:计算机视觉技术之图像基础知识(一)—以python的cv2库来了解计算机视觉图像基础(傅里叶变换-频域-时域/各种滤波器-线性-非线性-均值-中值-高斯-双边)
CV:计算机视觉技术之图像基础知识(一)-以python的cv2库来了解计算机视觉图像基础(傅里叶变换-频域-时域/各种滤波器-线性-非线性-均值-中值-高斯-双边) 目录 一.图像中的傅里叶变换 1 ...
- 中南大学 科学计算与MATLAB语言 11矩阵求值
中南大学 科学计算与MATLAB语言 11矩阵求值 矩阵求值主要包括 矩阵的行列式值 矩阵的秩 矩阵的迹 矩阵的范数 矩阵的条件数 把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称方阵所 ...
- 【图像去噪】基于matlab小波变换(硬阙值+软阙值)图像去噪【含Matlab源码 391期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像去噪]基于matlab小波变换(硬阙值+软阙值)图像去噪[含Matlab源码 391期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...
- 【Matlab瑕疵检测】阙值瓶盖瑕疵检测【含源码 730期】
一.代码运行视频(哔哩哔哩) [Matlab瑕疵检测]阙值瓶盖瑕疵检测[含源码 730期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLAB ...
- 《图形图像处理》— 使用matlab对图像进行二值化和灰度化处理
用matlab对图像进行二值化处理 >>m = imread('d:\image\logo.jpg'); >> imshow(n); >> n = graythre ...
- 9495 删除线性表中所有值为x的元素
题目描述 Description 已知长度为n的线性表采用顺序存储结构.写一算法,删除线性表中所有值为x的元素. 输入格式 第一行 输入表长 第二行 输入指定表长的整数 第三行 输入待删除的整数 输出 ...
- 【老生谈算法】matlab实现车牌识别中值滤波算法——车牌识别中值滤波算法
基于Matlab的车牌识别中值滤波算法的研究与实现 1.原文下载: 本算法原文如下,有需要的朋友可以点击进行下载 序号 原文(点击下载) 本项目原文 [老生谈算法]基于Matlab的车牌识别中值滤波算 ...
最新文章
- 不要小看小小的 emoji 表情
- 那个14岁上大学、17岁读博、24岁成教授的天才神童,如今怎样了?
- wifi漫游测试过程
- 【AI-1000问】Face detection、alignment、verification、identification(recognization) 你能分的清楚吗?
- Python中的运算符
- LeetCode上求最长公共字符前缀字符串问题——Longest Common Prefix
- 双12来了!揭秘秒杀剁手背后的云数据库PolarDB!
- 从神经质症的发生发展过程找到走出焦虑的途径
- spring——使用xml声明式事务整合jdbc——GRUD
- 【转】c# 协变与抗变
- 电脑重装系统后没声音怎么办
- 杭州微念申请李子柒商标被全部驳回,“最惨打工人”李子柒开始反击:已起诉!...
- Eclipse导入MySQL驱动包
- 【linux】nmap命令使用
- 计算机基本组成及功能
- Windows安装最新版Pygame
- 周志华机器学习笔记(一)
- JS操作word文档
- Apache2 虚拟主机 详解
- 驱动机架的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告