[数学建模(六)]使用MATLAB实现插值

常用的插值:拉格朗日多项式插值、牛顿插值、分段线性插值、Hermite 插值和三次样条插值。

1.拉格朗日插值法

function y=lagrange(x0,y0,x);

n=length(x0);m=length(x);

for i=1:m

  z=x(i);

  s=0.0;

  for k=1:n

   p=1.0;

     for j=1:n

       if j~=k

         p=p*(z-x0(j))/(x0(k)-x0(j));

       end

     end

     s=p*y0(k)+s;

  end

  y(i)=s;

end

测试:

>> x0=1:5;

>> y0=x0.^2;

>> x=2.5;

>> y=lagrange(x0,y0,x)

y =

6.2500

>> plot(x0,y0)

>> hold on

>> plot(x,y,‘*‘)

2.牛顿插值

function yi=newton(x,y,xi)

n=length(x);

m=length(y);

if n~=m

    error(‘The lengths of X ang Y must be equal!‘);

    return;

end

Y=zeros(n);

Y(:,1)=y‘;

for k=1:n-1

    for i=1:n-k

        if abs(x(i+k)-x(i))<eps

            error(‘the DATA is error!‘);

            return;

        end

        Y(i,k+1)=(Y(i+1,k)-Y(i,k))/(x(i+k)-x(i));

    end

end

yi=0;

for i=1:n

    z=1;

    for k=1:i-1

        z=z*(xi-x(k));

    end

    yi=yi+Y(1,i)*z;

end

测试:

x0=1:5;

y0=x0.^2;

x=2.5;

y=newton(x0,y0,x)

plot(x0,y0)

hold on

plot(x,y,‘*‘)

y =

6.2500

3.分段线性插值

y=interp1(x0,y0,x,‘method‘)

method 指定插值的方法,默认为线性插值。其值可为:

‘nearest‘ 最近项插值

‘linear‘ 线性插值

‘spline‘ 逐段3 次样条插值

‘cubic‘ 保凹凸性3 次插值。

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

测试:

x0=1:5;

y0=x0.^2;

x=2.5;

y=interp1(x0,y0,x,‘linear‘)

plot(x0,y0)

hold on

plot(x,y,‘*‘)

y =

6.5000

4. 埃尔米特(Hermite)插值

function y=hermite(x0,y0,y1,x); %y1是导数值

n=length(x0);m=length(x);

for k=1:m

  yy=0.0;

  for i=1:n

    h=1.0;

    a=0.0;

    for j=1:n

      if j~=i

        h=h*((x(k)-x0(j))/(x0(i)-x0(j)))^2;

        a=1/(x0(i)-x0(j))+a;

      end

    end

    yy=yy+h*((x0(i)-x(k))*(2*a*y0(i)-y1(i))+y0(i));

  end

  y(k)=yy;

end

测试:

>> x0=1:5;

y0=x0.^2;

x=2.5;

y1=[1 1 1 1 1];

y=hermite(x0,y0,y1,x)

plot(x0,y0)

hold on

plot(x,y,‘*‘)

y =

7.4228

5.样条插值

Matlab 中三次样条插值也有现成的函数:

(1)y=interp1(x0,y0,x,‘spline‘);

(2)y=spline(x0,y0,x);

(3)pp=csape(x0,y0,conds);

y=ppval(pp,x)

说明:

csape 的返回值是pp 形式,要求插

值点的函数值,必须调用函数ppval。

pp=csape(x0,y0):使用默认的边界条件,即Lagrange 边界条件。

pp=csape(x0,y0,conds)中的conds 指定插值的边界条件,其值可为:

‘complete‘ 边界为一阶导数,即默认的边界条件

‘not-a-knot‘ 非扭结条件

‘periodic‘ 周期条件

‘second‘ 边界为二阶导数,二阶导数的值[0, 0]。

‘variational‘ 设置边界的二阶导数值为[0,0]。

测试:

x0=1:5;

y0=x0.^2;

x=2.5;

y1=interp1(x0,y0,x,‘spline‘)

y2=spline(x0,y0,x)

pp=csape(x0,y0,‘second‘)

y3=ppval(pp,x)

plot(x0,y0)

hold on

plot(x,y1,‘*‘)

plot(x,y2,‘*‘)

plot(x,y3,‘*‘)

y1 =

6.2500

y2 =

6.2500

pp =

包含以下字段的 struct:

form: ‘pp‘

breaks: [1 2 3 4 5]

coefs: [4×4 double]

pieces: 4

order: 4

dim: 1

y3 =

6.2321

6.二维插值

一维插值:节点为一维变量,插值函数是一元函数(曲线)。

二维插值:节点是二维的,插值函数就是二元函数,即曲面。

6.1插值节点为网格节点

(1)z=interp2(x0,y0,z0,x,y,‘method‘)

(2)pp=csape({x0,y0},z0,conds,valconds);  %三次样条插值

z=fnval(pp,{x,y})

6.2 插值节点为散乱节点

时间: 2024-10-26 18:01:50

[数学建模(六)]使用MATLAB实现插值的相关文章

数学建模培训二 ---- matlab的基本应用

while循环结构主要用来做迭代 find()函数很重要,用来找符合条件的数据 plot()用来画图 axis()用来限定坐标轴的范围 hold on: hold off 用来作图用 打断点调试方法(F5单步运行) load导入数据 roots用来求多项式的根 polyfit()用来做多项式拟合插值 polyfit(x, y, 拟合函数的阶) mean()用来求均值 syms用来定义符号 rand()用来产生随机数 nlinfit()非线性拟合 doublle()可以将一个符号矩阵转化成一个数值

[数学建模(七)]使用MATLAB实现数据拟合

目录 1.线性最小二乘法 2.多项式拟合方法(polyfit) 3.最小二乘优化:lsqlin,lsqcurvefit,lsqnonlin,lsqnonneg 4.曲线拟合的用户图形界面求法(cftool) 1.线性最小二乘法 x=[19 25 31 38 44]'; y=[19.0 32.3 49.0 73.3 97.8]'; r=[ones(5,1),x.^2]; ab=r\y % if AB=C then B=A\C x0=19:0.1:44; y0=ab(1)+ab(2)*x0.^2;

python 版 mldivide matlab 反除(左除)《数学建模算法与程序》Python笔记

今天在阅读数学建模的时候看到了差分那章 其中有一个用matlab求线性的代码,这里我贴出来 这里我送上 Python代码 In [39]: import numpy as np ...: from scipy.optimize import nnls ...: x = np.array([[1,2,3,4,5],[1,1,1,1,1]]) ...: x = x.T ...: y = np.array([11,12,13,15,16]) ...: nnls(x,y) ...: Out[39]: (

在数学建模中学MATLAB

为期三周的数学建模国赛培训昨天正式结束了,还是有一定的收获的,尤其是在MATLAB的使用上. 1. 一些MATLAB的基础性东西: 元胞数组的使用:http://blog.csdn.net/z1137730824/article/details/39206823 对于任意文件夹的同一格式的图片的批量读取:http://blog.csdn.net/haizimin/article/details/39646595 关于MATLAB在微分/偏微分方程以及其他高等数学问题中的应用. 关于MATLAB在

数学建模--matlab基础知识

虽然python也能做数据分析,不过参加数学建模,咱还是用专业的 1. Matlab-入门篇:Hello world! 程序员入门第一式: disp('hello world!') 2. 基本运算 先了解基本的运算符,做一些简单的尝试: +   Plus; addition operator. -   Minus; subtraction operator. *   Scalar and matrix multiplication operator. ^   Scalar and matrix

MATLAB在数学建模中的应用(二)

size():获取矩阵的行数和列数 (1)s=size(A), 当只有一个输出参数时,返回一个行向量,该行向量的第一个元素为矩阵的行数,第二个元素是矩阵的列数. (2)[r,c]=size(A), (3)size(A,n)如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则 size将返回矩阵的行数或列数.其中r=size(A,1)该语句返回的是矩阵A的行数, c=size(A,2) 该语句返回的是矩阵A的列数.另外length()=max(size()). subplot():

余胜威《MATLAB数学建模经典案例实战》2015年版

内容介绍 本书全面.系统地讲解了数学建模的知识.书中结合历年全国大学生数学建模竞赛试题,采用案例与算法程序相结合的方法,循序渐进,逐步引导读者深入挖掘实际问题背后的数学问题及求解方法.在本书案例的分析计算中巧妙地结合了MATLAB等工具,并采用不同的算法进行模型求解,达到异曲同工之妙.本书结合实际,对网上讨论的很多疑难问题也做了解答. 本书共25章,分3篇.主要内容有:MATLAB基础知识.LINGO基础知识.SPSS基础知识.数学建模基础理论及算法设计.基于LINGO的基础理论及算法设计.企业

数学建模-二胎政策对中国人口的影响

研一的数学建模课上的关于"二胎政策对中国人口的影响".研究中国人口,发现中国人口老龄化很严重,现在如果不放开全面二胎,那么中国的未来真的很令人堪忧.其实,现在的单独二胎对人口的影响不是太多,每年增加100多万的人口,对于中国日益下降的人口增长率影响根本不大.   首先,本文通过搜集第六次人口普查的资料,将中国人口按照年龄组(5岁为一个年龄组)分为21个组,实行单独二胎政策就是改变每个年龄组的出生率,根据这个模型研究单独二胎政策对中国人口的影响.根据模型的求解,我们知道当实行单独二胎政策

数学建模常用的十大算法

数学建模常用的十大算法==转 (2017-07-16 11:26:14) 转载▼ 1. 蒙特卡罗算法.该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟来检验自己模型的正确性,几乎是比赛时必用的方法. 2. 数据拟合.参数估计.插值等数据处理算法.比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用MATLAB 作为工具. 3. 线性规划.整数规划.多元规划.二次规划等规划类算法.建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算