MATLAB-常见插值方法及常见知识

简介: MATLAB-常见插值方法及常见知识

主要介绍在三种插值方法:拉格朗日插值、分段线性插值、三次样条插值,以及这三种方法在matlab中如何实现。

拉格朗日插值:


基本原理:先构造一组基函数:

image.png

是次多项式,满足

image.png

上式称为次Lagrange插值多项式。

Matlab作Lagrange插值:


matlab没有现成的lagrange函数,需要手动写,如下:

x0,y0为原始坐标点,维度必须相同。

x为待插值的点。

y是返回值,是最终插值结果。

function Lagrange(X,Y,x0)
Len_y=length(Y);
Len_x=length(X);
if Len_y~=Len_x
    errorlog('维数不等');
else
    syms x;
    p=0;
    for i=1:Len_y
        q=1;
        for j=1:Len_x
            if j~=i
                q=q*(x-X(j))/(X(i)-X(j));
            end
        end
        p=p+q*Y(i);
    end
    simplify(p);
    if nargin==3
        sprintf('给定点处的函数值得近似值为: %f',subs(p,'x',x0))
    else 
        sprintf('所求的拉格朗日的插值函数为: ')
        p=collect(p);
        p=vpa(p,6),
    end
end
end

分段线性插值:


基本原理:

将每两个相邻的节点用直线连起来,如此形成的一条折线就是分段线性插值函数。计算点的插值时,只用到左右的两个节点,计算量与节点个数n(初始值x0,y0的长度,n=length(x0))无关,而拉格朗日插值与n值有关。分段线性插值中n越大,分段越多,插值误差越小。

Matlab实现分段线性插值:


用matlab实现分段线性插值不需要自己手动编写函数,matlab有现成的一维插值函数interp1y=interp1(x0,y0,x,'method')

method指定插值方法,其值可为:

linear:线性插值(默认)

nearest:最近项插值

spline:逐次3次样条插值

cubic:保凹凸性 3 次插值

所有插值方法都要求x0单调。

三次样条插值


使用三次样条插值有两种方法:其中一种就是第二种插值方式(分段线性插值),只需要将method修改为spline即可实现。

还有一种实现方式如下:

pp=csape(x0,y0);

y=ppval(pp,x);

其中x0,y0,x与前面含义相同,返回值y即插值结果。

例题):

表1给出的 x, y 数据位于机翼断面的下轮廓线上,假设需要得到 x 坐标每改变0.1 时的 y 坐标。试完成加工所需数据,画出曲线。要求用 Lagrange、分段线性和三次样条三种插值方法计算。

表1

x   0 3 5 7 9 11 12 13 14 15

y   0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6

解:编写代码如下:

clear,clc
x0=[0,3,5,7,9,11,12,13,14,15];
y0=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.0,1.6];
x1=[0:0.1:15];
%拉格朗日插值
y1=lagrange(x0,y0,x1);
figure
plot(x0,y0,x1,y1,'.')
title('拉格朗日插值')
%分段线性插值
y2=interp1(x0,y0,x1);
figure
plot(x0,y0,x1,y2,'.')
title('分段线性插值')
%三次样条插值
y3=interp1(x0,y0,x1,'spline');
figure
plot(x0,y0,x1,y3,'.')
title('三次样条插值')

lighting 调用语法:


lighting options   %设置照明模式

该指令只有在light指令执行执行后在起作用,此外options有以下四种取值:

flat:入射光均匀洒落在图形上的每个面上,主要与facted配用,他是默认模式。

gouraud:先对顶点颜色插补,再对顶点勾划的面色进行插补,用于曲面表现。

phong:对定点出法线插值,在计算各个像素的反光,表现效果最好。

none:使所有光源关闭。

matlab中x.^2与x^2有什么区别?


.^2是矩阵中的每个元素都求平方,^2是求矩阵的平方或两个相同的矩阵相乘,因此要求矩阵为方阵,且看下面的例子

x=1:4

x =

1 2 3 4

x.^2

ans =

1 4 9 16

x^2

Error using ^

Inputs must be a scalar and a square matrix.

To compute elementwise POWER, use POWER (.^) instead.

x=[1 2;3 4]

x =

1 2

3 4

x^2

ans =

7 10

15 22

x.^2

ans =

1 4

9 16

目录
相关文章
|
5月前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
210 6
|
5月前
|
传感器 机器学习/深度学习 数据采集
【数据驱动】【航空航天结构的高效损伤检测技术】一种数据驱动的结构健康监测(SHM)方法,用于进行原位评估结构健康状态,即损伤位置和程度,在其中利用了选定位置的引导式兰姆波响应(Matlab代码实现)
【数据驱动】【航空航天结构的高效损伤检测技术】一种数据驱动的结构健康监测(SHM)方法,用于进行原位评估结构健康状态,即损伤位置和程度,在其中利用了选定位置的引导式兰姆波响应(Matlab代码实现)
171 1
|
5月前
|
机器学习/深度学习 监控 算法
分布式光伏储能系统的优化配置方法(Matlab代码实现)
分布式光伏储能系统的优化配置方法(Matlab代码实现)
255 1
|
5月前
|
边缘计算 资源调度 监控
无人机边缘计算中的计算卸载——Stackelberg博弈方法研究(Matlab代码实现)
无人机边缘计算中的计算卸载——Stackelberg博弈方法研究(Matlab代码实现)
368 3
|
5月前
|
运维 算法
【故障诊断】基于最小熵反卷积、最大相关峰度反卷积和最大二阶环平稳盲反卷积等盲反卷积方法在机械故障诊断中的应用研究(Matlab代码实现)
【故障诊断】基于最小熵反卷积、最大相关峰度反卷积和最大二阶环平稳盲反卷积等盲反卷积方法在机械故障诊断中的应用研究(Matlab代码实现)
171 0
|
5月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
458 0
|
5月前
|
数据采集 算法 数据挖掘
【场景削减】基于DBSCAN密度聚类风电-负荷确定性场景缩减方法(Matlab代码实现)
【场景削减】基于DBSCAN密度聚类风电-负荷确定性场景缩减方法(Matlab代码实现)
212 0
|
5月前
|
机器学习/深度学习 边缘计算 运维
【电能质量扰动】基于ML和DWT的电能质量扰动分类方法研究(Matlab实现)
【电能质量扰动】基于ML和DWT的电能质量扰动分类方法研究(Matlab实现)
179 10
|
4月前
|
机器学习/深度学习 数据采集 负载均衡
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
237 0
|
5月前
|
算法 安全
【含储能及sop的多时段配网优化模型】基于柔性开断点(Soft Open Point)的主动配电网电压与无功功率协调控制方法研究(Matlab代码实现)
【含储能及sop的多时段配网优化模型】基于柔性开断点(Soft Open Point)的主动配电网电压与无功功率协调控制方法研究(Matlab代码实现)
167 8

热门文章

最新文章