数值分析上机实验指导书 下载本文

NaN 没有意义的数 预定义变量在工作空间观察不到。如果预定义变量被用户重新赋值,则原来的功能暂不能使用。当这些用户变量被清除(clear)或MATLAB重新启动后,这些功能得以恢复。

5.用户变量

MATLAB变量名总以字母开头,以字母、数字或下划线组成,区分大小写,有效字符长度为63个。如A,a,a1,a_b都是合法的,且a与A表示不同变量。在Command Window中使用的变量一旦被赋值,就会携带这个值存在于工作空间,直到被清除或被赋予新的值。

ans是系统一个特别的变量名。若一个表达式运算结果没有赋予任何变量,系统自动用ans存放答案。例如:

>> A=5+4i;b=5-4*i;B=1;A*b %没有定义A*b的输出变量 ans = 41 %ans来接受计算结果,注意这是大写A与小写b的乘积,尽管我们可以使用工作空间来查询和清除变量,但使用下列命令方式更快捷:

>> whos %查询Workspace中的变量列表 Name Size Bytes Class

A 1x1 16 double array (complex) B 1x1 8 double array

a 1x1 16 double array (complex) ans 1x1 8 double array

b 1x1 16 double array (complex) c 1x1 16 double array (complex) Grand total is 6 elements using 80 bytes

>> A %查询变量A的值 A =

5.0000 + 4.0000i >> clear A %清除变量A >> A %再查询A的值,已经不存在了 ??? Undefined function or variable 'A'. >> clear %清除Workspace中所有变量 >> whos %Workspace中已没有任何变量了

三、数组和矩阵运算

MATLAB基本数据单元是无需指定维数的数组。数组运算是MATLAB最鲜明的特点,一方面可以使得计算程序简明易读,另一方面可以提高计算速度。

1.数组的输入

最常用的数组是双精度数值数组(double array)。一维数组相当于向量,二维数组相当于矩阵,一维数组可以视为二维数组的特例。二维数组的第一维称为“行”,第二维称为“列”。MATLAB数组无需预先定义维数。直接输入数组的

21

元素,用中括号([])表示一个数组,同行元素间用空格或逗号分隔,不同行间用分号或回车分隔,例如:

>> clear;a=[1,2,3;4,5,6;7,8,9] a =

1 2 3 4 5 6 7 8 9 或

>> a=[1 2 3 %这种方式特别适用于大型矩阵 4 5 6 7 8 9] a =

1 2 3 4 5 6 7 8 9

对于等差数列构造的一维数组,可用冒号运算生成,也可用函数linspace生成。

>> b=0:3:10 %初值:增量:终值 b =

0 3 6 9 >> b=0:10 %增量为1可省略 b =

0 1 2 3 4 5 6 7 8 9 10

> >b=10:-3:0 %递减 b =

10 7 4 1 >> b=linspace(0,10,4) %将区间[0,10]等分为4-1=3份 b =

0 3.3333 6.6667 10.0000 >> length(b) %查询b的长度 ans = 4 >> b(3) %查询b的第三个元素 ans =

6.6667 >> b([1,end]) %查询b的首和尾元素 ans =

0 10

二维数组元素双下标编址按通常方式,单下标编址按列排序。 >> size(a) %查询数组a的尺寸 ans =

3 3 >> a(3,2),a(6)

22

ans = 8 ans = 8

>> c=a([1 3],[2 3]) %提取a的第一、第三行和第二、第三列(分块矩阵)

c =

2 3 8 9 >> d=a(2,:) %提取a的第二行 d =

4 5 6 >> a(:) %将a所有元素按单下标顺序排为列向量ans = 1 4 7 2 5 8 3 6 9

一些特殊的二维数组可以用函数产生,例如: >> a=zeros(2,4) %生成2行4列零矩阵 a =

0 0 0 0 0 0 0 0 >> b=ones(1,4) %生成1行4列1矩阵 b =

1 1 1 1 >> c=[a;b] %拼接 c =

0 0 0 0 0 0 0 0 1 1 1 1 >> c(2,1)=100 %修改部分元素 c =

0 0 0 0 100 0 0 0 1 1 1 1 >> reshape(c,2,6) %按2行6列重排矩阵元素 ans =

0 1 0 0 1 0

23

100 0 1 0 0 1

注意:数组下标对应矩阵的行和列,编址一律从1开始,不能用0. 矩阵输入也可用“load”命令从外部数据文件导入 2.数组运算

数组运算是指数组对应元素之间的运算,也称点运算。矩阵的乘法、乘方和除法有特殊的数学含义,并不是数组对应元素的运算,所数组乘法、乘方和除法的运算符前特别加了一个点。特别要区分数组运算在乘法、乘方和除法上的意义和表示上与矩阵运算的不同。

表2 数组运算符 运算 符号 说明 数组加与减 A+B与A-B 对应元素之间加减 数乘数组 k*A或A*k k乘A的每个元素 数与数组加减 k+A或k-A k加(减)A的每个元素 数组乘数组 A.*B 点运算只有点乘、点乘方、点除三个,表示对应元素之间的运算;(.*)是一个整数组乘方 A.^k,k.^A 体,点(.)不能漏掉,(.)和(*)之间也数除以数组 k./A 数组除法 左除A.\\B,右除B./A 不能有空格 >> clear;A=[1 -1;0 2];B=[0 1;1 -1]; >> A.*B %注意不是A*B ans =

0 -1 0 -2 >> A.\\B,A./B

Warning: Divide by zero. ans =

0 -1.0000 Inf -0.5000 Warning: Divide by zero. ans =

Inf -1 0 -2 >> A.^2 ans =

1 1 0 4 >> 1./A

Warning: Divide by zero. ans =

1.0000 -1.0000 Inf 0.5000 3.矩阵运算

矩阵是一个二维数组,所以矩阵的加、减、数乘等运算与数组运算是一致的。但是有两点需要注意:

24