数学建模 —— 插值与拟合(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阶光滑性,即一阶导数以及二阶导数连续。 ![](https://img-blog.csdnimg.cn/a2b16dc3ea084f78996f0b0c8e751f06.png) #### 2.1.5 三次多项式插值 将已知的每两个函数点之间用一个三次函数来插值,要求整个函数有一阶光滑性,且对极小点保持逼近。 ![](https://img-blog.csdnimg.cn/1bb8e7f3ac364b77843b9776e1d72a33.png) #### 2.1.5 matlab代码实现 yi = interp1(x, y, xi, 'method') **x, y :插值节点,xi:被插值点,method:插值方法;**(要求x单调,xi不超过x) method:**'nearest':最邻近插值** **'linear':线性插值** **'spline':三次样条插值** **'pchip':立方插值** **缺省时:分段线性插值** ![](https://img-blog.csdnimg.cn/b96e4a5d51b44c51866f3aec4f1e1243.png) ### 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** **1****x****m****+ ...+a****m****x+a****m+1** **a=polyfit(x,y,****m****)** a=\[a1, ... , am+1\](数组):输出拟合多项式系数的集合 x, y:输入同长度的数组x,y m:拟合多项式次数 **2.****多项式在****x****处的值****y****可用以下命令计算:** **y=polyval****(****a****,****x****)** ### 3.2 超定方程组 方程个数大于未知量个数的方程组 超定方程一般是不存在解的矛盾方程组 ![](https://img-blog.csdnimg.cn/8fa43c2b90344785bbedd374f9e80ab0.png) 如果有向量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)=(****F****(****x****,****xdata****1****),****...****,****F****(****x****,****xdata****n****))****T** *使得*∑_(i=1)\^n (F(x,xdata_i)-ydata_i)\^2 最小 ![](https://img-blog.csdnimg.cn/83944a3f7d1a45f28119e3b258c7de1c.png) #### 3.3.2 lsqnonlin **lsqnonlin****用以求含参量****x****(向量)的向量值函数** **f(x)****=(f****1****(x),f****2****(x),****...****,f****n****(x))****T** **中的参量****x****,使得** f\^T (x)f(x)=f_1 (x)\^2+f_2 (x)\^2+⋯+f_n (x)\^2 **最小。** **其中****f****i****(****x****)****=*****f*****(****x****,****xdata****i****,****ydata****i****)** **=F(x,xdata****i****)-ydata****i** ![](https://img-blog.csdnimg.cn/34eef3a7b78045f4bd1d14537ddfb60c.png)

相关推荐
烁34718 分钟前
每日一题(小白)动态规划篇2
算法·动态规划
橘猫云计算机设计19 分钟前
基于django优秀少儿图书推荐网(源码+lw+部署文档+讲解),源码可白嫖!
java·spring boot·后端·python·小程序·django·毕业设计
互联网杂货铺26 分钟前
如何用Postman实现自动化测试?
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman
予安灵33 分钟前
一文详细讲解Python(详细版一篇学会Python基础和网络安全)
开发语言·python
南玖yy1 小时前
数据结构C语言练习(栈)
c语言·数据结构·算法
冷月半明1 小时前
Python项目打包指南:PyInstaller与SeleniumWire的兼容性挑战及解决方案
python·selenium
冷月半明1 小时前
《Pandas 性能优化:向量化操作 vs. Swifter 加速,谁才是大数据处理的救星?》
python·数据分析·pandas
阿镇吃橙子1 小时前
一些手写及业务场景处理问题汇总
前端·算法·面试
酱酱哥玩AI1 小时前
Trae编译器:实现多目标班翠鸟优化算法(IPKO)无人机路径规划仿真(Python版),完整代码
算法
蹦蹦跳跳真可爱5891 小时前
Python----机器学习(基于PyTorch的线性回归)
人工智能·pytorch·python·机器学习·线性回归