MATLAB绘图MATLAB应用设计.docx
《MATLAB绘图MATLAB应用设计.docx》由会员分享,可在线阅读,更多相关《MATLAB绘图MATLAB应用设计.docx(35页珍藏版)》请在冰豆网上搜索。
MATLAB绘图MATLAB应用设计
1.1基本函数
常用函数表:
sin()正弦(变量为弧度)
cot()余切(变量为弧度)
sind()正弦(变量为度数)
cotd()余切(变量为度数)
asin()反正弦(返回弧度)
acot()反余切(返回值为弧度)
asind()反正弦(返回值为度数)
acotd()反余切(返回值为度数)
cos()余弦(变量为弧度)
exp()指数
cosd()余弦(变量为度数)
log()对数
acos()余正弦(返回值为弧度)
log10()以10为底对数
acosd()余正弦(返回值为度数)
sqrt()开方
tan()正切(变量为弧度)
realsqrt()返回值为非负根
tand()正切(变量为度数)
abs()取绝对值
atan()反正切(返回弧度)
angle()返回值为复数的相位角
atand()反正切(返回度数)
mod(x,y)返回x/y的余数
sum()向量元素求和
1.2构造矩阵的方法
可以直接用[]来输入数组,也可以用以下提供的函数来生成矩阵。
ones()创建一个所有元素都为1的矩阵,其中可以制定维数
zeros()创建一个所有元素都为0的矩阵
eye()创建对角元素为1,其他元素为0的矩阵
diag()根据向量创建对角矩阵,即以向量的元素为对角元素
rand()创建随机矩阵,服从均匀分布
randn()创建随机矩阵,服从正态分布
randperm()创建随机行向量
horcatC=[A,B],水平聚合矩阵,还可以用cat(1,A,B)
vercatC=[A;B],垂直聚合矩阵,还可以用cat(2,A,B)
repmat(M,v,h)M在垂直方向上聚合v次水平方向上聚合h次
blkdiag(A,B)以A和B为块创建块对角矩阵
length返回矩阵最长维的的长度
ndims返回维数
numel返回矩阵元素个数
size返回每一维的长度,[rows,cols]=size(A)
reshape重塑矩阵
rot90旋转矩阵90度,逆时针方向
fliplr沿垂轴翻转矩阵
flipud沿水平轴翻转矩阵
transpose沿主对角线翻转矩阵
ctranspose转置矩阵,也可用A’或A.’
inv矩阵的逆
det矩阵的行列式值
trace矩阵对角元素的和
norm矩阵或矢量的范数,norm(a,1),norm(a,Inf)…….
rank求出矩阵的秩
pinv求伪逆矩阵
1.3多项式运算
多项式MATLAB里面的多项式是以向量来表示的。
其具体操作函数如下:
conv多项式的乘法
deconv多项式的除法,【a,b】=deconv(s),返回商和余数
poly求多项式的系数(由已知根求多项式的系数)
polyeig求多项式的特征值
polyfit(x,y,n)多项式的曲线拟合,x,y为被拟合的向量,n为拟合多
项式阶数
polyder求多项式的一阶导数,polyder(a,b)返回ab的导数
[a,b]=polyder(a,b)返回a/b的导数。
polyint多项式的积分
polyval求多项式的值
polyvalm以矩阵为变量求多项式的值
residue部分分式展开式
roots求多项式的根(返回所有根组成的)
2.1函数运算
2.1.1极限
在MATLAB中用limit指令求符号函数的极限。
(1)一重极限
如:
求f(x)=(e^(x^2)-1)/(x-1)在x→0时的极限。
symsxy
y=limit((exp(x^2)-1)/x-1,x,0)%一重极限
结果为:
y=
-1
(2)二重极限
如:
求x^2+y在x→2,y→1时候的极限。
可以编M文件类型的函数。
MATLAB中目前没有现成的求二重极限的函数。
symsxyz
z=limit(limit(x^2+y,x,2),y,1)
结果为:
z=
5
2.1.2微分
在MATLAB中,指令diff用于求符号函数的微分。
(1)一阶微分
symsxt
f=3*x^2+cos(4*t);
g=diff(f)
%默认变量为x
gg=diff(f,t)
%变量为t
结果为:
g=
6*x
gg=
-4*sin(4*t)
(2)二阶微分
symsxt
f=3*x^2+cos(4*t);
g1=diff(f,2)
%默认变量为x
gg1=diff(f,t,2)
%变量为t
结果为:
g1=
6
gg1=
-16*cos(4*t)
2.1.3积分的计算
在MATLAB中,int用于求符号函数的积分。
在数值计算可以利用trapz实现积分运算。
例:
symsxy
y=3*x+2*x^2+sin(-5*x)+cos(2*x);
g=int(y)
g=
cos(5*x)/5+sin(2*x)/2+(3*x^2)/2+(2*x^3)/3
2.1.4级数的计算
symsum(s,a,b)和symsum(s,v,a,b),其中symsum(s,v,a,b)表示指定变量为
v,v=a累加到v=b
例:
.
symsxkn
s1=k^2;
s2=symsum(s1,k,1,n)
s2=
(n*(2*n+1)*(n+1))/6
2.1.5求解代数方程
求出n位有效数字的数值解.具体步骤如下:
第一步:
定义变量symsxyz...;
第二步:
求解[x,y,z,...]=solve('eqn1','eqn2',...,'eqnN','var1','var2',...'varN');
第三步:
求出n位有效数字的数值解x=vpa(x,n);y=vpa(y,n);z=vpa(z,n);...。
使用solve指令时,表达式的‘=’右边没有赋值时,MATLAB默认为等于0。
例:
symsx
x=solve('x^3+5*x^2+6*x')
x=
-3
-2
0
2.1.6微分方程
在MATLAB中dsolve用于解符号运算的微分方程。
下面的例子不仅解出了微分方程的解,而且还利用ezplot和plot混合绘图,使微分方程的解可视
化。
y=dsolve('x*D2y-3*Dy=x^2','y
(1)=0,y(5)=0','x')
xn=-1:
6;
yn=subs(y,'x',xn)%自变量x用数组代替
figure('numbertitle','off','name','by邓珊')
ezplot(y,[-1,6])
holdon
plot([1,5],[0,0],'.r','MarkerSize',20)
text(1,1,'y
(1)=0')
text(4,1,'y(5)=0')
title(['x*D2y-3*Dy=x^2',',y
(1)=0,y(5)=0'])
holdoff
结果为:
y=
(31*x^4)/468-x^3/3+125/468
yn=
0.66670.26710-1.3397-3.3675-4.10900.000014.1132
2.2矩阵运算
矩阵运算和数组运算是MATLAB的数值运算中的两大类运算。
矩阵运算是按矩阵运算法则进行的
运算;数组运算无论是何种运算操作都是对元素逐个进行。
2.2.1矩阵最大值
在MATLAB中max是求得最大值的指令,find指令用于在数组中找出符合条件的元素所在的行和
列。
A=[12,-9,27;16,53,-69;25,19,2;30,41,23]
N=max(max(A))
%或者N=max(A(:
))
%其中A(:
)表示引用A中所有的元素
[r,c]=find(N==A)
结果为:
A=
12-927
1653-69
25192
304123
N=
53
r=
2
c=
2
2.2.2矩阵最小值
在MATLAB中,min用于求得最小值。
例:
A=[5,11,24;10,24,5;6,6,2;9,13,17]
M=min(A(:
));
[r1,c1]=find(M==A)
结果为:
A=
51124
10245
662
91317
r1=
3
c1=
3
2.2.3矩阵均值
在MATLAB中,mean可以用于求取矩阵或者数组的均值。
例:
A=[1,3,7;9,6,4;2,8,5]
a=mean(mean(A))%或者a=mean(A(:
))
结果为:
A=
137
964
285
a=
5
2.2.4矩阵方差
在MATLAB中var用于求取方差。
例:
A=[25,18,36,45;88,92,69,54;73,49,34,84]
a=var(A)
A=
25183645
88926954
73493484
a=
1.0e+003*
1.08301.38100.38630.4170
2.2.5矩阵转置
设A为m×n阶矩阵(即m行n列),第i行j列的元素是a(i,j),即:
A=a(i,j)定义A的转置为这样一个
n×m阶矩阵B,满足B=a(j,i),即b(i,j)=a(j,i)(B的第i行第j列是元素A的第j行第i列元素),记A'=B。
直观来看,将A的所有元素绕着一条从第1行第1列元素出发的右下方45度的射线作镜面反转,即
得到A的转置。
在MATLAB中,只需在矩阵上加’即可实现矩阵的转置。
例:
A=[1,2,3;4,5,6;7,8,9]
B=A'
结果为:
A=
123
456
789
B=
147
258
369
2.2.6逆矩阵
如果两个矩阵乘积为单位阵,那么这两个矩阵互逆。
在MATLAB中,inv指令可以实现求已知矩阵的逆矩阵,且矩阵只能是方阵。
例:
A=[3,7,-3;-2,-5,2;-4,-10,3]
B=inv(A)
结果为:
A=
37-3
-2-52
-4-103
B=
59-1
-2-30
02-1
2.2.7行列式
在MATLAB中det用于求行列式。
例:
A=[-6,1,3;12,-4,9;-10,-1,16]
a=det(A)
结果为:
A=
-613
12-49
-10-116
a=
-108.0000
2.2.8特征值的计算
在MATLAB中eig用于求特征值。
例:
A=[1,-3,3;3,-5,3;6,-6,4]
[V,D]=eig(A)
结果为:
A=
1-33
3-53
6-64
V=
-0.40820.2440-0.4070i0.2440+0.4070i
-0.4082-0.4162-0.4070i-0.4162+0.4070i
-0.8165-0.6602-0.6602
D=
4.000000
0-2.0000+0.0000i0
00-2.0000-0.0000i
返回的D是矩阵A的特征值向量,V是特征值
2.2.9矩阵的相乘
只有当矩阵A的列数与矩阵B的行数相等时A×B才有意义。
一个m×n的矩阵a(m,n)左乘一个n×p
的矩阵b(n,p),会得到一个m×p的矩阵c(m,p)
例:
A=[2,-1,2;1,0,4;-3,1,0;0,1,1];
B=[3,1,0;0,0,1;-1,2,0];
C=A*B
结果为:
C=
46-1
-190
-9-31
-121
2.2.10矩阵的右除和左除
在MATLAB中有左除和右除两种矩阵的除法。
例:
右除:
A=[5,8,6;2,1,7;4,9,3];
B=[2,4,7;3,5,7;8,5,1];
C=A/B
结果为:
C=
-5.39136.3043-0.3913
7.9130-7.04350.9130
-12.260912.8696-1.2609
左除:
A=[5,8,6;2,1,7;4,9,3];
B=[2,4,7;3,5,7;8,5,1];
C=A\B
结果为:
C=
-9.2500-4.00004.0000
4.17501.8000-1.7000
2.47501.60000.1000
2.2.11矩阵的幂运算
矩阵的幂指运算要在前面加点,矩阵的乘法和除法也必须在前面加点。
例:
A=[7,3,-5,1;2,-6,8,4;-1,3,-2,7;-7,9,12,-3]
B=A.^3
结果为:
A=
73-51
2-684
-13-27
-7912-3
B=
34327-1251
8-21651264
-127-8343
-3437291728-275
2.3多项式运算
2.3.1多项式加减乘除
多项式的运算即多项式的系数矩阵的运算。
运算法则同矩阵的运算。
①多项式相加
例:
p=[-5,2,-6,3,8];
q=[7,9,-11,13,24];
m=p+q
结果为:
m=
211-171632
②多项式相减
例:
p=[-5,2,-6,3,8];
q=[7,9,-11,13,24];
m=p-q
结果为:
m=
-12-75-10-16
③多项式相乘
例:
p=[10,12,8,17,28];
q=[2,13,-25,6,4];
M=conv(p,q)
结果为:
M=
20154-78-10218935-566236112
④多项式相除
例:
p=[10,12,8,17,28];
q=[2,13,-25,6,4];
[s,r]=deconv(p,q)
结果为:
s=
5
r=
0-53133-138
2.3.2多项式求导
其中p是多项式的系数,从左到右幂依次降低。
例:
p=[4,7,3,6,5];
q=polyder(p)
结果为:
q=
162166
2.3.3多项式求根
在MATLAB中roots指令用于求多项式的根。
例:
p=[1,3,7,5,9];
q=roots(p)
结果为:
q=
-1.5058+1.7569i
-1.5058-1.7569i
0.0058+1.2965i
0.0058-1.2965i
2.3.4多项式求值
在polyval指令用于求多项式的值。
例:
p=[2,5,7,3,4];
x=7;
y=polyval(p,x)
结果为:
y=
6885
2.3.5多项式的部分分式展开
在MATLAB中residue命令可用于多项式的部分分式展开。
例:
A=[8,21,15,37];
B=[2,4,-3,1,6];
[r,p,k]=residue(A,B)
结果为:
r=
-0.1940
0.5061-2.7543i
0.5061+2.7543i
3.1818
p=
-2.4888
0.7444+0.8070i
0.7444-0.8070i
-1.0000
k=
[]
2.3.6多项式的拟合
在MATLAB中指令polyfit用于求数据的拟合多项式。
可以通过polyval指令给求得的多项式赋值,
数值化后就可以通过数值画出图形。
这种方法可以用于对一些数据的预测。
例:
x0=0:
0.1:
1;
y0=[-0.358,1.817,2.983,4.925,5.03,4.56,3.91,4.57,3.46,5.35,9.34];
%求拟合多项式
n=3;
p=polyfit(x0,y0,n)
poly2str(p,'x')
%以习惯的方式显示结果
%图示拟合情况
xx=0:
0.01:
1;
yy=polyval(p,xx);
figure('numbertitle','off','name','by邓珊')
plot(xx,yy,'-b',x0,y0,'.r','MarkerSize',20)
legend('拟合曲线','原始数据','Location','SouthEast')
xlabel('x')
结果为:
p=
54.9909-83.854738.4798-0.8690
ans=
54.9909x^3-83.8547x^2+38.4798x-0.86898
2.3.7多项式插值运算
插值是在离散数据之间补充一些数据,使这组离散数据能够符合某个连续函数。
插值是计算数学
中最基本和最常用的手段,是函数逼近理论中的重要方法。
2.3.7.1一维插值
一维插值在MATLAB中有两种方法:
a多项式插值;
b建立在FFT上的插值;
①多项式插值
yi=interp1(x,y,xi,method)
x是坐标向量,y是数据向量,xi是待估计点向量,method是插值方法,
method有四种:
anearest,最近点插值法,通过四舍五入法取与最近的已知数据点的值。
blinear,线性插值,用直线连接数据点,插值点值位于直线上。
cspline,样条插值,用三次样条曲线通过数据点,然后根据曲线进行插值。
dcubic,立方插值,用三次曲线拟和并通过数据点。
以上四种方法得出的数据值一个比一个精确,而所需内存及计算时间也一个比一个要大要长.
②建立在FFT上的插值
这种方法利用了快速傅立叶变换
y=interpft(x,n),其中,x含有周期性的函数值。
本例在函数y=sinx上取10个点进行插值,得到插值函数,该函数是y=sinx的一个逼近,作图
观察其逼近效果。
建立M文件,源程序1为:
x=0:
10;
y=sin(x);
xi=0:
.25:
10;%在两个基准数据间插入3个点
yi1=interp1(x,y,xi,'*nearest');
yi2=interp1(x,y,xi,'*linear');
yi3=interp1(x,y,xi,'*spline');
yi4=interp1(x,y,xi,'*cubic');
%分别用四种方法求中间插值
figure('numbertitle','off','name','by邓珊')
subplot(2,2,1)
%在同一个窗口里画出两行两列图形
plot(x,y,'o',xi,yi1,':
')
%在同一个图中画出两条曲线,便于比较
title('图1:
最近点插值')
legend('原始数据','最近点插值')
subplot(2,2,2)
plot(x,y,'o',xi,yi2,':
')
title('图2:
线性插值')
legend('原始数据','线性插值')
subplot(2,2,3)
plot(x,y,'o',xi,yi3,':
')
legend('原始数据','样条插值')
title('图3:
样条插值')
subplot(2,2,4)
plot(x,y,'o',xi,yi4,':
')
title('图4:
立方插值')
legend('原始数据','立方插值')
运行结果为:
图3一维插值1
建立M文件,源程序2为:
x=0:
10;%给出已知基准数据
y=sin(x);
xi=0:
0.25:
10;%在两个基准数据间插入3个点
yi1=interp1(x,y,xi,'*nearest');
yi2=interp1(x,y,xi,'*linear');
yi3=interp1(x,y,xi,'*spline');
yi4=interp1(x,y,xi,'*cubic');%分别用4种方法求中间插值
figure('numbertitle','off','name','by邓珊')
plot(x,y,'o',xi,yi1,'b:
',xi,yi2,'g-x',xi,yi3,'k.-',xi,yi4,'r--')
%绘图,并标注个曲线代表的插值方法,如图所示
title('图五:
一维插值比较')
legend('原始数据','最近点插值','线性插值','样条插值','立方插值')
set(gca,'ytick',[-101]);%改变网格线点
gridon
运行结果为:
图4一维插值2
由上图可得,样条插值效果最好,立方插值次之,其次线性插值,最近点插值效果最差。
2.3.7.2二维插值
ZI=interp2(X,Y,Z,XI,YI,method)
method有三种:
anearest寻找最近数据点,由其得出函数值;
blinear二维线性插值
ccubic二维三次插值
3二维函数图的绘制
3.1M文件的建立
MATLAB是解释型语言,为了简化植入程序的繁琐性,MATLAB提供了2中方法来解决这个问
题-----函数和脚本,两种方法的根本都是建立M文件,M文件的好处是它可以保存命令,还可以
轻易的修改命令,也可以调用已经写好的M文件。
3.2plot指令
3.2.1plot的功能
1、plot命令自动打开一个图形窗口Figure
2、用直线连接相邻两数据点来绘制图形
3、根据图形坐标大小自动缩扩坐标轴,将数据标尺及单位标注自动加到两个坐标轴上,可自定
坐标轴,可把x,y轴用对数坐标表示
4、可单窗口单曲线绘图;可单窗口多曲线绘图;可单窗口多曲线分图绘图;可多窗口绘图
5、可任意设定曲线颜色和线型
6、可给图形加坐标网线和图形加注功能
3.2.2plot的调用格式
plot(x)——缺省自变量绘图格式,x为向量,以x元素值为纵坐标,以相应元素下标为横坐标绘图
。
plot(x,y)——基本格式,以y(x)的函数关系作出直角坐标图,如果y为n×m的矩阵,则以x为自
变量,作出m条曲线。
plot(x1,y1,x2,y2)——多条曲线绘图格式。
plot(x,y,’s’)——开关格式,开关量字符串s设定曲线颜色和绘图方式。
表1离散数据点形允许设置值
符号含义符号含义
b蓝g绿
r红c青
y黄m品红
k黑w白
表2连续线形允许设置值
符号含义符号含义
-细实线-.点划线
:
虚点线—虚划线
表3点线色彩允许设置值
符号含义符号含义符号含义
d菱形符x叉字符<朝左三角形
h