拉格朗日(lagrange)插值(MATLAB实现)

Author:HanDi
上海某高校遥感专业 工科男
相信积微者速成,相信分享的力量
CSDN@这可真是难为我了

在学习气溶胶光学厚度(AOD)反演算法时,遇到了插值方法选择上的难题。对于AOD反演一般多使用线性插值的方法,但是出来的AOD存在高值区高演的现象。

因此,我尝试选用Lagrange插值方法。从学习原理到参考别的博主代码,到自己动手写出小模块。真的很开心。

当然,Lagrange插值不止这一种用途,至于如何耦合到自己的程序。各位可以试着理解并动手实践。

新手写技术博客没有什么经验,如有不足,还请大家多多包涵,欢迎大家私信交流 ^ _ ^ !!!一起进步~
以后会分享一些地理数据处理和数据挖掘的示例

下面是完整代码,我的MATLAB版本是 matlab2021a

这里是参考内容,供大家系统学习
https://blog.csdn.net/seamanj/article/details/36407923
https://www.cnblogs.com/Wolfycz/p/10624678.html

下面是源码和示例数据,自取
链接:https://pan.baidu.com/s/1cMTIktMwB1lb0orerOExyA?pwd=w43u
提取码:w43u

%主程序
clc
clear
xcoordinate=fopen('testx.txt','r');
X = fscanf(xcoordinate,'%f');
fclose(xcoordinate);
ycoordinate=fopen('testy.txt','r');
Y = fscanf(ycoordinate,'%f');
fclose(ycoordinate);
xinsert=fopen('xinsertpoint.txt','r');
x = fscanf(xinsert,'%f');
fclose(xinsert);
y = lagrange(X,Y,x);
y1 = sin(x);
hold on
plot(X, Y,'or' , x, y, '.k', x, y1, '-b');
legend('样本点','sin(x)','拉格朗日插值估算');
%Lagrange插值函数
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

插值效果如下图
在这里插入图片描述

如有错误,欢迎评论,私信,会及时改正

  • 12
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值