当前位置:网站首页>数学建模——插值拟合
数学建模——插值拟合
2022-07-23 00:25:00 【放牛儿】
目录
插值:每一个点一定在曲线上;拟合:点不一定在曲线上。
如果构造n次插值多项式,则需要n+1个约束方程。插值多项式P(x)与被插函数f(x)之间的差称为截断误差,用R(x)表示。

此时a0到an是未知数,未知数的系数是一个范德蒙行列式,在matlab中,直接用y除以系数矩阵即可求出未知数。
例子:
对下面的观测点进行插值,并估计x=1.5处的函数值
![]()
clc,clear
x0 = [1:6]';
y0 = [16 18 21 17 15 12]';
A = vander(x0);%生成范德蒙行列式
p = A\y0
x = [1.5];
y = polyval(p,x)%用于多项式计算,可查看帮助文档看具体用法也可以使用matlab的APP中Curve Fitting生成拟合曲线,选择五次线性拟合就会和插值的结果一样,在文件中,可以生成拟合后的代码。
插值
一维插值
vq = interp1(x,v,xq,method,extrapolation)
%向量
x包含样本点,v包含对应值 v(x)。向量xq包含查询点的坐标。method指定插值方法,如果希望使用method算法进行外插,可将extrapolation设置为'extrap'。F = griddedInterpolant(X,V,Method,ExtrapolationMethod)
%求插值后某点的值时,直接y = F(x)即可
pp = csape(x0,y0);
%三次样条插值函数,返回值是pp形式。
格式 函数功能 pp1=csape(x0,y0) 计算插值函数 pp2=fnder(pp1)
计算pp1对应函数的导数,返回值也是pp格式
pp3=fnint(pp1) 计算pp1对应函数的积分,返回值也是pp格式 y=fnval(pp1,x) 计算pp1对应的函数在x点的取值 pp.coefs 显示每个区间函数的系数
相比于interp1,另外两个函数可以生成匿名函数
例子:
数据点如表:
| t | 0.15 | 0.16 | 0.17 | 0.18 |
| v(t) | 3.5 | 1.5 | 2.5 | 2.8 |
用三次样条插值求
clc,clear,format long g
t0 = 0.15:0.01:0.18;
v0 = [3.5 1.5 2.5 2.8];
vt = griddedInterpolant(t0,v0,'spline')%求三次插值样条
s1 = integral(@(t)vt(t),0.15,0.18)%求积分
pp=csape(t0,v0);
xishu=pp.coefs
pp3=fnint(pp)
y=fnval(pp3,0.18)-fnval(pp3,0.15)
%s2=integral(@(t)fnval(pp,t),0.15,0.18)
format%恢复短小数显示格式二维插值
Vq = interp2(X,Y,V,Xq,Yq,method,extrapval)
%X和Y包含样本点的坐标,X是行向量,Y是列向量。V包含各样本点处的对应函数值。Xq和Yq包含查询点的坐标。pp = csape({x0,y0},z0) z = fnval(pp,{x,y})
%x0,y0分别为m维和n维向量,z0为m*n维矩阵。x,y为想插值的点
F = griddedInterpolant(X1,X2,V,Method,ExtrapolationMethod)
%求插值后某点的值时,直接y = F(x1,x2)即可
例如:
x = -5:0.8:5;
y = x';
z = sin(x.^2 + y.^2) ./ (x.^2 + y.^2);
F = griddedInterpolant({x,y},z);
xq = -5:0.1:5;
yq = xq';
vq = F({xq,yq});
surf(xq,yq,vq)散乱数据插值
vq = griddata(x,y,v,xq,yq) 使 v = f(x,y) 形式的曲面与向量 (x,y,v) 中的散点数据拟合。griddata 函数在 (xq,yq) 指定的查询点对曲面进行插值并返回插入的值 vq。曲面始终穿过 x 和 y 定义的数据点,x,y应该是一个行向量,一个列向量。
F = scatteredInterpolant(x,y,v) 创建一个拟合 v = F(x,y) 形式的曲面的插值。向量 x 和 y 指定样本点的 (x,y) 坐标。v 是一个包含与点 (x,y) 关联的样本值的向量。也相当于一个匿名函数
拟合
线性最小二乘法实现

线性方程组:RA=Y。求取参数向量A方法:A=R\Y
例子:
根据实验数据,建立经验公式y=at+b
| t | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| y | 27.0 | 26.8 | 26.5 | 26.3 | 26.1 | 25.7 | 25.3 | 24.8 |
clc,clear
t = [0:7]';
y = [27.0 26.8 26.5 26.3 26.1 25.7 25.3 24.8]';
a = [t,ones(8,1)];
cs= a\y用约束线性最小二乘解

x = lsqlin(C,d,A,b,Aeq,beq,lb,ub) ,C*x = d,线性等式约束 Aeq*x = beq 和边界 lb ≤ x ≤ ub。
例子:
给定拟合函数
,满足a,b
0,
| x | 3 | 5 | 6 | 7 | 4 | 8 | 5 | 9 |
| y | 4 | 9 | 5 | 3 | 8 | 5 | 8 | 5 |
clc,clear
x0 = [3 5 6 7 4 8 5 9]';
d = [4 9 5 3 8 5 8 5]';
C = [exp(x0),log(x0)];
A = [1 1];
b = 1;
lb = zeros(2,1);
cs = lsqlin(C,d,A,b,[],[],lb)多项式拟合
p = polyfit(x,y,n);%拟合n次多项式,返回值p是多项式对应的系数,次序是从高次幂到低次幂。
y = ployval(p,x);%计算多项式p在x处的函数值。
fittype和fit函数
函数fit需要和函数fittype配合使用,fittype用于定义拟合的函数类,fit用于函数拟合。fit可以拟合一元和二元函数,线性和非线性都可以。
aFittype = fittype(libraryModelName)%利用库模型定义函数类
aFittype = fittype(expression,Name,Value)%利用字符串定义函数类
aFittype = fittype(linearModelTerms,Name,Value)%利用基函数的线性组合定义函数类
aFittype = fittype(anonymousFunction,Name,Value)%利用匿名函数定义函数类
fitobject = fit(x,y,fitType)%x,y分别为自变量和因变量的观测值列向量,返回值是拟合函数的信息。
fitobject = fit([x,y],z,fitType)%[x,y]为自变量的观测值的两列矩阵,z为因变量的观测值列向量,可以拟合二元函数。
[fitobject,gof] = fit(x,y,fitType)%gof可以给出模型的一些检验统计量。
例子:
拟合函数![]()

clc,clear
x1 = [6 2 6 7 4 2 5 9]';
x2 = [4 9 5 3 8 5 8 2]';
z = [14.2077 39.3622 17.8077 11.8310 32.8618 16.9622 33.0941 11.1737]';
g = fittype('a*exp(b*x)+c*y^2','dependent','z','independent',{'x','y'});
[f,st] = fit([x1,x2],z,g,'StartPoint',rand(1,3))
plot(f)拟合分段函数:
g = @(a,b,c,d,k,x)(a+b*x).*(x<k)+(c+d*x).*(x>=k);%注意点乘
g = fittype(g)
...匿名函数定义中,必须把自变量放在匿名函数输入参数的最后一个。
lsqcurvefit函数
该函数可以拟合多元函数。
x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)
xdata是x观测值,ydata是y观测值,
是参数向量
拟合工具
最好用的还是APP中的拟合工具,可以生成代码,也可以导入到工作空间。如果导入到工作空间,就相当于一个匿名函数,可以直接使用。
其他
①trapz函数可以通过梯形法计算近似积分。
②gradient是求数值梯度的函数。[Fx,Fy]=gradient(F,hx,hy),其中Fx为其水平方向上的梯度,Fy为其垂直方向上的梯度,Fx的第一列元素为原矩阵第二列与第一列元素之差除以hx,Fx的第二列元素为原矩阵第三列与第一列元素之差除以(2*hx),以此类推:Fx(i,j)=(F(i,j+1)-F(i,j-1))/(2*hx)。最后一列则为最后两列之差除以hx。同理,可以得到Fy。
③contour函数可以画出矩阵的等高线图
④meshgrid(x,y)基于向量x和y中包含的坐标返回二维网格坐标
⑤quiver(x,y,u,v)该函数使用箭头来直观的显示矢量场。该调用格式表示通过在(x, y)指定的位置绘制小箭头来表示以该点为起点的向量(u,v)。
⑥clabel(h) 为当前等高线图h添加标签
⑦norm(v) 返回向量 v 的欧几里德范数。此范数也称为 2-范数、向量模或欧几里德长度。
⑧fimplicit绘制隐函数图像
f = @(x,y) x.^2 + y.^2 - 3; fimplicit(f,[-3 0 -2 2])⑨title、xlabel、ylabel、zlabel、textbox和legend等的Interpreter属性有三个属性:latex 、tex、none
⑩求两个方程的交点(f本身就是一个匿名函数,求f和2x-1的交点,rand赋初值)
边栏推荐
- [unity project practice] FSM finite state machine
- [openvx] VX for basic use of objects_ graph
- 实现 FinClip 微信授权登录的三种方案
- The concept and method of white box test
- How many of the 50 classic computer network interview questions can you answer? (III)
- go语言中的结构体和组合思想入门示例
- How to prevent all kinds of affiliated fraud?
- 深度讲解CAS,面试实践必备
- [ctfshow web getting started]ssrf
- What is the experience of writing concurrent tool classes (semaphore, cyclicbarrier, countdownlatch) by yourself in line 30?
猜你喜欢

BGP federal experiment

XSS labs customs collection

What are the seven layers of OSI's seven layer model? What is the role of each layer? This article is clear!

吉利星瑞:从产品技术赋能到文化自信

Jmeter---Jmeter安装教程

BGP联邦实验

整理mysql面试题55题(含答案)

MGRE 网络的构建

Practical exercise | a simple method for MySQL processlist table and Navicat monitor to identify slow queries

50道经典计算机网络面试题,你答得上几个?(上)
随机推荐
[hero planet July training leetcode problem solving daily] the 22nd day of the orderly gathering
Family fraud is prevalent, and Sogou number builds a security firewall
Flutter 3.0
Arduino框架下合宙ESP32C3 +1.8“TFT液晶屏通过TFT_eSPI库驱动显示
【云原生】风云暗涌的时代,DBA们的利刃出鞘了
Kali 2022.2 安装
7.paddlepaddle之图像数据处理
Talking about -- network security architecture design (II)
[openvx] VX for basic use of objects_ reference
中金财富开户安全吗 股票怎么买
[英雄星球七月集训LeetCode解题日报] 第22日 有序集合
DOM系列之禁止选中文字和禁止右键菜单
[unity project practice] FSM finite state machine
No requirement document, reject development?
XSS labs customs collection
发现了一个好用到爆的数据分析利器
mariadb相关说明
Svg+js mouse hover parallax JS effect
Camera IQ: 76% of consumers have experienced AR, and 49% are willing to share ar advertisements
How to prevent all kinds of affiliated fraud?
是参数向量

