数学建模 —— 插值与拟合(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

相关推荐
bst@微胖子1 小时前
Python高级语法之selenium
开发语言·python·selenium
Paddi9301 小时前
Codeforces Round 1004 (Div. 1) C. Bitwise Slides
c++·算法
Luis Li 的猫猫2 小时前
深度学习中的知识蒸馏
人工智能·经验分享·深度学习·学习·算法
查理零世2 小时前
【蓝桥杯集训·每日一题2025】 AcWing 6118. 蛋糕游戏 python
python·算法·蓝桥杯
敲代码的小王!2 小时前
MD5加密算法和BCrypt密码加密算法
java·算法·安全
带娃的IT创业者3 小时前
机器学习实战(6):支持向量机(SVM)——强大的非线性分类器
算法·机器学习·支持向量机
魔尔助理顾问3 小时前
一个简洁高效的Flask用户管理示例
后端·python·flask
java1234_小锋3 小时前
一周学会Flask3 Python Web开发-request请求对象与url传参
开发语言·python·flask·flask3
孑么5 小时前
力扣 买卖股票的最佳时机
算法·leetcode·职场和发展·贪心算法·动态规划
诚信爱国敬业友善6 小时前
常见排序方法的总结归类
开发语言·python·算法