数学建模 —— 插值与拟合(1)

一、matlab画图

1.1 plot(二维图形)

plot(x) ------ 缺省自变量绘图格式

plot(x,y) ------ 基本格式,以y(x)的函数关系作出直角坐标图,如果y为n×m的矩阵,则以x为自变量,作出m条曲线

plot(x1,y1,x2,y2,...,xn,yn) ------ 多条曲线绘图格式

plot(x1,y1,选项1,x2,y2, 选项2,...,xn,yn,选项n)------含选项的绘图格式

|------|----|------|-----|---------------|--------|
| 颜色参数 | 颜色 | 线型参数 | 线型 | 标记符号 | 标记 |
| b | 蓝 | - | 实线 | . | 圆点 |
| g | 绿 | : | 点线 | o | 圆圈 |
| r | 红 | -. | 点划线 | + | 加号 |
| c | 青 | -- | 虚线 | * | 星号 |
| m | 品红 | | | x | 叉号 |
| y | 黄 | | | 'square ' 或 s | 方块 |
| k | 黑 | | | 'diamond' 或 d | 菱形 |
| w | 白 | | | ^ | 朝上三角符号 |
| | | | | v | 朝下三角符号 |
| | | | | < | 朝左三角符号 |
| | | | | > | 朝右三角符号 |
| | | | | p | 五角星 |
| | | | | h | 六角星 |

图形标注函数的调用格式:

title(图形名称)

xlabel(x轴说明)

ylabel(y轴说明)

text(x,y,图形说明) 在x,y坐标处添加文字说明

legend(图例1,图例2,...)

图形窗口的分割:

subplot(m,n,p) 将一个绘图窗口分割成 m*n 个子区域,并按行从左至右 ,由上至下 依次编号 。 p 表示第 p 个绘图子区域。

|------------------|--------|----------------------------|
| 函数 | 二维图的形状 | 备注 |
| bar(x,y) | 条形图 | x是横坐标,y是纵坐标 |
| fplot(y,a b) | 精确绘图 | y代表某个函数,a b表示需要精确绘图的范围 |
| polar(θ,r) | 极坐标图 | θ是角度,代表以θ为变量的函数 |
| stairs(x,y) | 阶梯图 | x是横坐标,y是纵坐标 |
| stem(x,y) | 针状图 | x是横坐标,y是纵坐标 |
| fill(x,y,'b') | 填充图 | x是横坐标,y是纵坐标, 'b'代表颜色 |
| scatter(x,y,s,c) | 散点图 | s是圆圈标记点的面积,c是标记点颜色 |
| pie(x) | 饼图 | x为向量 |

1.2 三维曲线

plot3(x1,y1,z1,'选项1', x2,y2,z2,'选项2', ...)

x,y,z是长度相同的向量:一条曲线

x,y,z是维数相同的矩阵:多条曲线

三维曲面z=f(x,y) 绘制的一般步骤:

步骤一:确定向量x,y

步骤二:使用meshgrid生成网格矩阵

步骤三:计算函数z=f(x,y) 在各网格点上的值

步骤四:使用mesh等命令生成三维网格曲面图、使用surf等命令生成三维表面着色曲面图。

meshgrid

X,Y= meshgrid(x,y) x, y 为给定的向量,X, Y 是网格划分后得到的网格矩阵

mesh(X,Y,Z,C) X,Y:网格坐标矩阵, Z :网格点上的高度矩阵。 矩阵 C :确定不同高度下的颜色范围, 省略时 C=Z,即颜色的设定正比于图形的高度

mesh(Z) x, y 省略时,Z矩阵的列下标当做x轴坐标, Z矩阵的行下标当做y轴坐标

meshc 调用方式与 mesh 相同,在 mesh 基础上增加等高线

meshz 调用方式与 mesh 相同,在 mesh 基础上增加底座

1.3 三维着色曲面图

surf, surfc, surfl

surf(X,Y,Z,C) 绘制由矩阵 X,Y,Z 所确定的着色的三维表面图,参数含义同 mesh。

surfc 调用方式与 surf 相同,在 surf 基础上增加等高线

surfl 调用方式与 surf 相同,在 surf 基础上增加光照效果

二、插值

可在给定基准数据的情况下,估计出肌醇数据之间的其他点的函数值

(1)一维插值:拉格朗日、临近点、线性、三次样条、分段三次插值

(2)二维插值

2.1 一维插值

2.1.1 拉格朗日插值

P_n (x)=∑_(i=0)^n (L_i (x)⋅y_i )

L_i (x)=((x-x_0)(x-x_1)⋯(x-x_(i-1))(x-x_(i+1))⋯(x-x_n)) / ((x_i-x_0)(x_i-x_1)⋯(x_i-x_(i-1))(x_i-x_(i+1))⋯(x_i-x_n))

称为拉格朗日插值基函数

复制代码
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

2.1.2 临近点插值

用插值点最近的已知函数值代替该点

2.1.3 分段线性插值

用已知的函数点连接成直线段,作为插值函数

2.1.4 三次样条插值

将已知的每两个函数点之间用一个三次函数来插值,要求整个函数有2阶光滑性,即一阶导数以及二阶导数连续。

2.1.5 三次多项式插值

将已知的每两个函数点之间用一个三次函数来插值,要求整个函数有一阶光滑性,且对极小点保持逼近。

2.1.5 matlab代码实现

yi = interp1(x, y, xi, 'method')

x, y :插值节点,xi:被插值点,method:插值方法;(要求x单调,xi不超过x)

method:'nearest':最邻近插值

'linear':线性插值

'spline':三次样条插值

'pchip':立方插值

缺省时:分段线性插值

2.2 二维插值

2.2.1 二维网格插值

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

x0, y0 ,z0:插值节点;x, y:被插值点;method:插值方法 (要求x0,y0单调;x,y可取为矩阵,或x取行向量,y取为列向量,x,y的值分别不能超出x0,y0的范围。)

method:'nearest':最邻近插值

'linear':双线性插值(默认)

'cubic':双三次插值

'spline':三次样条插值

2.2.2 二维离散点插值

z = griddata(x0, y0, z0, x, y, 'method')

x0, y0 ,z0:插值节点;x, y:被插值点;method:插值方法 (要求x0,y0单调;x,y可取为矩阵,或x取行向量,y取为列向量,x,y的值分别不能超出x0,y0的范围。)

method:'nearest':最邻近插值

'(bi)linear':(双)线性插值(默认)

'(bi)cubic':(双)三次插值

三、拟合

在给定的基准数据下,寻求近似的函数(或者待定的参数)能较好的反映数据变化的规律

(注:不要求通过已经的数据点)

3.1 多项式拟合

利用最小二乘法确定n次多项式的系数

matlab实现:

1. f(x)=a 1xm**+ ...+amx+a****m+1**

a=polyfit(x,y,m)

a=a1, ... , am+1(数组):输出拟合多项式系数的集合

x, y:输入同长度的数组x,y

m:拟合多项式次数

2.多项式在x处的值y****可用以下命令计算:

y=polyval**(ax)**

3.2 超定方程组

方程个数大于未知量个数的方程组

超定方程一般是不存在解的矛盾方程组

如果有向量a使得**∑_(i=1)^n(r_i1 a_1+r_i2 a_2+⋯+r_im a_m-y_i )^2,则称a为超定方程的最小二乘解**

3.3 matlab作非线性最小二乘拟合

Matlab的提供了两个求非线性最小二乘拟合的函数:lsqcurvefit和lsqnonlin。两个命令都要先建立M-文件fun.m,在其中定义函数f(x),但两者定义f(x)的方式是不同的,可参考例题.

3.3.1 lsqcurvefit

F(x,xdata)=(Fxxdata1**),...Fxxdatan****))**T

使得∑_(i=1)^n (F(x,xdata_i)-ydata_i)^2 最小

3.3.2 lsqnonlin

lsqnonlin用以求含参量x**(向量)的向量值函数**

f(x)=(f1**(x),f2(x),...,fn(x))T **中的参量x**,使得**

f^T (x)f(x)=f_1 (x)^2+f_2 (x)^2+⋯+f_n (x)^2

最小。

其中fi**(x=fxxdataiydatai****)**

=F(x,xdatai)-ydata****i

相关推荐
倒头就睡的小比特2 天前
算法竞赛C++常用的STL
c++·算法
默_笙2 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
qq_426003962 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技2 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
猎头南楼2 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
只睡四小时2 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
高洁012 天前
未来三年,AI 落地的五个确定性判断一
人工智能·深度学习·机器学习·transformer·知识图谱