MATLAB常用的插值方法

news2024/9/22 10:06:08

在数学建模中,我们拿到的数据经常会有缺失值,在缺失值不是很多的情况下,我们在数据预处理阶段会采用插值方法来将数据补齐,之后再开始我们的建模。

目录

1.Matlab 实现分段线性插值

2.拉格朗日插值多项式 

3.牛顿(Newton)插值 

​编辑 4.埃尔米特(Hermite)插值 

1.Matlab 实现分段线性插值

Matlab 中有现成的一维插值函数 interp1

y=interp1(x0,y0,x,'method')

method 指定插值的方法,默认为线性插值。其值可为: 'nearest' 最近项插值, 'linear' 线性插值 'spline' 逐段 3 次样条插值, 'cubic' 保凹凸性 3 次插值。

所有的插值方法要求 x0 是单调的。

示例:

% 已知的点(x坐标和对应的y坐标)  
x = [1, 3, 5, 7, 9];  
y = [2, 4, 6, 8, 10];  
xi = 1:0.5:9; % 从1到9,步长为0.5    
% 使用interp1函数进行线性插值  
yi = interp1(x, y, xi, 'linear');  
plot(x, y, 'o', xi, yi, '-');  
legend('原始点', '线性插值');  
xlabel('x');  
ylabel('y');  
title('线性插值示例');  
grid on;
disp('原始点y:');  
disp(y);  
disp('插值后yi:');  
disp(yi);

2.拉格朗日插值多项式 

 首先构造一组基函数:

上式称为n 次 Lagrange 插值多项式。

Matlab 中没有现成的 Lagrange 插值函数,必须编写一个 M 文件实现 Lagrange 插值。 设n 个节点数据以数组 x0, y0输入(注意 Matlat 的数组下标从 1 开始),m 个插值 点以数组 x 输入,输出数组 y 为m 个插值。编写一个名为 lagrange.m 的 M 文件: 

function y=lagrange(x0,y0,x); 
n=length(x0);m=length(x); 
for i=1:m 
 z=x(i); 
 s=0.0; 
 for k=1:n 
 p=1.0; 
 for j=1:n 
 if j~=k 
 p=p*(z-x0(j))/(x0(k)-x0(j)); 
 end 
 end 
 s=p*y0(k)+s; 
 end 
 y(i)=s; 
end 

代入数据:

x0 = [1, 3, 5, 7, 9];  
y0 = [2, 4, 6, 8, 10]; 
x = 1:0.5:9;
y=lagrange(x0,y0,x); 
disp('原始点y0:');  
disp(y0);  
disp('插值后y:');  
disp(y);

输出结果:

3.牛顿(Newton)插值 

运行程序:

function yi = newtonInterpolation(x, y, xi)  
    n = length(x); % 已知数据点的数量  
    if n ~= length(y)  
        error('x和y的长度必须相等');  
    end  
    % 构建差分表 
    diffTable = zeros(n, n);  
    diffTable(:, 1) = y(:); % 第一列是y值  
    for j = 2:n  
        for i = 1:n-j+1  
            diffTable(i, j) = (diffTable(i+1, j-1) - diffTable(i, j-1)) / (x(i+j-1) - x(i));  
        end  
    end  
  
    if ~isvector(xi)  
        yi = diffTable(1, 1); % 插值多项式的常数项  
        for k = 2:n  
            p = 1;  
            for j = 1:k-1  
                p = p * (xi - x(j));  
            end  
            yi = yi + diffTable(1, k) * p;  
        end  
    else  
        yi = zeros(size(xi)); 
        for i = 1:length(xi)  
            yi_temp = diffTable(1, 1); % 插值多项式的常数项  
            for k = 2:n  
                p = 1;  
                for j = 1:k-1  
                    p = p * (xi(i) - x(j)); 
                end  
                yi_temp = yi_temp + diffTable(1, k) * p;  
            end  
            yi(i) = yi_temp;  
        end  
    end  
end

代入数据:

x = [0, 1, 2, 3, 4];  
y = [1, 0.8, 0.9, 0.1, -0.8];  
xi =0:0.5:5; 
yi = newtonInterpolation(x, y, xi);   
% 绘图  
plot(x, y, 'o', xi, yi, '-');  
legend('原始数据点', '牛顿插值');  
xlabel('x');  
ylabel('y');  
title('牛顿插值示例');  
grid on;
disp('原始点y:');  
disp(y);  
disp('插值后yi:');  
disp(yi);

运行结果:

 4.埃尔米特(Hermite)插值 

 如果对插值函数,不仅要求它在节点处与函数同值,而且要求它与函数有相同的一 阶、二阶甚至更高阶的导数值,这就是 Hermite 插值问题。

运行程序:

function y=hermite(x0,y0,y1,x); 
n=length(x0);m=length(x); 
for k=1:m 
     yy=0.0; 
 for i=1:n 
    h=1.0; 
    a=0.0; 
 for j=1:n 
    if j~=i 
        h=h*((x(k)-x0(j))/(x0(i)-x0(j)))^2; 
        a=1/(x0(i)-x0(j))+a; 
    end 
 end 
    yy=yy+h*((x0(i)-x(k))*(2*a*y0(i)-y1(i))+y0(i)); 
 end 
    y(k)=yy; 
end 

代入数据:

x0=[0.1, 0.2,0.3,0.4,0.5];  
y0=[1,2,3,4,5];  
y1=[2,4,6,8,10];
xi =0:0.5:5; 
yi = hermite(x0, y0,y1, xi);   
% 绘图  
plot(x0, y0, 'o', xi, yi, '-');  
legend('原始数据点', 'hermite插值');  
xlabel('x');  
ylabel('y');   
grid on;
disp('原始点y0:');  
disp(y0);  
disp('插值后yi:');  
disp(yi);

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1907962.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OSCNET+ 代码复现

项目github 已有,开个博客大家如果复现有问题可以随时在下面留言 github :GitHub - hongwang01/OSCNet: 【MICCAI 2022, TMI 2023】Orientation-Shared Convolution Representation Model 1、从github 下载项目并解压 2、下载数据集 当然自己用肯定是自…

C语言实现顺序表字符型数据排序

实现直接插入、冒泡、直接选择排序算法。 #include <stdio.h> #include <stdlib.h>typedef char InfoType;#define n 10 //假设的文件长度&#xff0c;即待排序的记录数目 typedef char KeyType; //假设的关键字类型 typedef struct { //记录类型KeyType…

超详细版阿里云控制台环境配置+数据库配置

一、登录阿里云控制台 登录阿里云控制台&#xff0c;找到实例&#xff0c;切到阿里云服务器所在地址 &#x1f36d;不知道自己的服务器地址在哪边也没有关系&#xff0c;随便选择一个&#xff0c;查询不到记录的话会有以下提示&#xff0c;可以根据提示进行切换&#xff08;适…

Mac系统清理工具:您的数字生活杂务处理师

有没有觉得您的Mac有时候像是需要一个好的春季大扫除一样&#xff1f;随着我们不断使用电脑&#xff0c;各种不需要的文件、老旧的数据和忘记的安装包就像家里的灰尘一样慢慢积累。幸运的是&#xff0c;有了一些出色的Mac系统清理工具&#xff0c;我们可以轻松将这些数字灰尘拂…

含金废水的特性?如何提取含金废液中的黄金?

在金的工业使用过程和回收过程中都会产生含金废液&#xff0c;通常来自金矿冶炼、电子废弃物处理、珠宝制作和其他工业过程。由于黄金是一种贵重的贵金属&#xff0c;金废水的回收和处理是环保和资源可持续利用的关键领域之一&#xff0c;但是金的含量多数较低、甚至是微量、痕…

华为od相关信息分享

2024年OD统一考试&#xff08;D卷&#xff09;完整题库&#xff1a;华为OD机试2024年最新题库&#xff08;Python、JAVA、C合集&#xff09; 问 1.什么是华为od&#xff1f; 答&#xff1a;OD全称是Outsourcing Dispacth&#xff0c;即外包派遣&#xff0c;是华为和外企德科…

昇思MindSpore学习笔记5-02生成式--RNN实现情感分类

摘要&#xff1a; 记录MindSpore AI框架使用RNN网络对自然语言进行情感分类的过程、步骤和方法。 包括环境准备、下载数据集、数据集加载和预处理、构建模型、模型训练、模型测试等。 一、概念 情感分类。 RNN网络模型 实现效果&#xff1a; 输入: This film is terrible 正…

Kotlin linkedMapOf filterKeys

Kotlin linkedMapOf filterKeys fun main(args: Array<String>) {val lhm linkedMapOf<String, Any>(Pair("name", "phil"), //因为key相同都为 name&#xff0c;被后面的覆盖。Pair("year", 2024),Pair("name", "f…

顶会FAST24最佳论文|阿里云块存储架构演进的得与失-1.引言

今年早些时候&#xff0c;2月份举办的全球计算机存储顶会USENIX FAST 2024&#xff0c;最佳论文来自阿里云&#xff0c;论文名称《What’s the Story in EBS Glory: Evolutions and Lessons in Building Cloud Block Store》 &#xff0c;论文详尽地探讨了阿里云在过去十年中开…

新增多种图表类型,新增插件管理模块,DataEase开源数据可视化分析工具v2.8.0发布

2024年7月8日&#xff0c;人人可用的开源数据可视化分析工具DataEase正式发布v2.8.0版本。 这一版本的功能变动包括&#xff1a;图表方面&#xff0c;新增组合图、热力地图、符号地图、K线图等图表类型&#xff0c;并对已有的仪表盘、明细表、指标卡、富文本等图表类型进行了功…

Java之父James Gosling宣布正式退休 创造无数人的饭碗

编程语言Java的创始人&#xff0c;被誉为“Java之父”的James Gosling&#xff0c;近日在社交媒体上宣布了自己正式退休的消息。Gosling表示&#xff1a;“我终于退休了。做了这么多年的软件工程师&#xff0c;现在是时候享受人生了。”他透露&#xff0c;在亚马逊的过去7年是非…

手写《C++20设计模式》中介者模式

文章目录 一、前言二、实现1、UML类图2、实现 一、前言 个人感觉最后几种行为模式都很难&#xff0c;而且很重要。 对于中介者模式浅层理解就是&#xff0c;从原来所有相关对象彼此通信变为&#xff0c;引入一个中介者对象&#xff0c;让所有的相关对象通过中介者来通信&#…

wait和sleep在同步方面的区别

在 Java 中&#xff0c;wait 和 sleep 都用于让线程进入等待状态&#xff0c;但它们在同步操作和线程管理方面有显著区别。以下是它们的主要区别&#xff1a; 1. 所属的类 wait 是 Object 类的方法。sleep 是 Thread 类的静态方法。 2. 使用场景 wait 用于线程间通信&#…

鸿蒙开发小案例(名片管理))

鸿蒙开发小案例&#xff08;名片管理&#xff09; 1、页面效果1.1 初始页面1.2 点击名片展开1.3 点击收藏1.4 点击编辑按钮 2、实现代码2.1 DataModel.ets2.2 RandomUtil.ets2.3 ContactList.ets 1、页面效果 1.1 初始页面 1.2 点击名片展开 1.3 点击收藏 1.4 点击编辑按钮 2、…

第二证券:资金抱团“高股息”,超三成A股年内创历史新低!

A股商场行情冰火两重天。 “预制菜榜首股”跌破发行价 7月8日&#xff0c;味知香盘中最低跌至19.26元/股&#xff0c;股价跌破发行价&#xff0c;并创前史新低。揭露资料显现&#xff0c;公司是集研发、生产、销售为一体的半成品菜企业&#xff0c;现在具有8大产品系列&#…

短视频矩阵系统源代码开发---多种剪辑逻辑再次升级

揭秘AI短视频运营秘籍&#xff0c;轻松涨粉&#xff01; 1、数据管理方面&#xff0c;我们提供了全面的账号及视频Top 10的数据统计服务。 2、在AI视频创意制作领域&#xff0c;我们采用原创视频批量剪辑、阶乘算法和去重原理&#xff0c;以提升内容的独特性和吸引力。 3、同…

腾讯发布2024大模型十大最新趋势!

近日&#xff0c;在2024世界人工智能大会上&#xff0c;腾讯正式发布了《2024大模型十大趋势——走进“机器外脑”时代》报告。目前&#xff0c;这一报告正在AI产业界各大社群快速传播。 报告中&#xff0c;腾讯研究院试图通过10个关键性的趋势&#xff0c;去理解全世界范围内正…

【Ubuntu】windows和Linux文件互传、共享

【Ubuntu】windows和Linux文件互传、共享 一、FTP、SAMBA、NFS简介 FTP: File Transfer Protocol&#xff08;文件传输协议) SAMBA: 基于SMB(Server Message Block服务器消息块)协议的软件实现 NFS: Network File System&#xff08;网络文件系统&#xff09; 二、Linux 共享文…

无法下载 https://mirrors./ubuntu/dists/bionic/main/binary-arm64/Packages

ubuntu系统执行sudo apt update命令的时候&#xff0c;遇到如下问题&#xff1a; 忽略:82 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-backports/universe arm64 Packages 错误:81 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-backports/main arm64 Packa…

算法013:水果成篮

水果成篮. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/fruit-into-baskets/ 这道题题目很长&#xff0c;仔细阅读过后&#xff0c;我们其实可以简化成&#xff…