MATLAB简介+图像轮廓线提取+图像分割技术Word文档下载推荐.doc
《MATLAB简介+图像轮廓线提取+图像分割技术Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《MATLAB简介+图像轮廓线提取+图像分割技术Word文档下载推荐.doc(54页珍藏版)》请在冰点文库上搜索。
![MATLAB简介+图像轮廓线提取+图像分割技术Word文档下载推荐.doc](https://file1.bingdoc.com/fileroot1/2023-5/11/daf2956d-d5fa-4c22-94aa-6a69a89b059a/daf2956d-d5fa-4c22-94aa-6a69a89b059a1.gif)
ans=
1.5645e+004
a=5^6+sin(pi)+exp(3)↙
a=
例2:
已知矩阵,对它们做简单的关系与逻辑运算
A=[1,2;
1,2];
↙
B=[1,1;
2,2];
C=(A<
B)&
(A==B)↙
C=
00
00
四、MATLAB的数据显示格式
虽然在MATLAB系统中数据的存储和计算都是双精度进行的,但MATLAB可以利用菜单或format命令来调整数据的显示格式。
Format命令的格式和作用如下:
lformat|formatshort5位定点表示
lformatlong15位定点表示
lformatshorte5位浮点表示
lformatlonge15位浮点表示
lformatshortg系统选择5位定点和5位浮点中更好的表示
lformatlongg系统选择15位定点和15位浮点中更好的表示
lformatrat近似的有理数的表示
lformathex十六进制的表示
lformatbank用元角分(美制)定点表示
lformatcompact变量之间没有空行
lformatloose变量之间有空行
例3:
对数用五位定点、十五位定点以及有理数形式表示出来。
a=5+sin(7),formatshort,a↙
5.6570
formatrat,a↙
3117/551
formatlong,a↙
5.65698659871879
五、MATLAB中的常用函数
数学上的函数,MATLAB基本上都有。
表5.1常用的三角函数
函数名称
函数功能sinx
函数功能
sin(x)
正弦函数cosx
asin(x)
反正弦函数asinx
cos(x)
余弦函数tanx
acos(x)
反余弦函数acosx
tan(x)
正切函数cotx
atan(x)
反正切函数atanx
cot(x)
余切函数cotx
acot(x)
反余切函数acotx
sec(x)
正割函数secx
asec(x)
反正割函数asecx
sinh(x)
双曲函数sinhx
asinh(x)
反双曲函数asinhx
表5.2常用的计算函数
abs(x)
求变量x绝对值|x|
sqrt(x)
求变量x的算术平方根
real(x)
求复数x的实部
image(x)
求复数x的虚部
round(x)
四舍五入至最近整数
fix(x)
无论正负,舍去小数至最近整数
sign(x)
符号函数
rem(x,y)
求x除以y的余数
exp(x)
自然指数
pow2(x)
2的指数
log(x)
自然对数lnx
log2(x)
以2为底的对数
log10(x)
以10为底的对数
六、矩阵的操作
MATLAB的基本单位是矩阵,它是的MATLAB精髓,掌握矩阵的输入、各种数值运算以及矩阵函数的使用是以后能否学好MATLAB的关键。
l矩阵的输入
(1)直接输入创建矩阵
整个矩阵以“[”和“]”作为首尾,同行的元素用“,”或空格隔开,不同行的元素用“;
”或按Enter键来分隔;
矩阵的元素可以为数字也可以为表达式,如果进行的是数值计算,表达式中不可包含未知的变量。
例4:
直接输入创建矩阵
A=[1,2,3;
4,15,60;
7,8,9]↙
(2)用矩阵函数来生成矩阵
MATLAB提供了大量的函数来创建一些特殊的矩阵。
表5.3常用的矩阵函数
zeros(m,n)
m行n列的零矩阵
eig(A)
求矩阵A的特征值
eye(n)
n阶方矩阵
poly(A)
求矩阵A特征多项式
ones(m,n)
m行n列元素为1的矩阵
trace(A)
求矩阵A的迹
rand(m,n)
m行n列的随机矩阵
cond(A)
求矩阵A的条件数
randn(m,n)
m行n列的正态随机矩阵
rref(A)
求矩阵A的行最简形
magic(n)
n阶魔方矩阵
inv(A)
求矩阵A的逆矩阵
hess(A)
hess矩阵
det(A)
求矩阵A的行列式
sqrtm(A)
求矩阵A的平方根
expm(A)
求矩阵A的指数值
funm(A)
按矩阵计算的函数值
logm(A)
求矩阵A的对数值
rank(A)
求矩阵A的秩
morm(A,1)
求矩阵A的范数
例5:
输入矩阵。
ones(3)↙%生成元素都为1的3阶方阵
例6:
输入矩阵
zeros(2,5)↙%生成元素都为0的2行5列零矩阵
例7:
生成3阶魔方矩阵。
magic(3)↙
l操作符“:
”的说明
j:
k表示步长为1的等差数列构成的数组:
[j,j+1,j+2,…,k]
i:
k表示步长为i的等差数列构成的数组:
[j,j+i,j+2*i,…,k]
A(i:
j)表示A(i),A(i+1),…,A(j)
例8:
操作符冒号”:
”的应用
1:
5↙%步长为1的等差数列。
2:
7↙%步长为2的等差数列。
8:
-2:
0↙%步长为-2的等差、递减数列。
l对矩阵元素的操作
A(i,j)表示矩阵A的第i行第j列元素。
A(:
j)表示矩阵A的第j列。
A(i,:
)表示矩阵A的第i行。
:
)表示A的所有元素构造2维矩阵
)表示以矩阵A的所有元素按列做成的一个列矩阵。
A(i)表示矩阵A(:
)的第i个元素。
[]表示空矩阵
l元素的抽取与赋值
例9:
已知矩阵,抽取与修改矩阵A的一些元素
A=[12356;
sin(3)79;
log
(2)61]↙%输入矩阵A。
A(2,3)↙%求矩阵A的第二行第三列元素。
A(4)↙%求矩阵A的第四个元素。
A(2:
4)↙%取矩阵A的A
(2),A(3),A(4)。
A(1,:
)↙%取矩阵A的第一行。
3)%取矩阵A的第三列
a=A(1,3)↙%把矩阵A的第一行第三列元素赋值给变量a。
A(2,1)=100↙%把矩阵A的第二行第一列元素修改为100。
l矩阵的扩充
例10:
已知矩阵,利用A与B生成矩阵,
,。
A=[1,3;
6,9];
%输入矩阵A
C=A↙
C(1,3)=100;
%把矩阵A扩充为1行3列矩阵
B=[1,5;
0,8];
↙%输入矩阵B
D=[A,B]↙%由矩阵A与B合成矩阵D
AA=[A,zeros
(2);
zeros
(2),B]↙%由矩阵A与B合成分块矩阵AA
l矩阵的部分删除
例11:
已知矩阵,删除矩阵A的第一行。
log
(2)61];
↙
)=[]↙%删除矩阵A的第一行
l矩阵的运算
A+B:
矩阵加法A-B:
矩阵减法
A*B:
矩阵乘法A\B:
矩阵的左除
A/B:
矩阵的右除transpose(A)或A’:
A的转置
:
数k乘以Adet(A):
A的行列式:
rank(A):
A的秩
七、数组
数组就是一行或者一列的矩阵,前边介绍的对矩阵输入、修改、保存都适用于数组,同时MATLAB还提供了一些创建数组的特殊指令。
l特殊数组的创建
linspace(a,b,n)给出区间[a,b]的n个等分点数据
logspace(a,b,n)给出区间的n个等比点数据,公比为。
例12:
linspace(0,1,6)↙%给出区间[0,1]的6个等分点数据
logspace(0,1,6)↙%给出区间的6个等比点数据
l数组运算
除了作为1×
n矩阵应遵循矩阵的运算规则外,MATLAB还为数组提供了一些特殊的运算:
乘法为:
.*,左除为:
.\,右除为:
./,乘幂为:
.^
设数组,,则对应的运算具体为:
例13:
数组运算例题
a=1:
5↙%定义数组a
b=3:
11↙%定义数组b
a.^2↙%数组a的每一个元素求平方
a.*b↙%数组a的每一个元素乘以对应的数组b的元素
例14:
计算的值。
x=-pi:
pi/2:
pi;
↙%定义自变量x
y=sin(x)↙%求自变量x的每一个元素对应的正弦值
八、M文件
M文件有两种形式:
命令文件和函数文件。
它们都是由若干MATLAB语句或命令组成的文件。
两种文件的扩展名都是.m。
若程序为命令文件,则程序执行完以后,中间变量仍予以保留;
若程序为函数文件,则程序执行完以后,中间变量被全部删除。
l文件的操作
在MATLAB中新建M文件的操作是在命令窗口中选择File|New|M-File,然后用鼠标单击M-File,就可以打开MATLAB自带的M文件编辑器。
也可以对已经存在的M文件进行编辑、存储、修改和读取。
l命令文件
M文件有两种运行方式:
一是在命令窗口直接写文件名,按Enter键;
二是在编辑窗口打开菜单Tools,再单击Run。
M文件保存的路径一定要在搜索路径上,否则M文件不能运行。
以下例题中如果不做特别说明,都是以第一种方式运行的。
例15:
用M命令文件画出衰减振荡曲线及其它的包络线。
的取值范围是。
1.打开M文件编辑窗口;
2.在编辑窗口逐行写下列语句;
t=0:
pi/50:
4*pi;
y0=exp(-t/3);
y=exp(-t/3).*sin(3*t);
plot(t,y,'
-r'
t,y0,'
:
b'
t,-y0,'
)
3.保存M文件,并且保存在搜索路径上,文件名为a1.m;
4.运行M文件。
lM函数文件
M函数文件的一般形式为:
function<
因变量>
=<
函数名>
(<
自变量>
)
M函数文件可以有多个因变量和多个自变量,当有多个因变量时用[]括起来。
例16:
设可逆方阵为A,编写同时求的M函数文件。
1.打开M文件编辑窗口;
2.在编辑窗口逐行写下列语句;
function[da,a2,inva,traa]=comp4(x)
%M函数文件comp4.m同时求矩阵x的四个值
%da为矩阵x的行列式
%a2为矩阵x的平方
%inva为矩阵x的逆矩阵
%traa为矩阵x的转置
da=det(x)
a2=x^2
inva=inv(x)
traa=x'
3.保存M函数文件,并且保存在搜索路径上,文件名为comp4.m;
4.命令窗口执行下列语句:
5,8];
↙%输入矩阵A。
comp4(A)↙%调用comp4.m函数计算矩阵A的。
九、程序设计语句
lfor循环
fori=范围表达式
可执行语句
end
例17:
利用for循环求1~100的整数之和。
解:
(1).建立命令文件exam1.m。
%利用for循环求1~100的整数之和
sum=0;
fori=1:
100
sum=sum+i;
end
sum
(2)执行命令文件exam1.m。
exam1↙
例18:
利用for循环找出100~200之间的所有素数。
(1).建立命令文件exam2.m。
%利用for循环找出100~200之间的所有素数
disp('
100~200之间的所有素数为:
'
form=100:
200
k=fix(sqrt(m));
%求m的算术平方根然后取整.
fori=2:
k+1
ifrem(m,i)==0%求整数m与i的余数
break;
end
ifi>
=k+1
disp(int2str(m))%以字符串的形式显示素数.
end
end
(2)执行命令文件exam2.m。
lwhile循环
while逻辑表达式
循环体语句
例19:
利用while循环来计算1!
+2!
+¼
+50!
的值。
(1).建立命令文件exam3.m
%利用while循环来计算1!
+...+50!
的值
i=1;
whilei<
51
prd=1;
j=1;
whilej<
=i
prd=prd*j;
j=j+1;
end
sum=sum+prd;
i=i+1;
disp(‘1!
的和为:
’)
(2)执行命令文件exam3.m
lif-else-end分支
(1)if逻辑表达式
执行语句
功能:
如果表达式的值为真,就执行语句,否则执行end后面的语句.
(2)if逻辑表达式
执行语句1
else
执行语句2
end
如果表达式的值为真,就执行语句1,否则执行语句2.
(3)if逻辑表达式1
elseif逻辑表达式2
执行语句2
语句n
end
如果表达式1的值为真,就执行语句1,然后跳出if执行语句;
否则判断表达式2,如果表达式2的值为真,就执行语句2,然后跳出if执行语句.否则依此类推,一直进行下去.如果所有的表达式的值都为假,就执行end后面的语句.
编一函数计算函数值:
(1).建立M函数文件yx.m。
functiony=yx(x)
ifx<
1
y=x
elseifx>
=1&
x<
=10
y=2*x-1
10&
=30
y=3*x-11
y=sin(x)+log(x)
(2).调用M函数文件计算。
result=[yx(0.2),yx
(2),yx(30),yx(10*pi)]↙
lswitch-case-end分支
switch表达式
case常量表达式1
语句块1
case常量表达式2
语句块2
case{常量表达式n,常量表达式n+1,…}
语句块n
otherwise
语句块n+1
功能:
switch语句后面的表达式可以为任何类型;
每个case后面的常量表达式可以是多个,也可以是不同类型;
与if语句不同的是,各个case和otherwise语句出现的先后顺序不会影响程序运行的结果。
例20:
编一个转换成绩等级的函数文件,其中成绩等级转换标准为考试成绩分数在[90,100]分显示优秀;
在[80,90)分显示良好;
在[60,80)分显示及格;
在[0,60)分显示不及格。
(1).建立M函数文件ff.m
functionresult=ff(x)
n=fix(x/10);
switchn
case{9,10}
disp('
优秀'
case8
良好'
case{6,7}
disp('
及格'
不及格'
(2).调用M函数文件判断99分,56分,72分各属于哪个范围.。
ff(99)↙%优秀
ff(56)↙%不及格
ff(72)↙%及格
十、Matlab绘图
1.plot(y)
功能:
画一条或多条折线图。
其中y是数值向量或数值矩阵。
说明:
当y是数值向量时,plot(y)在坐标系中顺序的用直线段连接顶点(i,y(i))画出一条折线图;
当y是数值矩阵时,Matlab为矩阵的每一列画出一条折线,绘图时,以矩阵y每列元素的相应行下标值为横坐标,以y的元素为纵坐标绘制的连线图。
例21:
画出向量[1,3,2,9,0.5]折线图。
y=[1,3,2,9,0.5];
↙
plot(y)↙
2.plot(x,y)
画一条或多条折线图。
其中x可以是长度为n的数值向量或是n´
m的数值矩阵,y也可以是长度为n的数值向量或是n´
m的数值矩阵。
¬
当x,y都是长度为n的数值向量时,plot(x,y)在坐标系中顺序的用直线段连接顶点(x(i),y(i))画出一条折线图;
当x是长度为n的数值向量且y是n´
m的数值矩阵时,plot(x,y)用向量x分别与矩阵y的每一列匹配,在同一坐标系中绘出m条不同颜色的折线图;
®
当x和y都是n´
m的数值矩阵时,plot(x,y)分别用矩阵x的第i列与矩阵y的第i列匹配,在同一坐标系中绘出m条不同颜色的折线图。
注:
plot(x,y)命令可以用来画通常的函数f(x)图形,此时向量x常用命令x=a:
h:
b的形式获得f(x)函数在绘图区间[a,b]上的自变量点向量数据,对应的函数向量值取为y=f(x)。
步长h可以任意选取,一般,步长越小,曲线越光滑,但是步长太小,会增加计算量,运算速度要降低。
通常步长h取为0.1可以达到较好的绘图效果。
如果想在图形中标出网格线,用命令:
plot(x,y),gridon即可。
例22:
画出函数y=sinx2在-5£
x£
5的图形。
解:
x=-5:
.1:
5;
↙%取绘图横坐标向量点x
y=sin(x.^2);
plot(x,y),gridon↙
例23:
画出椭圆的曲线图。
对于这种情形,首先把它写成参数方程。
2*pi;
x=5*cos(t);
y=2*sin(t);
plot(x,y),gridon
3.plot(x1,y1,x2,y2,x3,y3…)
在同一图形窗口画出多条不同颜色曲线,曲线关系为:
。
例24:
在同一图形窗口画出三个函数y=cos2x,y=x2,y=x的图形。
x=-2:
2;
plot(x,cos(2*x),x,x.^2,x,x)↙
legend('
cos(2x)'
'
x^2'
x'
)↙
4.ezplot(F,[xmin,xmax])
画出符号函数F在区间[xmin,