三次样条插值matlab实现

%三次样条差值-matlab通用程序 - zhangxiaolu2015的专栏 - CSDN博客 https://blog.csdn.net/zha
%【图文】三次样条插值算法详解_百度文库 https://wenku.baidu.com/view/14423f2e1711cc7931b716
clc
clear
x=input('请按照格式[x1,x2,x3...]格式输入y=f(x)函数已知点的横坐标xi='); %三次样条差值函数
y=input('请按照格式[y1,y2,y3...]格式输入y=f(x)函数已知点对应的纵坐标yi=');
x

x = 1x4 double
1 2 4 5

y

y = 1x4 double
1 3 4 2

n=size(x,2); %特别注意,matlab中的矩阵编号是从1开始的,而教材上的矩阵编号是从0开始的,即本程序
for k=2:n %计算h(i)
h(k-1)=x(k)-x(k-1);
end
for k=1:(n-2) %计算μ和λ
mu(k)=h(k)/(h(k)+h(k+1));
lambda(k)=1-mu(k);
end
mu

mu = 1x2 double
0.3333 0.6667

lambda

lambda = 1x2 double
0.6667 0.3333

以上无论是M还是m关系式矩阵通用。

for k=1:(n-2)
  g(k)=3*(lambda(k)*(y(k+1)-y(k))/h(k)+mu(k)*(y(k+2)-y(k+1))/h(k+1));      %计算g(1)到g(n-2)
end
g

g =

-1.288728000000000 -2.093712750000000 -3.177727125000001

fprintf('边界条件类型选择:\n1.已知f(a)和f(b)的二阶导数\n2.已知f(a)和f(b)的一阶导数\n');

边界条件类型选择:

1.已知f(a)和f(b)的二阶导数

2.已知f(a)和f(b)的一阶导数

3.y=f(x)是以T=b-a为周期的周期函数

in=input('请输入对应序号:');
if in==1
    in
    M(1)=input('请输入f(a)的二阶导数值:');
    M(n)=input('请输入f(b)的二阶导数值:');
    M(1)
    M(n)
    A=zeros(n,n); %构造追赶法所需的A和b
for k=2:(n-1)
    A(k,k)=2;
    A(k,k+1)=mu(k-1);
    A(k,k-1)=lambda(k-1);
end
    A(1,1)=2;
    A(1,2)=1;
    A(end,end)=2;
    A(end,end-1)=1;
    A
    b=zeros(n,1);
for k=2:(n-1)
    b(k,1)=g(k-1);
end
    b(1,1)=3*((y(2)-y(1))/h(1)-2*h(1)*M(1));
    b(n,1)=3*((y(n)-y(n-1))/h(n-1)+2*h(n-1)*M(n));
    b
    b=b';
    m=zhuigan(A,b); %利用追赶法求解成功,这里的参数b形式应为行向量而非列向量
elseif in==2
    y0=input('请输入f(a)的一阶导数值:');
    yn=input('请输入f(b)的一阶导数值:');
    A=zeros(n-2,n-2); %构造追赶法所需的A和b
for k=2:(n-3)
    A(k,k)=2;
    A(k,k+1)=mu(k);
    A(k,k-1)=lambda(k);
end
    A(1,1)=2;
    A(1,2)=mu(1);
    A(end,end)=2;
    A(end,end-1)=lambda(n-2);
    b=zeros(n-2,1);
for k=2:(n-3)
    b(k,1)=g(k);
end
    b(1,1)=g(1)-lambda(1)*y0;
    b(end,1)=g(n-2)-mu(n-2)*yn;
    b=b';
    m=zhuigan(A,b);%利用追赶法求解
    m(1)
    m(2)
%这里解出m(1)至m(n-2),为能代入带一阶导数的分段三次埃米尔特插值多项式,要对m进行调整
for k=(n-2):-1:1
    m(k+1)=m(k);
end
    m(1)=y0;
    m(n)=yn;
elseif in==3
    A=zeros(n,n); %构造追赶法所需的A和b
for k=2:(n-1)
    A(k,k)=2;
    A(k,k+1)=mu(k-1);
    A(k,k-1)=lambda(k-1);
end
    A(1,1)=2;
    A(1,2)=mu(1);
    A(1,end)=lambda(1);
    A(end,end)=2;
    A(end,end-1)=lambda(n-1);
    A(end,1)=mu(n-1);
    b=zeros(n-1,1);
for k=1:(n-1)
    b(k,1)=d(k+1);
end
    N=LU_fenjieqiuxianxingfangcheng(A,b); %利用LU分解求解线性方程组
for k=1:(n-1)
    M(k+1)=N(k,1);
end
    M(1)=M(n);
else
    fprintf('您输入的序号不正确');
end

ans = 0

A = 4x4 double

​ 2.0000 1.0000 0 0
​ 0.6667 2.0000 0.3333 0
​ 0 0.3333 2.0000 0.6667
​ 0 0 1.0000 2.0000
b = 4x1 double

​ 6.0000
​ 4.5000
​ -3.5000
​ -6.0000
c = 1x3 double

​ 0.6667 0.3333 1.0000
a = 1x4 double

2 2 2 2
b = 1x3 double

1.0000 0.3333 0.6667

m

m = 1x4 double
2.1250 1.7500 -1.2500 -2.3750

%三转角公式
for k=1:(n-1)
clear S1
syms X
S1=(1-2*(X-x(k))/(-h(k)))*((X-x(k+1))/(h(k)))^2*y(k)+...
(X-x(k))*((X-x(k+1))/(h(k)))^2*m(k)+...
(1-2*(X-x(k+1))/(h(k)))*((X-x(k))/(h(k)))^2*y(k+1)+...
(X-x(k+1))*((X-x(k))/(h(k)))^2*m(k+1);
fprintf('当%d=<X=<%d时\n',x(k),x(k+1));
S=expand(S1)
end

\begin{array}{l} {\rm{S(x)}} = {m_k}(X - {x_k}){\left( {\frac{{X - {x_{k + 1}}}}{{{h_k}}}} \right)^2} + \\ {m_{k + 1}}(X - {x_{k + 1}}){\left( {\frac{{X - {x_k}}}{{{h_k}}}} \right)^2} + \\ {y_k}\left( {1 - \frac{{2(X - {x_k})}}{{-{h_k}}}} \right){\left( {\frac{{X - {x_{k + 1}}}}{{{h_k}}}} \right)^2} + \\ {y_{k + 1}}{\left( {\frac{{X - {x_k}}}{{{h_k}}}} \right)^2}\left( {1 - \frac{{2(X - {x_{k + 1}})}}{{{h_k}}}} \right) \end{array}

当1=<X=<2时

S =-\frac{x^3}{8}+\frac{3x^2}{8}+\frac{7x}{4}-1
当2=<X=<4时

S =-\frac{x^3}{8}+\frac{3x^2}{8}+\frac{7x}{4}-1
当4=<X=<5时

S =-\frac{x^3}{8}-\frac{45x^2}{8}+\frac{103x}{4}-33

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容

  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 3,827评论 0 6
  • 1.编译程序(1)gcc xx.c,他会默认生成一个a.out的可执行文件,在a.out所在目录,执行./a.o...
    萌面大叔2阅读 1,260评论 0 1
  • 1.编译程序 (1)gcc xx.c,他会默认生成一个a.out的可执行文件,在a.out所在目录,执行./a....
    萌面大叔2阅读 461评论 0 1
  • 显示中文帮助的方法 预设→常规→帮助→在mathworks.com网站上(需要Internet连接)→语言(简体中...
    VeyronC阅读 2,449评论 0 34
  • 2018年8月4日天气晴 今天是小荆托辅上学期课程结束的日子!为此明大托辅专门准备了一场盛大的文艺汇报...
    小荆娘亲阅读 221评论 0 2