一、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** **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 超定方程组 方程个数大于未知量个数的方程组 超定方程一般是不存在解的矛盾方程组  如果有向量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 最小  #### 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** 