请选择 进入手机版 | 继续访问电脑版

C# 线性插值

[复制链接]
科达工艺 发表于 2021-1-2 19:46:47 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
C# 线性插值


  • 对于给定起点、终点和插值点数目,生成线性插值后的数组
  • 对于缺失部分值得数据序列,举行线性插值,插值填补该序列(如有一组数据中间缺失了一部分,用其起点和终点举行线性插值)
1)对于给定起点、终点和插值点数目,生成线性插值后的数组

  1.                 ///         /// 线性插值(返回插值后的数组,包罗起止点)        ///         /// 起始值        /// 终止值        /// 插值后数组插值后长度(包罗起止点)        /// 插值后效果        public static double[] linearInter(double d1, double d2, int num)        {            double[] data = new double[num];            double dt = (d2 - d1) / (num - 1);            for (int i = 0; i < num; i++)            {                data[i] = d1 + (i * dt);            }            return data;        }
复制代码
2)对于缺失部分值得数据序列,举行线性插值,插值填补该序列

主要思路是:
1.把待插值的数据读入一个数组A中,把缺失部分标记为NaN (数组A就是下面函数的输入参数)。
2.遍历数组A,通过空值判断需要插值的部分的起点和终点
3.通过上面的方法对该部分插值(得到该部分插值后的数组),并根据记载的起点索引填补空值
  1.                 public static double[] linearInter(double[] data)        {            double[] result = (double[])data.Clone();   //克隆是为了不粉碎原来的数组            List startIndex = new List();     //记载起点            List endIndex = new List();       //记载终点            for (int i = 0; i < data.Length; i++)            {                if (i != (data.Length - 1) && !double.IsNaN(data[i]) && double.IsNaN(data[i + 1]))  //该值有效,而后一个值无效                {                    startIndex.Add(i);                }                if (i > 0 && !double.IsNaN(data[i]) && double.IsNaN(data[i - 1]))  //该值有效,而前一个值无效                {                    endIndex.Add(i);                }            }            for(int i = 0; i < startIndex.Count; i++)       //对每一段举行插值            {                double startData = data[startIndex[i]];                double endData = data[endIndex[i]];                int len = endIndex[i] - startIndex[i] + 1;                double[] interResult = linearInter(startData, endData, len);                for(int j = startIndex[i]; j < endIndex[i]; j++)                {                    result[j] = interResult[j - startIndex[i]];     //把该段插值效果填补到目的数组中                }            }            return result;        }
复制代码
来源:https://blog.csdn.net/Mahmut0205/article/details/112059178
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )