1数据文件
有许多的方法用于加载和保存 MATLAB 的数据文件,这些方法后面进行介绍。在这里我们只向大家介绍最简单的
save
和
load
命令。
save 命令用于保存当前
MATLAB 工作区内的数据到一个硬盘文件。这个命令的基本形式如下
save filename var1 var2 var3
filename 代表你要保存变量的那个文件,
var1,var2 等是要保存的变量。在默认情况下,这个这个文件的扩展名为‘
mat
’
,
我们称之为
MAT
文件。如果在
filename 后面无变量,则工作区的所有内容将会被保存。
MATLAB 用一种特殊的复杂形式来存储数据,包括了许许多多的细节,例如变量名和变量类型,数组的大小,以及所有变量值。一个在任何一个平台上创建的
MAT
文件(pc, mac, unix)
在另一个平台上都可以应用。它的缺点是
MAT 文件的存储格式不能被其他程序读取。如果一个数据必须由其他程序所读取,那么必须转化为
ASCII 码,并将这些数值写到一个以
ASCII
码为编码的文件中。但是,当以
ASCII 的形式存储,像变量名和变量类型这样的信息就会丢失,产生的数据结果将会更大。
例如,假设数组 x
的定义如下
x=[1.23 3.14 6.28; -5.1 7.00 0];
命令“save x.dat x -ascii
”将会创建一个文件
x.dat
,包括数据如下
1.2300000e+000 3.1400000e+000 6.2800000e+000
-5.1000000e+000 7.0000000e+000 0.0000000e+000
用这种格式定的数据能被其他语言编写的程序或扩展页读取,所以它能帮助 MATLAB程序和其他程序之间共享数据。
好的编程习惯
如果数据需要在
matlab
和其他程序之间交换使用,那么以
ASCII
格式存储数据。如果
只在
matlab
中使用那么,应以
mat
文件的形式存储数据。
MATLAB 并不关心
ASCII
码的扩展名是什么?但是,用户最好用它的传统扩展名“
dat
”。
好的编程习惯
以“
dat
”的扩展名保存
ASCII
数据文件,以区别于以“
mat
”为扩展名的
mat
文件。
Load 命令与
save
命令相反。它从硬盘文件加载数据到 MATLAB 当前工作区。这个命令的基本格式为
load filename
filename 代表所加载文件的文件名。如果这个文件是 mat 文件,那么所有被加载的变量的变量名的变量类型将和原来一样。如果一个变量包含在工作区间窗口,那么这些数据将会被修复。
MATLAB
能够加载由其他程序创建的
ascii 格式的数据文件。它首先检查所要加载的文件是
mat
文件还是
ascii
文件。如果在
load
语句中加入
ascii
中,则强制
MATLAB 把这个文件看作
ASCII
文件。这个文件的内容将会被转化为一个
MATLAB 的数组,这个数组名就所要加载的文件名。例如,假设一个名为
x.dat
的
ascii
文件包括下列数据:
1.23 3.14 6.28
-5.1 7.00 0
那么“load x.dat
”将会在当前工作区创建一个
2
×
3
数组
x,
包含数据值。
2 标量运算和数组运算
MATLAB 赋值语句中的计算,它的一般形式如下
variable_name = expression;
赋值语句计算出等号右边表达式的值,然后赋值于等号左边的变量名。注意这个等号并不是传统意义上的等号,它的意义是:存储表达式的值到左边的变量,由于这个原因,等号在这里应叫做赋值号。像
ii = ii + 1;
这样的语句在数学上是毫无意义的,但在 MATLAB 语言中,它有其固有的意义。它的意义是:把变量 ii 加上 1 之后,再把值存储到变量 ii 中。
2.1 标量运算符
位于赋值号右边的表达式,可以包含标量,数组,括号和数学符号的任一个有效联合运算。两标量间的标准运算符号如表
1
所示。
运算符 | 代数形式 | MATLAB形式 |
加号 | A+B | A+B |
减号
| A-B | A-B |
除号 | A÷B | A/B |
乘号 | A×B | A*B |
指数 | A^B |
当我们需要的时侯,我们可以运用括号来控制运算顺序。括号内的表达式优先于括号外的表达式来计算。例如表达式 2^((8+2)/5)的计算顺序如下
2 ^ ( ( 8 + 2 ) / 5 ) = 2 ^ ( 10 / 5 )
= 2 ^ 2
= 4
2.2 数组运算和矩阵运算
MATLAB 在数组运算中提供了两种不同类型的运算
,
一种是数组运算(array operations), 一种是矩阵运算
(matrix).
数组运算是一种用于元素对元素的运算
.
也就是说
,这个运算是针对 两数组相对应的运算使用的
.
例如
注意两数组的行与列必须相同.否则
,MATLAB
将产生错误.
数组运算可以用于数组与标量的运算.
当一个数组和一个标量进行运算时
,标量将会和数组中的每一元素进行运算
.
例如
相对地,
矩阵运算则遵守线性代数的一般规则
,
像矩阵的乘法
.
在线性代数中
,c=a
×
b 的定义如下
例如
注意,在矩阵相乘中,a 阵的列数必须等于
b 阵的行数。MATLAB 用一个特殊的符号来区分矩阵运算和数组运算。在需要区分两者不同的时侯,把点置于符号前来指示这是一个数组运算(例如,
.*
)。表
2
给出的是一些常见的数组和矩阵运算。
表2
常见的数组和矩阵运算
初学者往往混淆数组运算和矩阵运算.
在一些情况下
,两者相互替换会导致非法操作, MATLAB 将会报告产生了错误。在另一些情况下,两种运算都是合法的,那么这时 MATLAB 进行错误的运算,并产生错误的结果。当我们进行方阵运算时,极易产生这样的错误。两个方阵具有相同的大小,两者之间的数组运算和矩阵运算都是合法的,但产生的结果完全不同。在这种情况下,你要万分的小心。
常见编程错误
在你的
MATLAB 代码中,仔细区分数组运算和矩阵运算。数组乘法和矩阵乘法极易混淆。
3例子
假设 a,b,c 和 d 的定义如下
分别指出下列表达式的运算结果
(a) a + b (b) a .* c (c) a * b (d) a * c
(e) a + c (f) a + d (g) a .* d (h) a * d
矩阵的左除运算有着十分重要意义,我们必须理解它。一个 3×3 的线性方程组的形式如下
2.2 式的结果可以用线性代数的知识来解决。结果是
因为左除运算 A\B 等价于 inv(A)*B,所以左除运算是解线性方程的好方法。