第2章 MATLAB算术运算初步.docx
《第2章 MATLAB算术运算初步.docx》由会员分享,可在线阅读,更多相关《第2章 MATLAB算术运算初步.docx(24页珍藏版)》请在冰豆网上搜索。
第2章MATLAB算术运算初步
MATLAB算术运算初步
一、帮助
● 一旦发现指令不知如何使用时,help命令将告诉你使用。
例:
helpsin
在MATLAB下进行基本数学运算,只需将运算式直接打入提示号(>>)并按入Enter键即可。
例如:
(10*19+2/4-34)/2*3
ans
=234.7500
MATLAB会将运算结果直接存入一变数ans,代表MATLAB运算後的答案,并显示其数值屏幕上。
如果在上述的例子结尾加上”;”,则计算结果不会显示在指令视窗上,要得知计算值只须键入该变数值即可
● MATLAB可以将计算结果以不同的精确度的数字格式显示,我们可以在指令视窗上的功能选单上的Options下选NumericalFormat,或者直接在指令视窗键入以下的各个数字显示格式的指令。
»formatshort(这是默认的)
MATLAB利用了↑↓二个游标键可以将所下过的指令叫回来重覆使用。
按下↑则前一次指令重新出现,之后再按Enter键,即再执行前一次的指令。
而↓键的功用则是往后执行指令。
其它在键盘上的几个键如→←,Delete,Insert,其功能则显而易见,试用即知无须多加说明。
当要暂时执行作业系统(例如Dos)的指令而还要执行MATLAB,可以利用!
加上原作业系统的指令,例如!
dir,!
formata:
。
● Ctrl-C(即同时按Ctrl及C二个键)可以用来中止执行中的MATLAB的工作。
● 有三种方法可以结束MATLAB
1.exit
2.quit
3.直接关闭MATLAB的命令视窗(Commandwindow)
变量及其命名规则
● 变量
1. 变量名的大小写是敏感。
2. 变量的第一个字符必须为英文字母,而且不能超过31个字符。
3. 变量名可以包含下连字符、数字,但不能为空格符、标点。
预定义的变量
ans
预设的计算结果的变量名
eps
MATLAB定义的正的极小值=2.2204e-16
pi
内建的π值
inf
∞值,无限大(
)
NaN
无法定义一个数目(
)
i或j
虚数单位i=j=√-1
nargin
函数输入参数个数
nargout
函数输出参数个数
realmax
最大的正实数
realmin
最小的正实数
flops
浮点运算次数
而键入clear则是去除所有定义过的变量名称。
MATLAB赋值语句
● 表达式
MATLAB书写表达式的规则与“手写算式”差不多相同。
如果一个指令过长可以在结尾加上...(代表此行指令与下一行连续),例如
?
3*...
6
ans=
18
MATLAB常用数学函数
● 三角函数和双曲函数
名称
含义
名称
含义
名称
含义
sin
正弦
csc
余割
atanh
反双曲正切
cos
余弦
asec
反正割
acoth
反双曲余切
tan
正切
acsc
反余割
sech
双曲正割
cot
余切
sinh
双曲正弦
csch
双曲余割
asin
反正弦
cosh
双曲余弦
asech
反双曲正割
acos
反余弦
tanh
双曲正切
acsch
反双曲余割
atan
反正切
coth
双曲余切
atan2
四象限反正切
acot
反余切
asinh
反双曲正弦
sec
正割
acosh
反双曲余弦
● 指数函数
名称
含义
名称
含义
名称
含义
exp
E为底的指数
log10
10为底的对数
pow2
2的幂
log
自然对数
log2
2为底的对数
sqrt
平方根
● 复数函数
名称
含义
名称
含义
名称
含义
abs
绝对值
conj
复数共轭
real
复数实部
angle
相角
imag
复数虚部
● 圆整函数和求余函数
名称
含义
名称
含义
ceil
向+∞圆整
rem
求余数
fix
向0圆整
round
向靠近整数圆整
floor
向-∞圆整
sign
符号函数
mod
模除求余
● 矩阵变换函数
名称
含义
名称
含义
fiplr
矩阵左右翻转
diag
产生或提取对角阵
fipud
矩阵上下翻转
tril
产生下三角
fipdim
矩阵特定维翻转
triu
产生上三角
Rot90
矩阵反时针90翻转
● 其他函数
名称
含义
名称
含义
min
最小值
max
最大值
mean
平均值
median
中位数
std
标准差
diff
相邻元素的差
sort
排序
length
个数
norm
欧氏(Euclidean)长度
sum
总和
prod
总乘积
dot
内积
cumsum
累计元素总和
cumprod
累计元素总乘积
cross
外积
MATLAB系统命令
命令
含义
help
在线帮助
helpwin
在线帮助窗口
helpdesk
在线帮助工作台
demo
运行演示程序
ver
版本信息
readme
显示Readme文件
who
显示当前变量
whos
显示当前变量的详细信息
clear
清空工作间的变量和函数
pack
整理工作间的内存
load
把文件调入变量到工作间
save
把变量存入文件中
quit/exit
退出MATLAB
what
显示指定的matlab文件
lookfor
在HELP里搜索关键字
which
定位函数或文件
path
获取或设置搜索路径
echo
命令回显
cd
改变当前的工作目录
pwd
显示当前的工作目录
dir
显示目录内容
unix
执行unix命令
dos
执行dos命令
!
执行操作系统命令
computer
显示计算机类型
MATLAB语言中的关系与逻辑运算
在执行关系及逻辑运算时,MATLAB将输入的不为零的数值都视为真(True)而为零的数值则视为否(False)。
运算的输出值将判断为真者以1表示而判断为否者以0表示。
各个运算元须用在二个大小相同的阵列或是矩阵中的比较
● 关系运算
指令
含义
<
小于
<=
小于等于
>
大于
>=
大于等于
==
等于
~=
不等于
例:
a=1:
2:
11;
b=2:
1:
7;
a>b
ans=
001111
a==b
ans=
010000
a>=b
ans=
011111
a-(b>4)
ans=
1356810
● 逻辑运算
指令
含义
&
逻辑and
|
逻辑or
~
逻辑not
(a<2)|(b>6)
ans=
100001
c=a+(a>3)|(b<6)
c=
111111
● 逻辑关系函数
指令
含义
xor
不相同就取1,否则取0
any
只要有非0就取1,否则取0
all
全为1取1,否则为0
isnan
为数NaN取1,否则为0
isinf
为数inf取1,否则为0
isfinite
有限大小元素取1,否则为0
ischar
是字符串取1,否则为0
isequal
相等取1,否则取0
ismember
两个矩阵是属于关系取1,否则取0
isempty
矩阵为空取1,否则取0
isletter
是字母取1,否则取0(可以是字符串)
isstudent
学生版取1
isprime
质数取1,否则取0
isreal
实数取1,否则取0
isspace
空格位置取1,否则取0
isequal(a,b)
ans=
0
isreal(a)
ans=
1
isstudent
ans=
0
矩阵的产生
1. 简易阵列
MATLAB的运算事实上是以阵列(array)及矩阵(matrix)方式在做运算,而这二者在MATLAB的基本运算性质不同,阵列强调元素对元素的运算,而矩阵则采用线性代数的运算方式。
而宣告一变数为阵列或是矩阵时,如果是要个别键入元素,须用中括号[]将元素置于其中。
阵列为一维元素所构成,而矩阵为多维元素所组成,例如
x=[12345678];%一维1x8阵列
x=[12345678;4567891011];%二维2x8矩阵,以;区隔各列的元素
x=[12345678%二维2x8矩阵,各列的元素分二行键入
4567891011];
»x(3)%x的第三个元素
ans=
2
»x([125])%x的第一、二、五个元素
ans=
143
x(1:
5)%x的第前五个元素
ans=
14253
»x(10:
end)%x的第十个元素后的元素
ans=
869710811
»x(10:
-1:
2)%x的第十个元素和第二个元素的倒排
ans=
857463524
»x(find(x>5))%x中大于5的元素
ans=
6
7
8
6
9
7
10
8
11
»x(4)=100%给x的第四个元素重新给值
x=
12345678
410067891011
»x(3)=[]%删除第三个元素
x=
Columns1through12
14100364758697
Columns13through15
10811
»x(16)=1%加入第十六个元素
x=
Columns1through12
14100364758697
Columns13through16
108111
2 建立阵列
上面的方法只适用于元素不多的情况,但是当元素很多的时候,则须采用以下的方式:
»x=(0:
0.02:
1);%以:
起始值=0、增量值=0.0.2、终止值=1的矩阵
»x=linspace(0,1,100);%利用linspace,以区隔起始值=0终止值=1之间的元素数目=100
»a=[]%空矩阵
a=
[]
»zeros(2,2)%全为0的矩阵
ans=
00
0 0
»ones(3,3)%全为1的矩阵
ans=
111
111
111
»rand(2,4);随机矩阵
»a=1:
7,b=1:
0.2:
5;%更直接的方式
»c=[ba];%可利用先前建立的阵列a及阵列b,组成新阵列
»a=1:
1:
10;
»b=0.1:
0.1:
1;
»a+b*I%复数阵列
ans=
Columns1through4
1.0000+0.1000i2.0000+0.2000i3.0000+0.3000i4.0000+0.4000i
Columns5through8
5.0000+0.5000i6.0000+0.6000i7.0000+0.7000i8.0000+0.8000i
Columns9through10
9.0000+0.9000i10.0000+1.0000i
在MATLAB的内部资料结构中,每一个矩阵都是一个以行为主(Column-oriented)的阵列(Array)因此对於矩阵元素的存取,我们可用一维或二维的索引(Index)来定址
● 子矩阵
通过一个矩阵产生另一个矩阵的方法(上面已经有例子)
假如一个矩阵A
则A(m1:
m2,n1:
n2)
矩阵的运算
● 经典的算术运算符。
经典的算术运算符
运算符
MATLAB表达式
加
+
a+b
减
-
a-b
乘
*
a*b
除
/或\
a/b或a\b
幂
^
a^b
● 前面我们已经把经典的算术运算符告诉大家了,在这里同样也可以使用。
»a=1:
1:
10;
»b=0:
10:
90;
»a+b
ans=
11223344556677889100
»a-b
ans=
1-8-17-26-35-44-53-62-71-80
»a.*b%注意这里a后加了个“.”
ans=
02060120200300420560720900
»a/b
ans=
0. 1158
»a\b
ans=
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0123456789
»b./a
ans=
Columns1through7
05.00006.66677.50008.00008.33338.5714
Columns8through10
8.75008.88899.0000
»a.\b
ans=
Columns1through7
05.00006.66677.50008.00008.33338.5714
Columns8through10
8.75008.88899.0000
»a.^2
ans=
149162536496481100
说明:
在这里特别要注意一下有没有加点“.”之间的区别,这些算术运算符所运算的两个阵列是否需要长度一致。
● 矩阵转置运算
通过在矩阵变量后加’的方法来表示转置运算
?
a=1:
1:
10;
?
b=0:
10:
90;
?
a'
ans=
1
2
3
4
5
6
7
8
9
10
?
c=a+b*i;
?
c'
ans=
1.0000
2.0000-10.0000i
3.0000-20.0000i
4.0000-30.0000i
5.0000-40.0000i
6.0000-50.0000i
7.0000-60.0000i
8.0000-70.0000i
9.0000-80.0000i
10.0000-90.0000i
矩阵函数
● MATLAB常用数学函数
这些数学函数一般都可以作为矩阵函数。
a=1:
1:
10;
b=0:
10:
90;
sin(a)
exp(b)
● 求矩阵的长度的函数
?
a=[10,2,12;34,2,4;98,34,6];
?
size(a)
ans=
3 3
?
length(a)
ans=
3
好好的看一下两者之间的区别。
● 矩阵的几种基本变换操作
1. 通过在矩阵变量后加’的方法来表示转置运算
?
a=[10,2,12;34,2,4;98,34,6];
?
a'
ans=
103498
2234
1246
2. 矩阵求逆
?
inv(a)
ans=
-0.01160.0372-0.0015
0.0176-0.10470.0345
0.0901-0.0135-0.0045
3. 矩阵求伪逆
?
pinv(a)
ans=
-0.01160.0372-0.0015
0.0176-0.10470.0345
0.0901-0.0135-0.0045
4. 左右反转
?
fliplr(a)
ans=
12210
4234
63498
5. 矩阵的特征值
?
[u,v]=eig(a)
u=
-0.29600.3635-0.3600
-0.2925-0.41280.7886
-0.9093-0.83520.4985
v=
48.839500
0-19.84510
00-10.9943
6. 上下反转
?
flipud(a)
ans=
98346
3424
10212
7. 旋转90度
?
rot90(a)
ans=
1246
2234
103498
8. 取出上三角和下三角
?
triu(a)
ans=
10212
024
006
?
tril(a)
ans=
1000
3420
98346
字符串的基本操作
在matlab工作空间中,字符串是以向量形式来存储的,我们把用’’所包含的内容来表示该字符串。
?
s='student'
s=
student
字符串也可以作为矩阵来连接。
?
s1='who'
s1=
who
?
s=[s,s1]
s=
studentwho
求字符串的长度
?
length(s)
ans=
10
?
size(s)
ans=
1 10
字符串函数
字符串转换
abs
字符串到ASCII转换
dec2hex
十进制数到十六进制字符串转换
fprintf
把格式化的文本写到文件中或显示屏上
hex2dec
十六进制字符串转换成十进制数
hex2num
十六进制字符串转换成IEEE浮点数
int2str
整数转换成字符串
lower
字符串转换成小写
num2str
数字转换成字符串
setstr
ASCII转换成字符串
sprintf
用格式控制,数字转换成字符串
sscanf
用格式控制,字符串转换成数字
str2mat
字符串转换成一个文本矩阵
str2num
字符串转换成数字
upper
字符串转换成大写
eval(string)
作为一个MATLAB命令求字符串的值
blanks(n)
返回一个n个零或空格的字符串
deblank
去掉字符串中后拖的空格
feval
求由字符串给定的函数值
findstr
从一个字符串内找出字符串
isletter
字母存在时返回真值
isspace
空格字符存在时返回真值
isstr
输入是一个字符串,返回真值
lasterr
返回上一个所产生MATLAB错误的字符串
strcmp
字符串相同,返回真值
strrep
用一个字符串替换另一个字符串
strtok
在一个字符串里找出第一个标记
● 这里函数num2str用来把数值转换成字符串,字符串连接用来把所转换的数嵌人到一个字符串句子中。
按类似方式,int2str把整数转换成字符串。
无论是num2str还是int2str都调用函数sprintf,它用类似C语言语法把数值转换成字符串。
请注意函数str2num不能接受用户定义的变量,也不能执行转换过程的算术运算。
?
s='heisastudent';
?
a=abs(s)
a=
Columns1through12
10410132105115329732115116117100
Columns13through15
101110116
?
num2str(a)
ans=
10410132105115329732115116117100101110116
?
int2str(s)
ans=
10410132105115329732115116117100101110116
● 函数disp允许不打印它的变量名而显示一个字符串。
?
disp(s)
heisastudent
● 函数find用来找出小写字符的下标值,然后,从小写元素中只减去小写与大写之差,最后,用setstr把求得的数组转换成它的字符串表示。
?
find(s>'m')
ans=
5910111415
● 函数input能输入一个字符串:
x=input('Enteranything>','s')。
这里,在函数input里的附加参量’s’告诉MATLAB,作为一个字符串,只要把用户输入传送到输出变量,就不需要引号。
事实上,如果将引号包括进去,它们就变成返回字符串的一部分。
● 无论fprintf还是sprintf以同样方式处理输入参量,但fprintf把输出送到显示屏或文件中,而sprintf把输出返回到一个字符串中。
● 函数feval与eval类似,但在用法上有更多的限制。
feval('fun',x)求由字符串'fun'给定的函数值,其输入参量是变量x。
即feval('fun',x)等价于求fun(x)值。
函数eval,feval的基本用途限在用户创建的函数内。
一般地,feval可求出有大量输入参量的函数值,例如,feval('fun',x,y,z)等价于求fun(x,y,z)值。
?
feval('sin',s)
ans=
Columns1through7
-0.32160.45200.5514-0.97050.94540.55140.3796
Columns8through14
0.5514