三次样条插值matlab实现

%三次样条差值-matlab通用程序 - zhangxiaolu2015的专栏 - CSDN博客 https://blog.csdn.net/zhangxiaolu2015/article/details/42744823

%【图文】三次样条插值算法详解_百度文库 https://wenku.baidu.com/view/14423f2e1711cc7931b716ae.html与课堂使用PPT一致。

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开始的,即本程序n比PPT上n值大1

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

fprintf('边界条件类型选择:\n1.已知f(a)和f(b)的二阶导数\n2.已知f(a)和f(b)的一阶导数\n3.y=f(x)是以T=b-a为周期的周期函数\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
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 =
当2=<X=<4时
 
S =
当4=<X=<5时
 
S =

三次样条插值matlab实现的更多相关文章

  1. 数值计算方法实验之按照按三弯矩方程及追赶法的三次样条插值 (MATLAB 代码)

    一.实验目的 在已知f(x),x∈[a,b]的表达式,但函数值不便计算,或不知f(x),x∈[a,b]而又需要给出其在[a,b]上的值时,按插值原则f(xi)= yi(i= 0,1…….,n)求出简单 ...

  2. java 三次样条插值 画光滑曲线 例子

    java 三次样条插值 画光滑曲线 例子 主要是做数值拟合,根据sin函数采点,取得数据后在java中插值并在swing中画出曲线,下面为截图  不光滑和光滑曲线前后对比:    代码: 执行类: p ...

  3. 三次样条插值 cubic spline interpolation

    什么是三次样条插值 插值(interpolation)是在已知部分数据节点(knots)的情况下,求解经过这些已知点的曲线, 然后根据得到的曲线进行未知位置点函数值预测的方法(未知点在上述已知点自变量 ...

  4. 多项式函数插值:全域多项式插值(一)单项式基插值、拉格朗日插值、牛顿插值 [MATLAB]

    全域多项式插值指的是在整个插值区域内形成一个多项式函数作为插值函数.关于多项式插值的基本知识,见“计算基本理论”. 在单项式基插值和牛顿插值形成的表达式中,求该表达式在某一点处的值使用的Horner嵌 ...

  5. 井眼轨迹的三次样条插值 (vs + QT + coin3d)

    井眼轨迹数据的测量值是离散的,根据某些测斜公式,我们可以计算出离散的三维的井眼轨迹坐标,但是真实的井眼轨迹是一条平滑的曲线,这就需要我们对测斜数据进行插值,使井眼轨迹变得平滑,我暂时决定使用三次样条进 ...

  6. 拉格朗日插值和牛顿插值 matlab

    1. 已知函数在下列各点的值为   0.2 0.4 0.6 0.8 1.0   0.98 0.92 0.81 0.64 0.38 用插值法对数据进行拟合,要求给出Lagrange插值多项式和Newto ...

  7. 拉格朗日插值matlab实现

    已给sin0.32=0.314567,sin0.34=0.333487,sin0.36=0.352274,用线性插值及抛物插值计算sin0.3367的值并估计截断误差. 1. 线性插值 clc;cle ...

  8. 数值计算方法实验之Newton 多项式插值(MATLAB代码)

    一.实验目的 在己知f(x),x∈[a,b]的表达式,但函数值不便计算或不知f(x),x∈[a,b]而又需要给出其在[a,b]上的值时,按插值原则f(xi)=yi (i=0,1,……, n)求出简单函 ...

  9. 平滑算法:三次样条插值(Cubic Spline Interpolation)

    https://blog.csdn.net/left_la/article/details/6347373 感谢强大的google翻译. 我从中认识到了航位推算dead reckoning,立方体样条 ...

随机推荐

  1. HDU 5452——Minimum Cut——————【树链剖分+差分前缀和】ACdream 1429——Diversion——————【树链剖分】

    Minimum Cut Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 65535/102400 K (Java/Others)Tota ...

  2. web 单例 多例

    单例多例需要搞明白两个问题:1. 什么是单例多例:2. 如何产生单例多例:3. 为什么要用单例多例4. 什么时候用单例,什么时候用多例:1. 什么是单例多例:所谓单例就是所有的请求都用一个对象来处理, ...

  3. idea关闭sonar自动扫描

    file-setting-other setting-sonar相关的setting全部关闭

  4. elasticsearch报错:None of the configured nodes are available: []

    问题:在内网测试的时候可以正常访问,但是部署到外网上客户端连接elasticsearch报错:None of the configured nodes are available: [] 原因:默认情 ...

  5. log4net 最快速体验

    本文供实习司机快速上手log4net最基本功能,共4步,3分钟搞定. 一.添加log4net.dll引用,可使用nuget安装或直接引用文件 二.添加配置 在app.config或web.config ...

  6. 【练习笔记】spring 配置Schedule

    spring项目一些简单的定时任务可以通过@Schedule注解来实现,具体配置如下 在applicationContext.xml文件中增加配置 1.引入task约束 xmlns:task=&quo ...

  7. php 05

    流程控制 一.流程控制 1.顺序结构 //自上而下 从左到右 2.条件分支结构 a. 单向分支结构 if() 只能管理一条指令 这条指令是和他紧跟着的指令 if(){} 只能管理整个花括号里面的代码 ...

  8. thinkphp搜索实现

    视图: <html lang="zh-cn"><head> <meta charset="UTF-8"><title& ...

  9. [转]git修改远程仓库地址

    原文链接:http://www.cnblogs.com/lazb/articles/5597878.html 问:Coding远程仓库地址变了,本地git仓库地址如何更新为最新地址 git修改远程仓库 ...

  10. ssh免密钥登录一例问题

    今天遇到一个奇怪的问题,在同一机器上创建的普通用户使用 ssh-copy-id -i .ssh/id_rsa.pub root@192.168.3.254 建立与root用户的免密钥通信,结果死活还是 ...