数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
查看: 2415|回复: 1

三次样条插值matlab程序代码

[复制链接]
发表于 2018-4-21 18:07 | 显示全部楼层 |阅读模式
依据附件图片上的思想写的三次样条插值:

function yy = maspline(x,y,dy0,dyn,xx)
m = length(x);
n = length(y);
if m~=n
    error('x与y长度不一致');
end
s = zeros(n+2,1);
a = zeros(n+2,4);
b = zeros(n+2,n-1);
for i =1:n
    for j = 1:n-1
        if i<j
        b(i,j) = 0;
        else
        b(i,j) = (x(i)-x(j))^3/factorial(3);
        end
    end
   a(i,1) = 1;
   a(i,2) = x(i);
   a(i,3) = x(i)^2;
   a(i,4) = x(i)^3;
   s(i) = y(i);
end
a(n+1,1) = 0;
a(n+2,1) = 0;
a(n+1,2:4) =[1 x(1) x(1)^2];
a(n+2,2:4) = [1 x(n) x(n)^2];
s(n+1) = dy0;
s(n+2) = dyn;

for i = 1:n-1
    if 1>i
    b(n+1,i) = (x(1)-x(i))^2/2;
    end
end
for i = 1:n-1
    if n>i
        b(n+2,i) = (x(n)-x(i))^2/2;
    end
end
A = [a b];
e = A\s;
t = ones(1,n-1);
tt = floor(xx);
ti = find(x == tt);
for i = 1:n-1
    if i<=ti
        t(i) = 0;
    else
        t(i) = (xx-x(i))^3/factorial(3);
    end
end
b = [1 xx xx^2 xx^3];
B = [b t]';
yy = e'*B

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2018-4-21 18:09 | 显示全部楼层
插值结果不对,帮忙看一下哪里有问题???
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2024-3-29 20:08 , Processed in 0.093750 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表