一、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)=a1xm+ …+amx+am+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,xdata1),…,F(x,xdatan))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)=f(x,xdatai,ydatai)
=F(x,xdatai)-ydatai