Matlab学习笔记
王正盛 国防工业出版社
——《MATLAB与科学计算》
一.MATLAB入门 ............................................................................................................................ 4
who、whos和永久变量 .................................................................................................. 4 显示格式 ........................................................................................................................... 4 图形 ................................................................................................................................... 4
二.MATLAB数值计算 .................................................................................................................... 5
1.常用命令: .................................................................................................................... 5 2.矩阵的保存和获取 ........................................................................................................ 5 3.矩阵的运算和数组的运算 ............................................................................................ 5 4.线性方程组 .................................................................................................................... 5 5.多项式 ............................................................................................................................ 6 6.数值积分 ........................................................................................................................ 6 7.一般非线性方程组求解 ................................................................................................ 6 8.微分方程的数值求解 .................................................................................................... 7
三.MATLAB的符号计算 ............................................................................................................. 7
1.符号变量和符号表达式 ................................................................................................ 7 2.微积分运算 .................................................................................................................... 7 3.解方程 ............................................................................................................................ 8 4.化简和代换 .................................................................................................................... 8 5.MATLAB的符号表达式命令 ...................................................................................... 8
四.MATLAB的图形和可视化 ........................................................................................................ 9
1.二维图形 ........................................................................................................................ 9 2图形标记 ........................................................................................................................ 9 3.特殊坐标和图形 ............................................................................................................ 9 4.其他命令 ........................................................................................................................ 9 5.填充命令 ...................................................................................................................... 10 6.三维图形 ...................................................................................................................... 10 7.符号绘图 ...................................................................................................................... 10 8.其他 .............................................................................................................................. 10
五.MATLAB程序设计 .................................................................................................................. 10
1.概述: .......................................................................................................................... 10 2.命令文件 ...................................................................................................................... 11 3.程序文件 ...................................................................................................................... 11
六.MATLAB图形用户界面(GUI)设计 ................................................................................... 11 七.基于MATLAB的大规模矩阵计算 ......................................................................................... 11
1.稀疏矩阵 ...................................................................................................................... 11
八.基于MATLAB的最优化问题求解 ......................................................................................... 12
1.线性规划问题 .............................................................................................................. 12 2.非线性问题 .................................................................................................................. 12
1
3.二次规划问题 .............................................................................................................. 12
九.基于MATLAB的数据插值和拟合 ......................................................................................... 12
1.一维数据插值 .............................................................................................................. 12 2.二维数据插值 .............................................................................................................. 13 3.曲线拟合 ...................................................................................................................... 13
十.基于MATLAB的图像处理初步 ............................................................................................. 13
1.图像分类 ...................................................................................................................... 13 2.图像的读取和显示 ...................................................................................................... 13
2
3
一.MATLAB入门
who、whos和永久变量
who 变量名 %检查内存变量。 Whos %检查驻留变量的详细情况。
MATLAB自定义的永久变量:
eps %计算机中的最小正数 inf %无穷大 pi %圆周率 NaN %不定量 flops %浮点运算次数 i,j%虚数单位
显示格式
MATLAB中以短格式(5个有效数字)显示计算结果,可以用format命令改变数字显示格式
1. 变量的存储和调用
1) 存储当前工作空间中的变量
Save %将所有的变量存入文件MATLAB.mat中 Save mydate %将所有变量存入指定文件
Save mydate x y z %将指定的变量存入指定的文件中 2) 将数据文件的变量载入当前的工作空间 将save换作load即可
图形
1. 二维图形绘制命令 Plot(x,y);
2.三维图形绘制命令 Mesh(z);
2. 用户目录的建立
在命令窗口输入:cd c:\\mydir
4
二.MATLAB数值计算
1.常用命令:
Reshape命令
X=1:1:6; %产生6个元素的行向量
Reshape(x,2,3); %利用X行向量产生一个2*3的向量
diag命令:
ar=rand(4,4) %产生一个4*4的0-1均匀随机向量 d=diag(ar) %用ar的主对角元形成向量d D=diag(d)%利用d构成对角矩阵D
Size:获取矩阵的行数和列数
2.矩阵的保存和获取
1)利用m文件
利用文件编辑器编辑矩阵AM=[1 2 3;4 5 6;7 8 9]——》保存为在自己的目录下名的matrix.m——》在MATLAB命令窗口中只要输入matrix就可以调用AM矩阵 2)通过mat文件
Mat文件是MATLAB中保存数据的一种标准格式二进制文件,通过save和load执行,如前所述
3) 利用外部数据文件装入到指定矩阵中
假如磁盘中已有名为c:\\mydir\\date.dat的二进制数据文件,利用load c:\\mydir\\date.dat命令可以在MATLAB工作空间中产生一个名为date的矩阵
3.矩阵的运算和数组的运算
矩阵运算是按矩阵的运算法则进行的;数组运算无论何种操作都是对元素逐个进行的,数组运算需要在运算符前加点号。
4.线性方程组
1)采用求逆运算:x=inv(A)*b; 2)采用左除运算:x=A\\b;
说明:只有在A是方阵时可以采用求逆运算;求逆运算没有左除运算好;一般都用左除运算吧
5
在解欠定方程时,解得结果是所有结果中范最小的一个
5.多项式
1. 多项式的创建
1) 多项式系数向量直接输入法
2) 利用指令:p=poly(AR);AR为多项式的根或者特征多项式
常用多项式的运算指令: R=roots(P)%求多项式的根
PA=polyval(p;S)%按数组运算规则计算多项式值。P是多项式,S为矩阵 PA=polyvalm(p;S)%按向量运算规则计算多项式值。
[r,p,k]=residue(b,a)%部分分式展开。b,a分别是分子,分母多项式的系数向量。 R,p,k分别是留数、极点、直项向量。
P=polyfit(x,y,n)%用n阶多项式拟合x,y向量给定的数据。
6.数值积分
S=quad(‘fname’,j积分下限,积分上限,tol,trace) %trace为1用图形展示积分过程,精确度缺省时取0.001
S=quad8(‘fname’,j积分下限,积分上限,精确度,trace)
7.一般非线性方程组求解
1) 单变量非线性方程求解
先建立方程fname.m文件——》调用fzero求解
Z=fzero(‘fname’,x0,tol,trace)%x0为起始搜索点,一个函数可能有多个根,但结果只取离x0最近的根
2)求解非线性方程组
先建立方程组的m文件——》调用fsolve函数求解 X=fsolve(‘fname’,x0) %x0是对解的猜测值
function q=myxyz(p) x=p(1);y=p(2);z=p(3); q(1)=sin(x)+y^2+log(z)-7; q(2)=3*x+2*y-z^3+1;
6
q(3)=x+y+z-5;
调用
x=fsolve('myxyz',[1 1 1])
8.微分方程的数值求解
[t,x]=ode23(‘fnanme’,to,tf,,x0,tol,trace) [t,x]=ode45(‘fnanme’,to,tf,,x0,tol,trace)
先建立微分方程fname.m文件——》调用ode23或ode45函数。
function yp=funt(t,y) yp=(y^2-t-2)/4/(t+1);
调用
[t,y]=ode23('funt',[0,10],2)
注:该指令是针对一阶微分方程设计的。因此对于高阶微分方程,必须演化成形如x’=f(x,t)的一阶微分方程。
三.MATLAB的符号计算
1.符号变量和符号表达式
sym x %定义一个符号变量
findsym(g)%确认符号表达式中的符号变量 syms x,y,z %定义一组符号变量
注:事实上,sym和syms在定义符号变量时除了个数的差别外,还有定义的结果也不同,注意在MATLAB中体会。 f=sym(‘1+sin(x)’)
subs(f,old,new)%用新的符号变量代替旧的符号变量,可以是一个变量也可以是一个数组。
2.微积分运算
1)微分
diff(f,t,n) %函数f对t求导,如果t缺省,则字符表上最接近x的符号变量求导;n表示求导次数
7
2)积分
int(f,t,t0,tf) %函数f对x在t0到tf上求积分 3)求极限 limit(f,t,a,‘left或者right’) %当t趋于a时,f的极限,当a缺省时,a为0,left或者right 表示左右极限。 4)求级数和
symsum(s,t,a,b) %t从a到b时s的级数和 5)求泰勒级数
taylor(f,x,a)%函数f对符号变量x在a点附近的泰勒级数,a缺省时为0,详见help。 命令栏输入taylortool可以调用泰勒图形展开界面。
3.解方程
1)代数方程
solve(f,t) %解代数方程f=0 或者solve(‘f(x)=g(x)’)
也可以利用solve解方程组,详见help 2)解微分方程 dsolve(‘s’,’s1’,’s2’,…,’x’) %s1、s2、…时初始条件 3)线性代数
MATLAB中大多数用于数值线性代数的计算命令,都可以用于符号变量线性代数运算
4.化简和代换
collect(‘s’)%合并同类项 expand(‘s’)%将乘积形式化为和式 simplify(‘s’)%利用恒等式化简 hornor(‘s’) %将多项式化为嵌套式 此外还有simple 5.三种变换:
傅立叶变换fourier(f,trans_var,eval_point) 反变换:ifourier() 拉普拉斯变换laplace(f,trans_var,eval_point) 反变换:ilaplace() z变换ztrans(f,trans_index,eval_point) 反变换:iztrans()
5.MATLAB的符号表达式命令
help symbolic
8
四.MATLAB的图形和可视化
1.二维图形
plot(x,y) %最简单最常用的二维绘图命令
fplot(fname,lims,tol) %自适应二维函数绘图命令,在函数变化率大的部分密集采样绘图,提高图形真实性。
2图形标记
title(‘图形名称’) %给图形命名 xlabel(‘x轴坐标’) ylabel(‘y轴坐标名’) text(x,y,’标记’) %在坐标点(x,y)处加标记 legend(’图例1’,‘图例2’,····) axis([x,y的坐标范围])
axis(‘on’) %显示坐标 axis(‘off’)
另外绘图命令中还可以对图形的坐标,颜色,线型进行设定,详见help
3.特殊坐标和图形
loglog(x,y)%双对数坐标
semilogy(x,y) %以x轴为对数坐标 polar(theta,rho) %极坐标 stair(x,y) %阶梯图形 bar(x,y) %条形图
stem(x,y)%火柴杆状图
pie(x)%绘制饼状图 pie3(x)%绘制三维饼状图 ribbon(x,y,c)%绘制带状图,c是颜色
4.其他命令
subplot(a,b,n) %将绘图区分为a*b区,选择其中的n区 hold %在原来视图中绘图
plotyy(x1,y1,x2,y2)%在同一坐标系中左右使用不同的坐标
9
5.填充命令
fill(x1,y1,x2,y2,```,c) %用c颜色填充由(x1,y1)、(x2,y2)···确定的多边形 erea(x,y,’r’) %用r色填充由x,y函数确定边界的区域
6.三维图形
1)绘图命令
plot3(x,y,z) %最基本的三维图形函数,函数除了增加第三维坐标外,功能和plot相同 mesh(x,y,z) %绘制三维网格图。在不需要特别精细的三维曲面结果时使用。 surf(x,y,z) %绘制三维曲面图,各线条之间的补面用颜色填充 2)视点
view(方位角,俯视角)或者view([x,y,z]) %[x,y,z]观察点坐标 3)等高线
contour(x,y,z,n) %以z为高程值,x,y为横纵坐标的平面等值线图,n缺省值为10 contour3(x,y,z,n) %`````三维等值线图
meshc(x,y,z) %绘制带等值线图的网线图 其他相关的还有pcolor()、meshz()、surfc()等,详见help。
7.符号绘图
ezplot(f,[a,b])%二维符号绘图 ezplot3(f,[a,b]) %三维符号绘图 ezmesh()、ezsurf()%三维符号绘图
8.其他
1)球面绘图
sphere(n) %绘制单位球面,且球面上的网格线条数为n
cylinder(r,n) %轴线定位z轴r表示柱面的母线,是向量;n表示柱面上网格线条数
五.MATLAB程序设计
1.概述:
1)MATLAB有两种工作方式:一种是交互式的命令行工作方式;一种是m文件的程序工作方式。
2)m文件有两种:一种是命令文件,相当于将命令行的命令先集中写好存在m文件中;一种是函数文件。
10
2.命令文件
1)数据的输入输出
result = input(prompt) %提示输入一个量 disp(X) % isplay text or array
pause(n)%暂停n秒,n缺省时暂停至敲任意键结束。
3.程序文件
function [输出形参表]=fname(输入形参表) 函数体
MATLAB中的程序设计同样着重掌握if语句,while语句,for语句和switch语句等,同时MATLAB中没有花括弧,每一条if或者while语句都需要用end结束。
六.MATLAB图形用户界面(GUI)设计
太难,暂时跳过
七.基于MATLAB的大规模矩阵计算
1.稀疏矩阵
表 MATLAB提供的创建稀疏矩阵函数表 sparse converts a full matrix to sparse S = sparse(A) form by squeezing out any S = sparse(i,j,s,m,n) zero elements. extracts all nonzero diagonals B = spdiags(A,d) from the m-by-n matrix A. A = spdiags(B,d,m,n) A = spdiags(B,d,A) converts a matrix D with rows S = spconvert(D) containing [i,j,s] or [i,j,r,s] to the corresponding sparse matrix. locates all nonzero elements of ind = find(X) array X, and returns the ind = find(X, k) linear indices of those [row,col,v] = find(X, ...) elements in vector ind orm an m-by-n sparse matrix S = speye(m,n) 11
spdiags spconvert find speye
with 1s on the main diagonal full converts a sparse matrix S to A = full(S) full storage organization 八.基于MATLAB的最优化问题求解
1.线性规划问题
x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options) %求解线性规划问题,注意f为列向量
2.非线性问题
1)有约束一元函数
x = fminbnd(fun,x1,x2,options) %x1,x2是取值范围 2)无约束多元函数
x = fminsearch(fun,x0,options) %x0是初始值向量 x = fminunc(fun,x0,options) 注:当函数结束大于2时,使用fminnuc比fminsearch更有效,但当所选函数高度不连续时,使用fminsearch效果较好 3)有约束多元函数
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) %nonlcon通过指定函数柄来使用非线性约束,如:x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,@mycon) %mycon是定义好的非线性等式和不等式约束,缺省时用[]代替。
3.二次规划问题
x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0) % This MATLAB function returns a vector x that
minimizes 1/2*x'*H*x + f'*x.
九.基于MATLAB的数据插值和拟合
1.一维数据插值
1)vq = interp1(x,v,xq,method) %x、v是数据值,xq是要求点,method是具体算法 method有四种:‘linear’分段线性插值,缺省值 ‘cubic’分段三次多项式插值
12
‘spline’三次样条插值,即在每个分段区间内构造一个三次多项式,使其插值函数满足插值条件,还要求在各个节点出具有光滑的条件 ‘nearest’最邻近区域插值 2)三次样条插值 yy = spline(x,Y,xx)
pp = spline(x,Y) %调用结果用yyi=ppvsl(pp,xxi)
2.二维数据插值
1)插值基点为网格节点(即节点有序) Vq = interp2(X,Y,V,Xq,Yq,‘method’) %二维数据插值,用法和二维数据插值相同,method缺省值为linear
2)插值基点为散乱节点 vq = griddata(x,y,v,xq,yq,‘method’)
3.曲线拟合
P=polyfit(x,y,N) %用n阶多项式拟合x,y向量给定的数据; PA=polyval(P,xi) %求xi点上的拟合函数近似值
十.基于MATLAB的图像处理初步
1.图像分类
1)索引图像:图像信息包含一个数据矩阵X和一个颜色印象矩阵MAP,MAP矩阵的每一行分别表示红绿蓝的颜色值,MATLAB中,索引图像是从像素值到颜色印象表值得“直接映射”
2)灰度图像:一副灰度图像是一个数据矩阵I,其中I中的数据均代表了在一定范围中的颜色灰度值。MATLAB中把灰度图像存储在一个数据矩阵,该数据矩阵中的元素分别代表了图像中的像素。
3)RGB图像:即真彩图像,在MATLAB中存储为n*m*3的数据矩阵。数组中的元素定义了图像中每一个像素的红绿蓝的颜色值。
4)二值图像:与灰度图像相同,二值图像只需要一个数据矩阵,每个像素只取两灰度值。
2.图像的读取和显示
info=imfinfo(’文件名.格式’)%获取图像信息 A = imread(filename, 文件格式)
[X, map] = imread(...) %二维图像读取,如索引图像
imwrite(A,filename) %writes image data A to the file specified by filename
13
imshow 文件名.格式 %显示图像 image(图像数据)%显示图像 3.图像格式之间的转换 详见help。
14
因篇幅问题不能全部显示,请点此查看更多更全内容