matlab如何从表达式中读取数字很变量???
发布网友
发布时间:2022-05-02 13:08
我来回答
共1个回答
热心网友
时间:2022-06-20 04:51
MATLAB强大的数值计算功能使其在诸多数学计算软件中傲视群雄,是MATLAB软件的基础。本节将简要介绍MATLAB的数据类型、矩阵的建立及运算。
4.1 MATLAB 数据类型
MATLAB的数据类型主要包括:数字、字符串、矩阵、单元型数据及结构型数据等,限于篇幅我们将重点介绍其中几个常用类型。
4.1.1 变量与常量
变量是任何程序设计语言的基本要素之一,MATLAB语言当然也不例外。与常规的程序设计语言不同的MATLAB并不要求事先对所使用的变量进行声明,也不需要指定变量类型,MATLAB语言会自动依据所赋予变量的值或对变量所进行的操作来识别变量的类型。在赋值过程中如果赋值变量已存在时,MATLAB语言将使用新值代替旧值,并以新值类型代替旧值类型。
在MATLAB语言中变量的命名应遵循如下规则:
(1)变量名区分大小写。
(2)变量名长度不超31位,第31个字符之后的字符将被MATLAB语言所忽略。
(3)变量名以字母开头,可以是字母、数字、下划线组成,但不能使用标点。
与其他的程序设计语言相同,在MATLAB语言中也存在变量作用域的问题。在未加特殊说明的情况下,MATLAB语言将所识别的一切变量视为局部变量,即仅在其使用的M文件内有效。若要将变量定义为全局变量,则应当对变量进行说明,即在该变量前加关键字global。一般来说全局变量均用大写的英文字符表示。
MATLAB语言本身也具有一些预定义的变量,这些特殊的变量称为常量。表4-1给出了MATLAB语言中经常使用的一些常量值。
表4-1
常 量
表 示 数 值
pi
圆周率
eps
浮点运算的相对精度
inf
正无穷大
NaN
表示不定值
realmax
最大的浮点数
i, j
虚数单位
在MATLAB语言中,定义变量时应避免与常量名重复,以防改变这些常量的值,如果已改变了某外常量的值,可以通过“clear+常量名”命令恢复该常量的初始设定值(当然,也可通过重新启动MATLAB系统来恢复这些常量值)。
4.1.2 数字变量的运算及显示格式
MALAB是以矩阵为基本运算单元的,而构成数值矩阵的基本单元是数字。为了更好地学习和掌握矩阵的运算,首先对数字的基本知识作简单的介绍。
对于简单的数字运算,可以直接在命令窗口中以平常惯用的形式输入,如计算2和3的乘积再加1时,可以直接输入:
>> 1+2*3
ans=
7
这里“ans”是指当前的计算结果,若计算时用户没有对表达式设定变量,系统就自动赋当前结果给“ans”变量。用户也可以输入:
>> a=1+2*3
a=
7
此时系统就把计算结果赋给指定的变量a了。
MATLAB语言中数值有多种显示形式,在缺省情况下,若数据为整数,则就以整数表示;若数据为实数,则以保留小数点后4位的精度近似表示。MATLAB语言提供了10种数据显示格式,常用的有下述几种格式:
short 小数点后4位(系统默认值)
long 小数点后14位
short e 5位指数形式
long e 15位指数形式
MATLAB语言还提供了复数的表达和运算功能。在MATLAB语言中,复数的基本单位表示为i或j。在表达简单数数值时虚部的数值与i、j之间可以不使用乘号,但是如果是表达式,则必须使用乘号以识别虚部符号。
4.1.3 字符串
字符和字符串运算是各种高级语言必不可少的部分,MATLAB中的字符串是其进行符号运算表达式的基本构成单元。
在MATLAB中,字符串和字符数组基本上是等价的;所有的字符串都用单引号进行输入或赋值(当然也可以用函数char来生成)。字符串的每个字符(包括空格)都是字符数组的一个元素。例如:
>>s=’matrix laboratory’;
s=
matrix laboratory
>> size(s) % size查看数组的维数
ans=
1 17
另外,由于MATLAB对字符串的操作与C语言几乎完全相同这里不在赘述。
4.2 矩阵及其运算
矩阵是MATLAB数据存储的基本单元,而矩阵的运算是MATLAB语言的核心,在MATLAB语言系统中几乎一切运算均是以对矩阵的操作为基础的。下面重点介绍矩阵的生成、矩阵的基本运算和矩阵的数组运算。
4.2.1 矩阵的生成
1. 直接输入法
从键盘上直接输入矩阵是最方便、最常用的创建数值矩阵的方法,尤其适合较小的简单矩阵。在用此方法创建矩阵时,应当注意以下几点:
● 输入矩阵时要以“[ ]”为其标识符号,矩阵的所有元素必须都在括号内。
● 矩阵同行元素之间由空格或逗号分隔,行与行之间用分号或回车键分隔。
● 矩阵大小不需要预先定义。
● 矩阵元素可以是运算表达式。
● 若“[ ]”中无元素表示空矩阵。
另外,在MATLAB语言中冒号的作用是最为丰富的。首先,可以用冒号来定义行向量。
例如:
>> a=1:0.5:4
a=
Columns 1 through 7
1 1.5 2 2.5 3 3.5 4
其次,通过使用冒号,可以截取指定矩阵中的部分。
例如:
>> A=[1 2 3;4 5 6;7 8 9]
A=
1 2 3
4 5 6
7 8 9
>> B=A (1:2, : )
B=
1 2 3
4 5 6
通过上例可以看到B是由矩阵A的1到2行和相应的所有列的元素构成的一个新的矩阵。在这里,冒号代替了矩阵A的所有列。
2.外部文件读入法
MATLAB语言也允许用户调用在MATLAB环境之外定义的矩阵。可以利用任意的文本编辑器编辑所要使用的矩阵,矩阵元素之间以特定分断符分开,并按行列布置。读入矩阵的一种方法可参考3.3节数据交换系统。另外也可以利用load函数,其调用方法为: Load+文件名[参数]
Load函数将会从文件名所指定的文件中读取数据,并将输入的数据赋给以文件名命名的变量,如果不给定文件名,则将自动认为matlab.mat文件为操作对象,如果该文件在MATLAB搜索路径中不存在时,系统将会报错。
例如: 事先在记事本中建立文件: 1 1 1
(并以data1.txt保存) 1 2 3
1 3 6
在MATLAB命令窗口中输入:
>> load data1.txt
>> data1
data1=
1 1 1
1 2 3
1 3 6
3.特殊矩阵的生成
对于一些比较特殊的矩阵(单位阵、矩阵中含1或0较多),由于其具有特殊的结构,MATLAB提供了一些函数用于生成这些矩阵。常用的有下面几个:
zeros(m) 生成m阶全0矩阵
eye(m) 生成m阶单位矩阵
ones(m) 生成m阶全1矩阵
rand(m) 生成m阶均匀分布的随机阵
randn(m) 生成m阶正态分布的随机矩阵
4.2.2 矩阵的基本数*算
矩阵的基本数*算包括矩阵的四则运算、与常数的运算、逆运算、行列式运算、秩运算、特征值运算等基本函数运算,这里进行简单介绍。
1.四则运算
矩阵的加、减、乘运算符分别为“+,—,*” ,用法与数字运算几乎相同,但计算时要满足其数学要求(如:同型矩阵才可以加、减)。
在MATLAB中矩阵的除法有两种形式:左除“\”和右除“/”。在传统的MATLAB算法中,右除是先计算矩阵的逆再相乘,而左除则不需要计算逆矩阵直接进行除运算。通常右除要快一点,但左除可避免被除矩阵的奇异性所带来的麻烦。在MATLAB6中两者的区别不太大。
2.与常数的运算
常数与矩阵的运算即是同该矩阵的每一元素进行运算。但需注意进行数除时,常数通常只能做除数。
3.基本函数运算
矩阵的函数运算是矩阵运算中最实用的部分,常用的主要有以下几个:
det(a) 求矩阵a的行列式
eig(a) 求矩阵a的特征值
inv(a)或a ^ (-1) 求矩阵a的逆矩阵
rank(a) 求矩阵a的秩
trace(a) 求矩阵a的迹(对角线元素之和)
例如: >> a=[2 1 –3 –1; 3 1 0 7; -1 2 4 –2; 1 0 –1 5];
>> a1=det(a);
>> a2=det(inv(a));
>> a1*a2
ans=
1
注意:命令行后加“;”表示该命令执行但不显示执行结果。
4.2.2 矩阵的数组运算
我们在进行工程计算时常常遇到矩阵对应元素之间的运算。这种运算不同于前面讲的数*算,为有所区别,我们称之为数组运算。
1.基本数*算
数组的加、减与矩阵的加、减运算完全相同。而乘除法运算有相当大的区别,数组的乘除法是指两同维数组对应元素之间的乘除法,它们的运算符为“.*”和“./”或“.\”。前面讲过常数与矩阵的除法运算中常数只能做除数。在数组运算中有了“对应关系”的规定,数组与常数之间的除法运算没有任何*。
另外,矩阵的数组运算中还有幂运算(运算符为 .^ )、指数运算(exp)、对数运算(log)、和开方运算(sqrt)等。有了“对应元素”的规定,数组的运算实质上就是针对数组内部的每个元素进行的。
例如:
>> a=[2 1 -3 -1; 3 1 0 7; -1 2 4 -2; 1 0 -1 5];
>> a^3
ans=
32 -28 -101 34
99 -12 -151 239
-1 49 93 8
51 -17 -98 139
>> a .^3
ans=
8 1 -27 -1
27 1 0 343
-1 8 64 -8
1 0 -1 125
由上例可见矩阵的幂运算与数组的幂运算有很大的区别。
2.逻辑关系运算
逻辑运算是MATLAB中数组运算所特有的一种运算形式,也是几乎所有的高级语言普遍适用的一种运算。它们的具体符号、功能及用法见表4-2。
表4-2
符号运算符
功 能
函 数 名
= =
等于
eq
~ =
不等于
ne
<
小于
lt
>
大于
gt
<=
小于等于
le
>=
大于等于
ge
&
逻辑与
and
|
逻辑或
or
~
逻辑非
not
说明:
● 在关系比较中,若比较的双方为同维数组,则比较的结果也是同维数组。它的元
素值由0和1组成。当比较双方对应位置上的元素值满足比较关系时,它的对
应值为1,否则为0。
● 当比较的双方中一方为常数,另一方为一数组,则比较的结果与数组同维。
● 在算术运算、比较运算和逻辑与、或、非运算中,它们的优先级关系先后为:
比较运算、算术运算、逻辑与或非运算。
例如:
>>a=[1 2 3; 4 5 6; 7 8 9];
>> x=5;
>> y= ones(3)*5;
>> xa= x<=a
xa=
0 0 0
0 1 1
1 1 1
>> b=[0 1 0; 1 0 1; 0 0 1];
>> ab=a&b
ab=
0 1 0
1 0 1
0 0 1