建模算法(八)——插值与拟合

插值:求过已知有限个数据点的近似函数

拟合:已知有限个数据点,求近似函数,不要求过已知数据点,只要求在某种意义下在这些点的误差最小

(一)插值方法

一、拉格朗日多项式插值

1、插值多项式

就是做出一个多项式函数,经过给出的n个节点,并尽可能的接近原函数,将点带入多项式函数得到一个线性方程组

当系数矩阵满秩时,有唯一解。而,系数矩阵的行列式为

这是一个范德蒙德行列式,只要各个节点不同时,行列式就不为0,因此可得,一定能够解出系数方程

还有些指标

2、拉格朗日插值多项式

3、MATLAB实现

function y=lagrange(x0,y0,x)
%n个数据以数组x0,y0输入,m个插值点以数组x输入,输出数组y为m个插值。
n=length(x0);m=length(x);
for i=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

二、牛顿插值

1、差商

2、牛顿插值公式

有点就是,多一个数据点,只多一项

PS:

3、差分

4、等距节点插值公式

三、分段线性插值

1、插值多项式的振荡

即如果插值多项式的次数越高,越容易发生振荡,不能很好的拟合。

2、分段线性插值

3、MATLAB实现

四、Hermite插值

1、Hermite插值多项式

2、MATLAB实现

function y-hermite(x0,y0,y1,x);
%x0,y0为样本点数据,y1为导数指,m个插值点以数组x输入,输出数组y为m个插值
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=i: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)-x0(k))*(2*a*y0(i)-y(i))+y0(i));
    end
    y(k)=yy;
end

五、样条插值

1、概念

实际中最常用的是k=2和k=3的情况

二、二次样条函数插值

二次样条函数有n+2个待定常数,所以要有n+2个条件,才能有唯一解

一定要有一个条件为一阶导数

三、三次样本函数插值

二次样条函数有n+3个待定常数,所以要有n+3个条件,才能有唯一解

四、三次插值在MATLAB中的实现

部分转载

1、y=interp1(x0,y0,x,`spline`);     % (spline改成linear,则变成线性插值)

2、y=spline(x0,y0,xi);%这个是根据己知的x,y数据,用样条函数插值出xi处的值。即由x,y的值计算出xi对应的函数值。

3、pp=spline(x0,y0);%是由根据己知的x,y数据,求出它的样条函数表达式,不过该表达式不是用矩阵直接表示,要求点x`的值,要用函数y`=ppval(pp,x`);

4、pp=csape(x,y,‘变界类型‘,‘边界值conds‘);生成各种边界条件的三次样条插值. 其中,(x,y)为数据向量,边界类型可为:

‘complete‘:给定边界一阶导数,即默认的边界条件,Lagrange边界条件
             ‘not-a-knot‘:非扭结条件,不用给边界值.
             ‘periodic‘:周期性边界条件,不用给边界值.
             ‘second‘:给定边界二阶导数.
             ‘variational‘:自然样条(边界二阶导数为[0,0]。

五、demo

%转载= =
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];
t=0:0.05:15;
%拉格朗日插值函数
y1=lagrange(x0,y0,t);%调用编写的lagrange函数
dy1=(lagrange(x0,y0,0.0001)-lagrange(x0,y0,0))/0.0001%x=0处斜率
min1=min(lagrange(x0,y0,13:0.001:15))%13到15最小值
subplot(2,2,1);
plot(x0,y0,‘ro‘,t,y1);%画出曲线
title(‘拉格朗日插值函数‘);
%分段线性插值
y2=interp1(x0,y0,t,‘spline‘);%注意区分spline与linear
Y2=interp1(x0,y0,t);%默认linear
dy2=(interp1(x0,y0,0.0001,‘spline‘)-interp1(x0,y0,0,‘spline‘))/0.0001%x=0处斜率
min2=min(interp1(x0,y0,13:0.001:15,‘spline‘))%13到15最小值
subplot(2,2,2);
plot(t,y2,‘b‘,t,Y2,‘r‘,x0,y0,‘ro‘);%画出曲线
title(‘分段线性插值‘);
legend(‘边条‘,‘线性‘);%显示图形图例
%三次线条插值A
y3=spline(x0,y0,t);
dy3=(spline(x0,y0,0.0001)-spline(x0,y0,0))/0.0001%x=0处斜率
min3=min(spline(x0,y0,13:0.001:15))%13到15最小值
subplot(2,2,3);
plot(x0,y0,‘ro‘,t,y3);%画出曲线
title(‘三次线条插值A‘);
%三次线条插值B
pp1=csape(x0,y0);%默认的边界条件,即给定边界一阶导数
pp2=csape(x0,y0,‘second‘);%给定边界二阶导数
y4=ppval(pp1,t);
Y4=ppval(pp2,t);
dy4=(ppval(pp1,0.0001)-ppval(pp1,0))/0.0001%x=0处斜率
min4=min(ppval(pp1,13:0.001:15))%13到15最小值
subplot(2,2,4);
plot(t,y4,‘b‘,t,Y4,‘r‘,x0,y0,‘ro‘);%画出曲线
title(‘三次线条插值B‘);
legend(‘一阶‘,‘二阶‘);

七、二维插值

如果节点是二维的,插值函数是二元函数的话(曲面),我们可以画出三维的效果图

1、插值节点为网络节点

MatLab封装程序

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

a、x0,y0为节点坐标,z0为n*m维矩阵,表示节点的值

b、x0,y0要求一个为行向量一个为列向量

c、z为矩阵,n=length(y),m=length(x)       因为MATLAB是列优先

d、

e、x,y为插值点坐标,z为函数值

然后如果是三次样条插值,可以使用命令

pp=csape({x0,y0},z0,conds,valconds),z=fnval(pp,{x,y})

a、x0,y0为节点坐标,z0为n*m维矩阵,表示节点的值

b、x0,y0要求一个为行向量一个为列向量

c、“conds”与一维相同,一般默认

d、x,y为插值点坐标 ,z为函数值

2、demo

clear,clc

%样本点信息
x=100:100:500;
y=100:100:400;

z=[636   697   624  478   450
   698   712   630  478   420
   680   674   598  412   400
   662   626   552  334   310];

%录入样本点信息
pp=csape({x,y},z‘);  %注意z矩阵的行列所对应的向量
xi=100:10:500;
yi=100:10:400;
cz1=fnval(pp,{xi,yi});

cz2=interp2(x,y,z,xi,yi‘,‘spline‘);
[i,j]=find(cz1==max(max(cz1)))

subplot(1,2,1);
surf(xi,yi,cz1‘);
shading interp;   %插入颜色插值
axis equal;
title(‘cz1‘);

subplot(1,2,2);
surf(xi,yi,cz2);
shading interp;
axis equal;
title(‘cz2‘);

二、插值节点为散乱节点

1、定义

MATLAB提供了一个函数

zi=griddata(x,y,z,xi,yi)

a、x,y,z为n维向量,就是数据点

b、xi,yi是给定的网格点横纵坐标(插值点),返回zi的值

2、demo

clear,clc

%样本点信息
x=[129,140,103.5,88,185.5  195  105  157.5  107.5   77   81  162   162   117.5];
y=[7.5   141.5  23  147   22.5   137.5  85.5   -6.5   -81   3  56.5   -66.5  84  -33.5];
z=-[4   8  6 8  6  8  8  9  9  8  8  9  4  9];

xi=75:200;
yi=-50:150;
zi=griddata(x,y,z,xi,yi‘,‘cubic‘);

subplot(1,2,1);
plot(x,y,‘*‘);
title(‘xy‘);

subplot(1,2,2);
mesh(xi,yi,zi);
shading interp;
axis equal;
title(‘xyz‘);

时间: 2024-10-12 02:52:58

建模算法(八)——插值与拟合的相关文章

建模算法(九)——拟合 (转)

一.线性最小二乘法 1.基本思路 令,其r(x)是事先选定的一组线性无关的函数.ak是待定系数.然后拟合的准则就是使得yi与f(xi)的距离的平方和最小,称之为最小二乘准则 2.系数的确定 ,要使距离的平方和最小,那只要取得,使得取到极值,就可以解除待定系数ak,记 然后线性方程组为,所以当R列满秩,R’R是可逆的,所以方程组有唯一解 3.函数r(x)的选取 一般是直观的去判断用什么样的曲线.然后下面有一般常用的曲线 一般需要做变量代换,化为对a1和a2的线性函数. 然后可以多选几个r(x),然

建模算法(九)——拟合

一.线性最小二乘法 1.基本思路 令,其r(x)是事先选定的一组线性无关的函数.ak是待定系数.然后拟合的准则就是使得yi与f(xi)的距离的平方和最小,称之为最小二乘准则 2.系数的确定 ,要使距离的平方和最小,那只要取得,使得取到极值,就可以解除待定系数ak,记 然后线性方程组为,所以当R列满秩,R'R是可逆的,所以方程组有唯一解 3.函数r(x)的选取 一般是直观的去判断用什么样的曲线.然后下面有一般常用的曲线 一般需要做变量代换,化为对a1和a2的线性函数. 然后可以多选几个r(x),然

数学建模算法概括

目录 数学模型按数学方法分类 数学建模十大算法 建模思想 预测与预报 评价与决策 分类与判别 关联与因果 优化与控制 数学模型按数学方法分类 几何模型(球面积分,曲面积分) 分形理论(常用) 图论模型(优化类,规划类,决策类问题) 有一类线性规划类问题可用图论模型解决,最短路径 → 时间最短 or 路径最短 微分方程模型(预测人口增长,传热导热问题) 概率问题(彩票) 最优控制模型(药物疗效) 规划论模型(投资问题) 马氏链模型(概率模型) 前后不关联的概率模型 数学建模十大算法 蒙特卡罗算法

数学建模算法理论+程序

数学建模的各类算法汇总,带书签!文字可复制. 01 线性规划 02 整数规划 03 非线性规划 04 动态规划 05 图与网络 06 排队论 07 对策论 08 层次分析法 09 插值与拟合 10 数据的统计描述和分析 11 方差分析 12 回归分析 13 微分方程建模 14 稳定状态模型 15 常微分方程的解法 16 差分方程模型 17 马氏链模型 18 变分法模型 19 神经网络模型 20 偏微分方程模型 21 目标规划 22 模糊数学模型 23 现代优化算法 24 时间序列模型 25 贮存

数学建模算法(八):线性回归

1.多元线性回归 pho<-c( 0.69907424, 0.731751977, 0.82038317, 0.817860678, 0.793782346, 0.791145196 ) waitt<-c( 6.746842414, 7.033822049, 7.951127237, 7.92172466, 7.65163524, 7.623168881 ) pho<-log(pho) waitt<-log(waitt) m1<-30*c(10,25,14,14,0,0) #

插值与拟合

1.插值 -->求过已知有限个数据点的近似函数 1)拉格朗日多项式插值 -->n个插值点不同时确定了一个唯一的n次多项式 构造n次拉格朗日插值多项式(不使用解方程n个约束来求解待定系数) 2)牛顿插值 使用差商概念来构造牛顿插值公式(计算量小,余项与拉格朗日余项相等),当节点之差为常数时,使用差分来代替差商构造牛顿向前插值公式 3)分段线性插值 -->高次插值存在震荡缺陷,采用低次分段函数(线性函数) y=interp1(x0,y0,x,'method') -->method可取n

建模算法(一)&mdash;&mdash;线性规划

一.解决问题 主要是安排现有资源(一定),取得最好的效益的问题解决,而且约束条件都是线性的. 二.数学模型 1.一般数学模型 2.MATLAB数学模型 其中c,x都是列向量,A,Aeq是一个合适的矩阵,b,beq是合适的列向量.然后lb和ub是下限和上线(但是请注意= =,lb是一个变量的名字) 三.相关方程解法 1.图解法,画出可行域,这个可以进行编程进行实现. 2.直接使用MATLAB的相关方法进行解题. [x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,Xo,OPT

机器学习算法中的过拟合与欠拟合

在机器学习表现不佳的原因要么是过度拟合或欠拟合数据. 机器学习中的逼近目标函数过程 监督式机器学习通常理解为逼近一个目标函数(f)(f),此函数映射输入变量(X)到输出变量(Y). Y=f(X)Y=f(X) 这种特性描述可以用于定义分类和预测问题和机器学习算法的领域. 从训练数据中学习目标函数的过程中,我们必须考虑的问题是模型在预测新数据时的泛化性能.泛化好坏是很重要的,因为我们收集到的数据只是样本,其带有噪音并且是不完全的. 机器学习中的泛化 在In机器学习中,我们描述从训练数据学习目标函数的

建模算法(六)&mdash;&mdash;神经网络模型

(一)神经网络简介 主要是利用计算机的计算能力,对大量的样本进行拟合,最终得到一个我们想要的结果,结果通过0-1编码,这样就OK啦 (二)人工神经网络模型 一.基本单元的三个基本要素 1.一组连接(输入),上面含有连接强度(权值). 2.一个求和单元 3.一个非线性激活函数,起到将非线性映射作用,并将神经元输出幅度限制在一定范围内(在(0,1)或者(-1,1)) 4.还有一个阀值(偏置) 归结如下: PS:也可以选择将偏置(阀值)加入到线性求和里面 5.激活函数的选择 二.网络结构及工作方式 1