埃尔米特插值算法运用

埃尔米特插值算法运用

Hermite插值法是解决数学建模中预测类问题的最常用的方法,可以有效的解决“已知数据”数量不够的问题。

但是,直接使用Hermite插值得到的多项式次数较高,也存在着“龙格现象(Runge phenomenon)”。因此,在实际应用中,往往使用分段三次Hermite插值多项式(PCHIP),来提高“模拟数据的准确性”。

这里要说明一下“龙格现象(Runge phenomenon)”,
龙格现象(Runge phenomenon)
简单的解释为:插值多项式的震荡,即在两段处波动极大,产生明显的震荡。

Hermite插值法的含义
保持插值曲线在节点处有切线(光滑),使得插值函数和被插值函数的密合程度更好。
不但要求在节点处上的函数值相等,而且还要求对应的导数值也相等,甚至要求高阶导数也相等,满足这种要求的插值多项式就是“Hermite插值多项式”。

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
end

例题应用
给定如下数据,试构造Hermite多项式求出sin0.34的近似值。并画图与标准值对比。
x 0.3 0.32 0.35
sinx 0.29552 0.31457 0.34290
(sinx)’ 0.95534 0.94924 0.93937
解:

MATLAB代码如下:

clc;clear;
x0=[0.3,0.32,0.35];
y0=[0.29552,0.31457,0.34290]; %函数值
y1=[0.95534,0.94924,0.93937]; %导数值
format long;
y=hermite(x0,y0,y1,0.34)
 
%画图
x=[0.3:0.005:0.35];
y=hermite(x0,y0,y1,x);
plot(x,y,'b') %蓝色为插值计算结果
y2=sin(x);  %标准值
hold on
plot(x,y2,'r--') %红色为标准值
%函数部分
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
end

运行结果:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值