gzfz23 2021-03-14 21:12 采纳率: 0%
浏览 22

matlab中hermite插值法的一个疑问

function H = hermite(x,y,ydx,u)  %插值点u  
n=length(x);H=0;
lu=ones(n);%生成全1矩阵
L=zeros(n); p=zeros(n);%生成全0矩阵
for i=1:n
    for j=1:n
        if j~=i
            l(j)=(u-x(j))/(x(i)-x(j)); %#ok<*AGROW> %l(i)=[x-x(i-1)]/[x(i)-x(i-1)]
            lu(i)=lu(i)*l(j);%储存 l(i)的值
            p(i)=1/(x(j)-x(i));
            L(i)=L(i)+p(i);%储存p(j)的值
        end
    end
    hu(i)=(1+2*(u-x(i))*L(i))*lu(i)^2;%hu=1+2∑{[x-x(i)]/[x(j)-x(i)] }*l(i)^2
    Hu(i)=(u-x(i))*lu(i)^2;%Hu=[x-x(i)]*l(i)^2
    H=H+hu(i)*y(i)+Hu(i)*ydx(i); %H=∑[y(i)hi(x)+y'(i)Hi(x)] 
end
H=vpa(H,8);%规定精度为8位
end

这个程序是精准的 但是如果我将其中储存数据的部分改为下图所示


            l(j)=(u-x(j))/(x(i)-x(j)); %#ok<*AGROW> %l(i)=[x-x(i-1)]/[x(i)-x(i-1)]
            lu(i)=l(j);%储存 l(i)的值
            p(i)=1/(x(j)-x(i));
            L(i)=p(i);%储存p(j)的值
    

数据就会出现极大误差

请问,为什么不能这样改呢

  • 写回答

1条回答 默认 最新

  • 幻灰龙 2021-03-15 08:59
    关注

    你修改的依据是什么, Hermite 插值的原理你理解了没,插值代码是根据公式来的,不能随便改。

    评论

报告相同问题?

悬赏问题

  • ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
  • ¥20 易康econgnition精度验证
  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致