MATLAB入门.docx
《MATLAB入门.docx》由会员分享,可在线阅读,更多相关《MATLAB入门.docx(25页珍藏版)》请在冰点文库上搜索。
![MATLAB入门.docx](https://file1.bingdoc.com/fileroot1/2023-6/1/fce64206-b425-43ea-92d3-f22340af549d/fce64206-b425-43ea-92d3-f22340af549d1.gif)
MATLAB入门
MATLAB入门
MATLAB是由美国Mathworks公司推出的一个科技应用软件,其名由matrix(矩阵)和laboratory(实验室)的前三个字母拼成。
作为一种广泛应用于工程计算及数值分析领域的新型高级语言,它用非常方便的环境把科学计算、结果可视化和编程集中起来,因而功能强大、简单易学,编程效率高,深受广大科技工作者和数学建模者的欢迎。
.
2.1.变量与函数
2.1.1.变量
MATLAB中变量的命名规则是:
(1)变量名必须是不含空格的单个词;
(2)变量名区分大小写;
(3)变量名最多不超过19个字符;
(4)变量名必须以字母开头,之后可以是任意字母、数字或下划线,变量名中不允许使用标点符号.
特殊变量取值
ans用于结果的缺省变量名
pi圆周率的近似值
eps数学中无穷小的近似值
flops浮点运算数
inf无穷大,如1/0=inf(infinity)
NaN不定量,如0/0=NaN(NotaNumber)
i,j虚数单位
nargin所用函数的输入变量数目
nargout所用函数的输出变量数目
realmin最小可用正实数
realmax最大可用正实数
2.3M-文件
MATLAB的内部函数是有限的,有时为了研究某一个函数的各种性态,需要为MATLAB定义新函数,为此必须编写函数文件.函数文件是文件名后缀为M的文件,这类文件的第一行必须是一特殊字符function开始,格式为:
function因变量名=函数名(自变量名)
函数值的获得必须通过具体的运算实现,并赋给因变量.
M文件建立方法:
(1).在MATLAB中,点:
File→New→M-file
(2).在编辑窗口中输入程序内容
(3).点File→Save,存盘,M文件名必须与函数名一致.
2.4矩阵及其运算
(1)数组的输入
简单数组的创建方法:
命令用途
x=[1234]创建指定元素的行向量
x=first:
last创建从开始,加1计数,到结束的行向量
x=first:
increment:
last创建first开始,加increment计数,last结束的行向量
x=linspace(first,last,n)创建first开始,到last结束,n个元素的行向量
x=logspace(first,last,n)创建开始,到结束,n个元素的对数分隔行向量
数组与数组的运算
维数相同的数组才能进行运算。
加、减、乘、除、幂运算可按元素对元素方式进行。
数组与数组的运算
设a=[a1a2…an],b=[b1b2…bn],则
a+b=[a1+b1a2+b2…an+bn];
a.*b=[a1*b1a2*b2…an*bn];
a./b=[a1/b1a2/b2…an/bn];
a.\b=[a1.\b1a2.\b2…an.\bn];
a.^b=[a1^b1a2^b2…an^bn];
corrcoef(a,b),两序列a,b的相关系数;
计算矩阵X中的每一行向量与矩阵Y中每个列向量之间的欧氏距离;
计算矩阵X中的每一行向量与矩阵Y中每个列向量之间的绝对距离。
(2).矩阵的输入
(2.1)直接输入法
从键盘直接输入矩阵的元素。
例如
A=[123;456;789],回车就可以了。
(2.2)外部文件输入法
可以利用任意的文本编辑器编辑所要使用的矩阵,利用MATLAB的load函数调用数据文件,调用方法为:
load+文件名。
例如,先在记事本中建立文件:
data1.txt
123
456
789
在MATLAB命令窗口输入
loaddata1.txt
data1
data1=
123
456
789
Load函数会从文件名所指定的文件中读取数据,并将数据赋给以文件名命名的变量。
(3).特殊矩阵的建立
生成特殊矩阵的命令函数
a=[]生成空矩阵
a=zeros(m,n)生成m行n列的零矩阵
a=ones(m,n)生成m行n列全为1的矩阵
a=eye(m,n)生成m行n列的单位矩阵
rand(m)生成m阶均匀分布的随机矩阵
randn(m)生成m阶正态分布的随机矩阵
(4).矩阵中元素或块的操作
矩阵中元素或块的常用操作
表达式或命令函数功能
A(k,:
)提取矩阵A的第k行
A(:
k)提取矩阵A的第k列
A(:
)依次提取矩阵A的每一列,将矩阵A拉伸为一个列向量
A(i1:
i2,j1:
j2)提取矩阵A的第i1行~i2行、第j1列~j2列,构成新矩阵
A([abcd],:
)提取矩阵A指定的第abcd行,构成新矩阵
A(:
[abcd])提取矩阵A指定的第abcd列,构成新矩阵
A(i1:
i2,:
)=[]删除A的第i1~i2行,构成新矩阵
A(:
j1;j2)=[]删除A的第j1~j2列,构成新矩阵
[AB]将矩阵A和B拼成新矩阵
A’矩阵A的转置
(5).矩阵的基本运算
矩阵的函数运算命令
det(A)求矩阵A的行列式
inv(A)求矩阵A的逆矩阵
eig(A)求矩阵A的特征值与特征向量
rref(A)求矩阵A的阶梯形的最简形式
rank(A)求矩阵A的秩
find(A==a)求矩阵A中元素a的位置
例symsA
A=[123;456;789]
A=
123
456
789
>>find(A==6)
ans=
8
说明用命令rank(A)可以求出矩阵A的秩,命令rref(A)把矩阵A化作行阶梯型最简形,也可以求出矩阵的秩,进而可以求出向量组的极大线性无关向量组:
以给定的向量组为列,做一个矩阵
用命令rref(A)将A化成行阶梯型最简形式,其中单位向量对应的列向量即为最大线性无关组所含向量,其它列向量的坐标即为其对应向量用最大线性无关组线性表示的系数.
例2.1 设
,求
的秩.
输入:
A=[1,0,2,1,0;7,1,14,7,1;0,5,1,4,6;2,1,1,-10,-2];
rank(A)
输出为:
ans=
3
或输入:
A=[1,0,2,1,0;7,1,14,7,1;0,5,1,4,6;2,1,1,-10,-2];
rref(A)
输出:
ans=
1.000000.0000-7.0000-2
01.0000001
001.000041
00000
因此
的秩为3.
注:
矩阵的秩等于它的行向量组的秩,也等于它的列向量组的秩,因此,可以用rref求向量组的秩.
例2.2求向量
的秩.
输入:
A=[1,2,-1,1;0,-4,5,-2;2,0,3,0];
rref(A)
输出为:
ans=
1.000001.50000
01.0000-1.25000.5000
0000
矩阵的秩为2,所以它的行向量组的秩也是2.
例2.3向量组
是否线
性相关?
注:
向量组线性无关的充要条件是:
它的秩等于其中向量的个数.
输入:
A=[1,1,2,3;1,-1,1,1;1,3,4,5;3,1,5,7];
rref(A)
ans=
1002
0101
0010
0000
向量组的秩等于3,而它含有4个向量,所以该向量组线性相关.
例2.4求向量
的一个最大无关组,并将其余向量用极大无关组线性表示..
输入:
A=[1,-2,-1,0,2;-2,4,2,6,-6;2,-1,0,2,3;3,3,3,3,4];
B=rref(a)
输出:
B=101/3016/3
012/30-1/9
0001-1/3
00900
因此,
是列向量组的一个最大无关组.且有
.
例2.5设
验证
是R3的一个基,并把
用这个基线性表示.
输入:
a=[2,2,-1;2,-1,2;-1,2,2];b=[1,4;0,3;-4,2];
c=rref([a,b])
输出为:
c=
1002/34/3
010-2/31
001-12/3
可见
的秩为3,因此
线性无关,
是R3的一个基,而且
,
.
(6)符号变量和符号运算函数
符号运算函数
factor(f)因式分解,也可用于正整数的分解
expand(f)展开函数
collect合并同类项,按指定变量的次数合并系数
simplify化简函数
vpa((S,d)求符号表达式S在精度digits(d)下的数值解
floor(x)地板函数,舍去正小数至最近整数
ceil(x)天花板函数,加入正小数至最近整数
rem(x,y)求x除以y的余数
gcd(x,y)整数x和y的最大公约数
lcm(x,y)整数x和y的最小公倍数
factorial(x)正整数x的阶乘
sort(x)将数组x递增排序
sort(x,'descend')将数组x递减排序
rat(x)将实数x化为连分数表示
2.5MATLAB绘图
MATLAB具有多种图形特性,既可以在图形窗口中由菜单和工具栏的按钮处理图形,也可以在CommandWindow中使用命令来定制,这里主要介绍命令函数。
(1).plot绘图
MATLAB有很强的绘图功能,我们先介绍最简单的二维绘图指令plot。
Plot指令用来画变量x对函数y的二维图,例如要画出y=sin(x),0symsxy
x=0:
0.1:
2*pi;y=sin(x);plot(x,y).
plot可以在一个图上画数条曲线,且可以用不同的符号和颜色来标示曲线。
格式1:
plot(x,y,s)(x,y是同维向量)
格式2:
plot(x,
,
,x,
,……x,
)
我们作如下说明:
(1)格式1是以x,y的对应元素为坐标绘制二维曲线。
s的常用内容为:
‘y’黄色;‘r’红色;‘g’绿色;‘b’蓝色;‘.’点;‘-’连线;‘+’加号;'--'长虚线;‘o’圈。
格式2是在一张图上画数条曲线。
(2)二维图及三维图都可使用指令grid加上格线。
使用gridoff去掉格线。
MATLAB会将绘图在另一个视窗展示出来。
(称为MATLABFigureWindows)。
例如:
symsxyz
x=-2*pi:
0.1:
2*pi;y=sin(x);z=cos(x);
plot(x,y,'r',x,z,'b')
图1.7
又如,画分段函数
的图像。
x1=-2:
0.1:
0;y1=x1.^2;x2=0:
0.1:
2;y2=x2+1;
plot(x1,y1,x2,y2)
图2.1
又如,
x=-10:
0.01:
10;
y=x.^2.*(x>0)+sin(x).*(x<=0);
plot(x,y)
(2).ezplot作图
格式:
ezplot(‘f(x)’,[a,b])
描绘出a格式:
ezplot(‘f(x,y)’,[a,b,c,d]):
描绘出a格式:
ezplot(‘x(t)’,’y(t)’,[t1,t2]):
描绘出在区间[t1,t2]上参数方程x=x(t),y=y(t)表示的函数图形。
例2.6在[0,pi]上画y=sin(x)的图形。
解输入命令ezplot(‘sin(x)’,[0,pi])
例2.7在[0,2*pi]上画
,
星形图。
解输入命令ezplot('cos(t).^3','sin(t).^3',[0,2*pi])
图2.2
例2.8在[-2,0.5],[0,2]上画隐函数
的图。
解输入命令ezplot('exp(x)+cos(x*y)',[-2,0.5,0,2])
例2.9在[-1,2]上画
的图形
symsxy
y=exp(3*x)+sin(2*x.^2);
ezplot(y,[-1,2])
例2.10ezplot('x.^2.*(x>0)+sin(x).*(x<=0)')
图2.3
(3).fplot作图
格式:
fplot(‘fun’,lims)
表示绘制字符串fun指定的函数在lims=[xmin,xmax]的图形.fun必须是M文件的函数名或是独立变量为x的字符串.绘图命令用起来很方便,命令中的画图区间与手写表示的区间是一致的。
虽不能画参数方程和隐函数图形,但可以把多个图形画在一个图上。
例2.11fplot('[sin(x),cos(x),x^2]',2*[-1,1])
图2.4
(4).三维曲线图
MATLAB三维曲线作图的指令结构为:
plot3(x,y,z,s)
x,y,z是n维向量,分别表示曲线上点集的横坐标、纵坐标、竖坐标,按照空间曲线的参数方程确定曲线点集来作图的。
例2.12t=0:
pi/50:
10*pi;plot3(sin(t),cos(t),t)
图2.5
(5).三维网格图
命令调用格式:
ezmesh(z),用于绘制函数
在默认平面区域内的网格图。
命令调用格式:
ezmesh(z,[a,b,c,d]),用于绘制函数
在平面区域
内的网格图。
例2.13作出函数
(
)的三维网格图形。
symsxytz
t=(x^2+y^2)^(1/2);
z=sin(t)/t;
ezmesh(z,[-8,8,-8,8])
图2.6
2.6MATLAB编程
(1)for-end循环语句的格式:
for循环变量=初值:
步长:
终值
循环体语句
end
例2.14对n=1到10,分别求sin(n*pi/10).
matlab程序如下:
在命令窗口输入如下命令
forn=1:
10
x(n)=sin(n*pi/10);
end
x
x=
0.30900.58780.80900.95111.00000.95110.80900.58780.30900.0000
例2.15x=zeros(1,6);%x是一个1行6列的零矩阵
fori=1:
6,
x(i)=1/i;
end
formatrat%使用分数来表示数值
disp(x)
11/21/31/41/51/6
例2.16求1~100的整数的和。
在命令窗口输入如下命令
sum=0;
fori=1:
100
sum=sum+i;
end
sum
sum=
5050
注意:
循环可以是多层的,循环的嵌套调用格式:
for循环变量1=初值1:
步长1:
终值1
for循环变量2=初值2:
步长2:
终值2
循环体语句
end
end
例2.17构造一个5行5列的Hilbert矩阵h,其中第i行第j列元素为1/(i+j-1).
matlab程序如下:
在命令窗口输入如下命令
symshij
h=zeros(5);
fori=1:
5,
forj=1:
5,
h(i,j)=1/(i+j-1);
end
end
formatrat
disp(h)
11/21/31/41/5
1/21/31/41/51/6
1/31/41/51/61/7
1/41/51/61/71/8
1/51/61/71/81/9
(2)while循环语句(条件循环方式),一般格式为
while表达式
循环体语句
end
while循环语句一般用于事先不知道循环次数的情况。
例2.18设银行年利率为11%,将10000元存入银行,多长时间连本带利翻一番?
程序如下:
money=10000;
years=0;
whilemoney<20000
years=years+1;
money=money*1.11;
end
years
money
years=
7
money=
103808/5
以上是这种循环单分支的情形,以下还有双分支、多分支的情形。
双分支if-else-end语句调用格式
if表达式
语句体1
else
语句体2
end
多分支if语句调用格式:
if表达式1
语句体1;
elseif表达式2
语句体2;
else
语句体3
end
例2.19已知函数f(x)=
求f(-1),f(0.5),f(1.5),画出此函数的图像。
解symsxy
y=[];
forx=-1:
0.1:
2
ifx>=-1&x<0
y=[y,x+1];
ifx==-1
f1=x+1
end
elseifx>=0&x<1
y=[y,1];
ifx==0.5
f2=1
end
else
y=[y,x^2];
ifx==1.5
f3=x^2
end
end
End
x=-1:
0.1:
2;
f1=
0
f2=
1
f3=
2.2500
>>plot(x,y)
图2.7
例2.20设
求
。
解在M-文件里
functionf=fun2(x)
ifx>1
f=x^2+2
elseifx<=0
f=x^3
else
f=3*x
end
end
在命令窗口:
fun2(1.5)
fun2(1.5)
f=
4.2500
fun2(0.5)
f=
1.5000
fun2(-2)
f=
-8
例2.21计算
。
解clear
symssn
s=0;n=1;
whilen<=100
s=s+1/n/n;
n=n+1;
end
s
s=
1.6350
实验2
[实验2.1]计算下列各式的值:
(写出格式及执行结果)
(1)
;
(2)
;(3)
;(4)8!
;
(5)x=[4,5,6,7,3,2],求它的升序排列与降序排列;
[实验2.2]
,计算:
;
[实验2.3]在计算机上练习以下算式的输入:
; .
[实验2.4]在一幅图上画出一个周期的正弦曲线和余弦曲线,正弦曲线用蓝色,余弦曲线用红色.
[实验2.5]画出函数
在
上的图像。
实验2.6]绘出函数
在
上的图象。
[实验2.7]画出函数
在[-1,2]上的图象.
[实验2.8]画出函数
在
上的网格图。
[实验2.9]已知矩阵
,求它的行列式、秩、逆矩阵。
将此矩阵化为阶梯形最简形式。
求此矩阵的1行、2行,2列、3列的元素排成的矩阵。
取出此矩阵的第3行。
取出此矩阵的第2列。
删除此矩阵的第1列。
[实验2.10]编程求
[实验2.11]设
编程求
。