第 3 章 数值数组及向量化运算

49
第3第 第第第第第第第第第第 教教教教 教教教教 教教教教

description

第 3 章 数值数组及向量化运算. 教学目标 教学重点 教学内容. 教学目标. 掌握数组的创建方法 掌握数组的标识与寻访 掌握数组的运算 了解“非数” NaN 和“空”数组 掌握关系操作和逻辑操作. 教学重点. 数组的创建方法 数组的标识与寻访 关系操作和逻辑操作. 教学内容. 3.1 数值计算的特点和地位 3.2 一、二维数值数组的创建和寻访 3.3 数组运算和向量化编程 3.4 “ 非数” NaN 和“空”数组 3.5 关系操作和逻辑操作. 符号计算解法:. 数值计算解法:. syms t x ft=t^2*cos(t) - PowerPoint PPT Presentation

Transcript of 第 3 章 数值数组及向量化运算

Page 1: 第 3 章  数值数组及向量化运算

第 3 章 数值数组及向量化运算

教学目标

教学重点

教学内容

Page 2: 第 3 章  数值数组及向量化运算

教学目标

• 掌握数组的创建方法• 掌握数组的标识与寻访• 掌握数组的运算• 了解“非数” NaN 和“空”数组• 掌握关系操作和逻辑操作

Page 3: 第 3 章  数值数组及向量化运算

教学重点

• 数组的创建方法• 数组的标识与寻访• 关系操作和逻辑操作

Page 4: 第 3 章  数值数组及向量化运算

教学内容

3.1 数值计算的特点和地位 3.2 一、二维数值数组的创建和寻访3.3 数组运算和向量化编程3.4 “ 非数” NaN 和“空”数组3.5 关系操作和逻辑操作

Page 5: 第 3 章  数值数组及向量化运算

3.1 数值计算的特点和地位符号计算可以对包含变量字符,参数字符和数字的表达式进

行推理,运算,并给出符号结果。缺点:有很多问题无法解,有很多问题求解时间过长 。

syms t xft=t^2*cos(t)sx=int(ft,t,0,x)ft =t^2*cos(t)sx =x^2*sin(x) - 2*sin(x) + 2*x*cos(x)

符号计算解法:

dt=0.05; t=0:dt:15; Ft=t.^2.*cos(t);Sx=dt*cumtrapz(Ft); plot(t,Sx,'.k','MarkerSize',12) xlabel('x'),ylabel('Sx'),grid on

数值计算解法:

ezplot(sx,[0,15])

Page 6: 第 3 章  数值数组及向量化运算

例 3.1-2 已知

sin( )( ) tf t e 求4

0( ) ( )s x f t dt

(1) 符号计算解法

syms t;ft=exp(-sin(t));sx=int(ft, t, 0, 4)

Warning: Explicit integral could not be found.sx =int(1/exp(sin(t)), t = 0..4)

(2) 数值计算解法delt=0.01; x=0:delt:4;y=exp(-sin(x));sx=delt*cumtrapz(y);plot(x,y, 'r', 'LineWidth', 6); hold on;plot(x, sx, '.b', 'MarkerSize', 15);plot(x, ones(size(x)), 'k');

Page 7: 第 3 章  数值数组及向量化运算

3.2 数值数组的创建和寻访

3.2.1 一维数组的创建3.2.2 二维数组的创建3.2.3 二维数组元素的标识和寻访3.2.4 数组操作技法综合

Page 8: 第 3 章  数值数组及向量化运算

(1) 冒号生成法: array=a: inc: b < 向量 >

a--- 数组的第一个元素 

inc--- 采样点之间的间隔 , 即步长 . 最后一个元素不一定等于b, 其大小为 b’=a +inc*fix((b-a)/inc); 步长可以省略 , 默认为 1; inc 可以取正数或负数 , 但要注意当取正时 , 要保证 b>a, 数组最后一个元素不超过 b, 取负时 b<a, 最后一个元素不小于 b.

特点 : 等差数列a binc>0 ab Inc<0

3.2.1 一维数组的创建和寻访 1. 递增 / 递减一维数组的创建 :

b’

b’

Page 9: 第 3 章  数值数组及向量化运算

(2) 线性 ( 或对数 ) 定点采样法在设定的总点数下 , 均匀采样生成一维行数组.格式为:

      x=linspace (a, b, n)

特点:方便对数组的元素的总个数进行控制,最后一个元素肯定是设定之值.

a--- 数组初始值b--- 数组最后值

n--- 数组总个数

增量的计算 ---inc=(b-a)/(n-1)

等效于 : x=a: (b-a)/(n-1) :b

1. 递增 / 递减一维数组的创建 :

      x=logspace (a, b, n)

Page 10: 第 3 章  数值数组及向量化运算

3.2.1 一维数组的创建和寻访 2. 其他类型一维数组的创建 :

(1) 逐个元素输入法:

如: array=[2, pi/2, sqrt(3), 3+5i]

使用场合及特点使用场合 : 数据元素比较少并都已知 . 如对少量实验数据的处理可用此种方法 .

x=[1,2,3,4,5]'

行向量

列向量

Page 11: 第 3 章  数值数组及向量化运算

2. 其他类型一维数组的创建 :

(2) 运用 MATLAB 函数生成法:

MATLAB 特殊形式数组生成函数见表 3.2-1 :

均匀分布随机数组 rand(1,n), 全 1 数组 ones(1,n)

指 令 含 义 指 令 含 义diag 产生对角形数组 ( 二维以

下 )rand 产生均匀分布随机数

组eye 产生单位数组 ( 二维以

下 )rand

n产生正态分布随机数组

magic

产生魔方数组 ( 二维以下 )

zeros 产生全 0 数组

ones 产生全 1 数组

Page 12: 第 3 章  数值数组及向量化运算

3. 一维数组的子数组寻访和赋值

x=[0 1 2 3 4 5];

x(3)

x([1 2 3]), x([1 2 3]')

x(4:6)=x([1,2,3]) % x(4:6)=[0,1,2]

x(3:end) % end 表示最后一个下标x(3:-1:1)

x( find (x>2) )

注意 : 数组的第一个元素为 x(1), 与 C 语言中第一个元素为 x[0] 不同

Page 13: 第 3 章  数值数组及向量化运算

第 3 题 Matlab6.5 版符号限定假设对解方程根不起作用。

上机问题

%23 题 解为一个求解变量clear, syms x y SS = dsolve('Dy*y/5+x/4=0','x')ezplot(subs(S(1),'C3',1),[-2,2 -2,2],1), hold onezplot(subs(S(2),'C3',1),[-2,2 -2,2],1)

S =[ 1/2*(-5*x^2+4*C1)^(1/2)][ -1/2*(-5*x^2+4*C1)^(1/2)]

%25 题 解为两个求解变量S=dsolve('Df=3*f+4*g','Dg=-4*f+3*g','f(0)=0','g(0)=1','x')

S = f: [1x1 sym] g: [1x1 sym] S.f S.g

[ exp(3*x)*sin(4*x), exp(3*x)*cos(4*x)]

disp([blanks(6), 'S.f', blanks(18),'S.g'])

disp([S.f,S.g])

Page 14: 第 3 章  数值数组及向量化运算

上机问题

syms x y w t uz=x^2+y+3*t+w^3+u;findsym(z,8)

findsym(expression,n) % 当 n 大于实际的基本变量数目时,按字母表顺序列出所有本符号变量;当 n 小于等于时实际的基本变量数目时,按与 x 距离最近的顺序列出。symvar(expression,n) 多一个参数 n 在 Matlab6.5

中不能用。

ans = t, u, w, x, y

ans = x,y,w,u,t

findsym(z,5)

ans = x,y,w

findsym(z,3)

Page 15: 第 3 章  数值数组及向量化运算

review

(1) 冒号生成法: array=a: inc: b < 向量 >

3.2.1 一维数组的创建和寻访 1. 递增 / 递减一维数组的创建 :

(2) 线性 ( 或对数 ) 定点采样法在设定的总点数下 , 均匀采样生成一维行数组.格式为:      x=linspace (a, b, n)

(2) 运用 MATLAB 函数生成法:均匀分布随机数组 rand(1,n), 全 1 数组 ones(1,n)

(1) 逐个元素输入法: 2. 其他类型一维数组的创建 :

x=[1,2,3,4,5]'

Page 16: 第 3 章  数值数组及向量化运算

3.2.2 二维数组的创建

• 创建二维数组与创建一维数组的方式类似。在创建二维数组时,整个输入数组以方括号 [ ] 为其首尾。用逗号或者空格区分同一行的不同元素,用分号或者回车( Enter)区分不同行。

1. 小规模数组的直接输入法

2. 中规模数组的数组编辑器创建法 3. 中规模数组的 M文件创建法

例 3.2.4  利用M文件创建和保存数组1. 编写M文件并运行   AM=[100,101,102;103,104,105;106,107,108],保存为文件名MyMatrix .m

2. 在命令窗中输入 MyMatrix

Page 17: 第 3 章  数值数组及向量化运算

3.2.2 二维数组的创建4.利用 MATLAB 函数创建数组

指 令 含 义 指 令 含 义diag 产生对角形数组 ( 二维以

下 )rand 产生均匀分布随机数组

eye 产生单位数组 ( 二维以下 ) randn 产生正态分布随机数组magic 产生魔方数组 ( 二维以下 ) zeros 产生全 0 数组ones 产生全 1 数组

【例 3.2-5】标准数组产生的演示。ones(2,4)ans = 1 1 1 1 1 1 1 1

randn('state',0) randn(2,3)ans = -0.4326 0.1253 -1.1465 -1.6656 0.2877 1.1909

D=eye(3)D = 1 0 0 0 1 0 0 0 1 diag(D)ans = 1 1 1

Page 18: 第 3 章  数值数组及向量化运算

3.2.3 二维数组元素的标识和寻访

数组名 ( 行下标 m, 列下标 n)--- 数组的第 m 行 n 列的元素 .A=[1,2,3; 4,5,6]

A(2,3)=6

1) 全下标标识

2) 单下标标识只用一个下标来指定元素在数组中的位置-将数组中所有的元素按照从上到下 ( 列 ), 从左到右的方法从1开始编号 , 其编号就是单下标. A(4)=2

| 1 ① 2 ④ 3 ⑦ |

A= | 4 ② 5 ⑤ 6 ⑧ |

| 7 ③ 8 ⑥ 9 ⑨ |

A(:)— 按单下标方式列出全部元素,组成列向量。

A(:)=[1,4,7,2,5,8,3,6,9]'

A =

4 5 6 1 2 3

Page 19: 第 3 章  数值数组及向量化运算

3) 逻辑 1 标识法

A=[1, 2, 3, 4, 5]; L=logical([1, 0, 1, 0, 1])A(L)ans=[1,3,5]【例 3.2-6】数组标识与寻访

A=zeros(2,6)A = 0 0 0 0 0 0 0 0 0 0 0 0A(:)=1:12A =1 3 5 7 9 11 2 4 6 8 10 12A(2,4)ans = 8A(8)ans = 8

A(:,[1,3])ans =1 5 2 6A(:,4:end)ans =7 9 11 8 10 12

A(2,1:2:5)=[-1,-3,-5]A =1 3 5 7 9 11 -1 4 -3 8 -5 12 B=A([1,2,2,2],[1,3,5] )B =1 5 9 -1 -3 -5 -1 -3 -5 -1 -3 -5 L=A<3L = 1 0 0 0 0 0 1 0 1 0 1 0A(L)=NaNA = NaN 3 5 7 9 11 NaN 4 NaN 8 NaN 12

A([1,2,5,6]')ans = 1 2 5 6

Page 20: 第 3 章  数值数组及向量化运算

3.2.4 数组操作技法综合【例 3.2-7】数组操作函数 reshape, diag, repmat 的用

法;空阵 [ ] 删除子数组的用法。a=1:8A=reshape(a,4,2)A=reshape(A,2,4)a = 1 2 3 4 5 6 7 8A = 1 5 2 6 3 7 4 8A = 1 3 5 7 2 4 6 8

D1=repmat(B,2,4) % D1 = 1 0 1 0 1 0 1 0 0 4 0 4 0 4 0 4 1 0 1 0 1 0 1 0 0 4 0 4 0 4 0 4 D1([1,3],: )=[ ] % 删除 1,3 行 D1 = 0 4 0 4 0 4 0 4 0 4 0 4 0 4 0 4

b=diag(A)b = 1 4

B=diag(b)B = 1 0 0 4

Page 21: 第 3 章  数值数组及向量化运算

3.2.4 数组构作技法综合【例 3.2-8】函数 flipud, fliplr, rot90 对数组的操作体现着“矩阵变换”。

A=reshape(1:9,3,3) A = 1 4 7 2 5 8 3 6 9 B=flipud(A)B = 3 6 9 2 5 8 1 4 7

C=fliplr(A) % C = 7 4 1 8 5 2 9 6 3 D=rot90(A,2) %逆时针旋转D = 9 6 3 8 5 2 7 4 1

Page 22: 第 3 章  数值数组及向量化运算

3.3 数组运算

1. 函数关系数值计算模型的分类

• 个别的,无规律的数据集所执行的函数关系运算;• 一组有规律数据需要反复所执行的函数关系运算;• 一组有规律数据按矩阵运算法则执行的函数关系运算。

3.3.1 数组运算的由来和规则

对一般编程,后两种运算程序包含一重或多重循环体。

2. 提高程序执行性能的三大措施JIT(just in time)-Accelerator; 数组运算;向量或矩阵运算。

Page 23: 第 3 章  数值数组及向量化运算

3.3.1 数组运算的由来和规则3. 数组运算规则

• 数组运算是指每个对应元素之间的运算,比如对应元素相加,相减,相乘,相除等,而矩阵运算则服从线性代数中的矩阵运算规则.

• 数组运算符是 .opr, opr 运算符为 +,-, *, /, \, ^, '

• 矩阵运算则没有在操作符左边加 . , matlab 中矩阵的运算是按照线性代数中的定义进行的。

• 详细的数组运算符意义见表 3.3-1 .

Page 24: 第 3 章  数值数组及向量化运算

数组的加减法

数组加减法为数组元素的加减法,与矩阵加减法相同。利用运算符“ +” 和“ -” 实现该运算。需要注意的是相加或相减的两个数组必须有相同的维数,或者是数组与数值相加减。

数组的乘除法

数组乘除为元素的乘除,通过运算符“ .*” 和“ ./”来实现。运算时需要两个数组有相同的维数,或者数组与数值相乘除。

Page 25: 第 3 章  数值数组及向量化运算

数组的乘方• 数组乘方用符号“ .^” 实现。数组乘方运算以三种

方式进行。 – 底为数组,指数为标量的形式。这种形式的结果

是将数组的每个元素进行指数相同的乘方。返回的结果为与底维数相同的数组,结果数组的每个元素为底中相应元素的乘方。

– 底为标量,指数为数组的形式。该形式返回的结果为数组,维数与指数数组相同。结果数组的每个元素为底以指数数组相应元素为指数做乘方的结果。

– 底和指数都是数组的形式。此时两个数组需要有相同的维数。返回结果为一个数组,维数与前面两个数组相同,每个元素为底数数组和指数数组做乘方的结果。

Page 26: 第 3 章  数值数组及向量化运算

函数 f (.) 的数组运算规则函数数组运算规则的定义 x11 x12 … x1n

x21 x22 … x2n

对于 (m x n) 数组 X= … … … … =[xij] m x n

xm1 xm2 … xmn

函数 f (.) 的数组运算规则是指:

           f (X) = [ f (xij) ]m x n

也就是对数组中每个元素都实施同样的操作.

Page 27: 第 3 章  数值数组及向量化运算

名称  含义 名称  含义 名称  含义acos 反余弦 asinh 反双曲正弦 csch 双曲余割acosh 反双曲余弦 atan 反正切 sec 正割acot 反余切 atan2 四象限反正切 sech 双曲正割acoth 反双曲余切 atanh 反双曲正切 sin 正弦acsc 反余割 cos 余弦 sinh 双曲正弦acsch 反双曲余割 cosh 双曲余弦 tan 正切asec 反正割 cot 余切 tanh 双曲正切asech 反双曲正割 coth 双曲余切asin 反正弦 csc 余割

三角函数和双曲函数4. 数组运算符和数组运算函数

Page 28: 第 3 章  数值数组及向量化运算

             指数函数

名称  含 义 名称   含 义 名称 含 义exp 指数 (ex) log10 常用对数 pow2 2的幂log 自然对数 log2 以2为底对数 sqrt 平方根

        复数函数

名称 含 义 名称 含 义 名称 含 义abs 模或绝对值 conj 复数共轭 real 复数实部angle 相角 ( 弧

度 )imag 复数虚部

Page 29: 第 3 章  数值数组及向量化运算

  坐标变换函数 名称   含  义  名称   含 义

cart2sph 直角坐标变球坐标 pol2cart 极坐标变直角坐标

cart2pol 直角坐标变极坐标 sph2cart 球坐标变直角坐标

    圆整函数与求余函数名称  含  义 名称   含  义ceil 向+∞圆整函数 rem 求余数fix 向0圆整函数 round 向最近整数圆整函数floor 向-∞圆整函数 sign 符号函数 - (-1), + (1)

0 (0)mod 模除求余

Page 30: 第 3 章  数值数组及向量化运算

clearvr=[0.89, 1.20, 3.09, 4.27, 3.62, 7.71, 8.99, 7.92, 9.70, 10.41];ir=[0.028, 0.040, 0.100, 0.145, 0.118, 0.258, 0.299, 0.257, 0.308, 0.345]; L=length(vr); for k=1:L

r(k)=vr(k)/ir(k); endsr=0;for k=1:L

sr=sr+r(k); endrm=sr/L

非向量化程序

3.3.2 数组运算与向量化编程

向量化编程r=vr./irrm=mean(r)

【例 3.3-1】欧姆定律: ,其中 r,u,i 分别是电阻 ( 欧姆 ) 、

电压(伏特)、电流(安培)。验证实验:据电阻两端施加的电压,测量电阻中流过的电流,然后据测得的电压、电流计算平均电阻值。(测得具体数据见程序)。

ur

i

Page 31: 第 3 章  数值数组及向量化运算

3.3.2 数组运算与向量化编程

clearx=-5:0.1:5;y=(-2.5:0.1:2.5)';N=length(x);M=length(y);for ii=1:M for jj=1:N Z0(ii,jj)=sin(abs(x(jj)*y(ii))); endend

非向量化程序

【例 3.3-2】用间距为 0.1 的水平线和垂直线均匀分割 的矩形域,在所有水平线和垂直线交点上计算函 数y=sin|xy| 的值,并图示。

[ 2.5,2.5]y [ 5,5],x

[X,Y]=meshgrid(x,y); Z=sin(abs(X.*Y));

向量化程序

norm(Z-Z0)ans = 0

比较两个数组是否相等 (2范数接近 eps)

surf(X,Y,Z)xlabel('x')ylabel('y')shading interpview([190,70])

绘制二元函数图形

Page 32: 第 3 章  数值数组及向量化运算

按 IEEE规定 , 0/0, ∞/∞, 0*∞ 等运算都会产生非数 , 在matlab 中记为 nan.

它具有以下性质:1) nan 参与运算所得结果也是 nan ,即具有传递性.2) 非数没有大小概念,不能比较两个非数的大小.功能:真实记述0/0, ∞/ ∞, 0* ∞运算的后果 ; 避免可能因以上运算而造成的程序执行的中断 ; 在数据可视化中 ,用来裁减图形.

3.4 “ 非数”和“空”数组3.4.1 非数 NaN

Page 33: 第 3 章  数值数组及向量化运算

【例 3.4-1】非数的产生和性质演示

(1) 非数的产生

a=0/0, b=0*log(0), c=inf - inf

(2) 非数的传递性

0*a, sin (a);

(3) 非数的属性判断

class (a), isnan (a)

isnan----唯一能正确判断非数的指令

Page 34: 第 3 章  数值数组及向量化运算

3.4.2“ 空”数组空数组的功能:

空数组没参与运算时 ,计算结果中的空可以合理地解释所得结果的含义 (如在某数组中寻找满足一定条件的数据 ,结果没有 ,得到空数组 ,表示没有满足条件的元素 );a=[1,2,3]; f_array=find (a<0)

f_array = Empty matrix: 1-by-0

运用空数组对其他非空数组赋值 ,可以改变数组的大小 ,但不能改变数组的维数.

A=reshape(-4:5,2,5) A = -4 -2 0 2 4 -3 -1 1 3 5

size(A)ans = 2 5

A(:,[2,4])=[ ]A = -4 0 4 -3 1 5

size(A)ans = 2 3ndims(A)ans = 2

Page 35: 第 3 章  数值数组及向量化运算

运用空数组对其他非空数组赋值 ,可以改变数组的大小 ,但不能改变数组的维数.

A=rand(2,3,2,4) ;

size(A)ans = 2 3 2 4ndims(A)ans = 4

A(:, :,[1,2] ,:)=[ ]A = Empty array: 2-by-3-by-0-by-4

size(A)ans = 2 3 0 4ndims(A)ans = 4

3.4.2“ 空”数组

Page 36: 第 3 章  数值数组及向量化运算

( 1)创建 ”空” 数组的几种方法a=[ ]b=ones(2,0),c=zeros(2,0),d=eye(2,0)f=rand(2,3,0,4); array3=1:-5;

( 2)空数组的属性

【例 3.4-3】关于“空”数组的算例。

class(a) isnumeric(a)isempty(a) % 空数组的判断ans = doubleans = 1ans = 1

which andims(a)size(a)a is a variable.ans = 2ans = 0 0

Page 37: 第 3 章  数值数组及向量化运算

3.5 关系操作和逻辑操作

• 3.5.1 关系操作• 3.5.2 逻辑操作• 3.5.3 常用逻辑函数

Page 38: 第 3 章  数值数组及向量化运算

matlab 的约定

1) 在所有关系表达式和逻辑表达式中 , 作为输入的任何非 0 数都被看作逻辑真 ,只有 0才被认为是逻辑假 .

2) 所有关系表达式和逻辑表达式的计算结果 , 即输出 ,是一个由 0 和1作成的逻辑数组 . 其中1表示真 , 0表示假 .

3) 逻辑数组是一种特殊的数值数组 ,它表示着对事物的判断结论“真”与”假“

3.5 关系操作和逻辑操作

Page 39: 第 3 章  数值数组及向量化运算

3.5.1 关系操作

指令

  含  义 指令

  含  义

< 小于 >= 大于等于<= 小于等于 == 等于> 大于 ~= 不等于说明:

1) 标量可以与任何维数的数组进行比较 ,比较在此标量和数组 每个元素之间进行 ,因此比较结果为与被比较数组同维的数组 .2) 数组进行比较时 , 两数组必须是同维的 , 结果也得到一个同维的数组.

Page 40: 第 3 章  数值数组及向量化运算

| 2, 4, 6 | | 1, 3, 5 |A=| 3, 5, 7 | B= | 4, 6, 8 | | 1, 8, 9 | | 2, 7, 9 |

|1, 1, 1| |0, 0, 1|A>B= |0, 0, 0| A>5= |0, 0, 1| |0, 1, 0| |0, 1, 1|

A=[2 4 6;3 5 7;1 8 9]find(A>5) => ans=[6,7,8,9]' % 得到数组下标 , 单下标A(find(A>5)) => ans=[ 8,6,7,9]'A(find(A>5))=5; % A(A>5)=5

A = 2 4 5

1 5 5 3 5 5

Page 41: 第 3 章  数值数组及向量化运算

【例 3.5-2】关系运算应用。求近似极限 ,修补图形缺口 sin (t)/t, t [-2∈ π,2π]

t=-2*pi : pi/10 : 2*pi;y=sin(t)./t; % 在 t=0处产生非数tt=t+(t==0)*eps ; % 处理分母为0的点yy=sin(tt)./tt;subplot(2,1, 1),plot(t,y);axis([-7,7,-0.5,1.2]);xlabel('t'),ylabel('y'),title('残缺图形 ');subplot(2,1, 2),plot(tt,yy);axis([-7,7,-0.5,1.2]);xlabel ('t'), ylabel('yy'), title('完整图形 ')

tt=t; tt(find(tt==0))=eps;

tt(tt==0)=eps;

Page 42: 第 3 章  数值数组及向量化运算

3.5.2 逻辑操作

说明:1) 标量可以与任何维的数组运算 . 逻辑运算在标量与数组每个元素间进行 , 因此运算结果是与参与运算的数组维数相同的数组 .

2) 数组之间也可以进行逻辑运算,参与运算的必须维数相同 .此时运算在两数组同位置上的元素之间进行 .因此运算结果是与参与运算的数组维数相同的数组.

指令 & | ~ xor

含义 与 或 非 异或

Page 43: 第 3 章  数值数组及向量化运算

【例 3.5-3】逻辑操作和关系操作。本例演示:逻辑、关系操作的组合; xor 的作用。

%(1) A=[-2,-1,0,0,1,2,3]L1=~(A>1)L2=(A>0)&(A<2)

%( 2)A,B=[0,-1,1,0,1,-2,-3]C=xor(A,B)

A = -2 -1 0 0 1 2 3L1 = 1 1 1 1 1 0 0L2 = 0 0 0 0 1 0 0

A = -2 -1 0 0 1 2 3B = 0 -1 1 0 1 -2 -3C = 1 0 1 0 0 0 0

逻辑操作中任何非零数都看作逻辑 1

Page 44: 第 3 章  数值数组及向量化运算

sin ( sin 0)

0 ( sin 0)

t tz

t

[0, pi], [2pi, 3pi]

t<pi | t>2pi, z=sin(t)*1; 否则 z=sin(t)*0 ; z=sin(t)*((t<pi)|(t>2*pi))

【例 3.5-4】试绘制如图 3.5-2最下那幅子图所示的“正弦波 y=sint (t [0,3∈ π] ) ”的削顶半波整流波形 ,削顶发生在每个周期的 [600,1200]之间。

t=linspace(0, 3*pi, 500); y=sin(t);z1=((t<pi)|(t>2*pi)).*y; %半波整流波形w=(t>pi/3&t<2*pi/3)+(t>7*pi/3&t<8*pi/3); %削顶区间置 1 ,其余为零wn=~w; %削顶区间置零,其余为 1z2=w*sin(pi/3)+wn.*z1; %削顶半波整流波形subplot(4,1,1),plot(t,y, ':r '), axis([0 10 -1.5 1.5]); ylabel('y');subplot(4,1,2),plot(t,z1, ':r '), axis([0 10 -0.2 1.5]); ylabel('z1');subplot(4,1,3),plot(t,wn, ':r '), axis([0 10 -0.2 1.5]); ylabel('wn');subplot(4,1,4),plot(t,z2,'-b'), axis([0 10 -0.2 1.5]); ylabel('z2');

Page 45: 第 3 章  数值数组及向量化运算

3.5.2 常用逻辑函数

指令 含 义 指 令 含 义all (A) A 中元素全为非 0 时为 1,

否则 0isfinite(x) X 中有限大小元素的位置取

1 ,其余取 0

any(A) A 中有非 0则为 1 isempty(x) X 为空,则为 1

false 创建全 0 逻辑数组 isspace(x) 空格元素处取 1, 其余取 0

true 创建全 1 逻辑数组 isletter(x) X 中英文字母处取 1, 其余为0

logical 创建逻辑数组 , 1 对应输入数组中非 0 元素 , 其余为 0

isprime(x) 质数元素位置处取 1 ,其余取 0

isreal(x) 实数元素位置处取 1 ,其余取 0

isnan(x) 判断数组中元素是否为 NaN

isinf(x) x 中无穷大处位置取 1, 其余取 0

isequal(A,B) A,B 对应元素相等时,相应元素位置取 1,否则取 0

Page 46: 第 3 章  数值数组及向量化运算

数据类型判断指令

  指 令   含  义  指  令   含   义

isa(x,’name’) 判断 x 类型 ishandle (x) 判断是否图柄代号

ischar (x) 判断 x 是否字符串 islogical (x) 判断是否逻辑数据

isglobal (x) 判断是否全局变量 isnumeric (x) 判断是否数值

iscell (x) 判断 x 是否元胞 isobject (x) 判断是否对象

iscellstr (x) 判断 x 是否字符串元胞数组

isfield (x,’ name’) 判断 name 是否架构x 的域名

isstruct (x) 判断是否是架构 issparse (x) 判断矩阵是否稀疏

Page 47: 第 3 章  数值数组及向量化运算

第二章习题 有关问题

%习题 2-6clear all; syms z k; syms a positivefk =a^k*z^(-k) s=symsum(fk,k,0,inf) % 在 6.5 版本上得到结果 s =-z/(a - z) 。% 在 2010 版本上用以上指令只能得到如下解,%s =piecewise([a = z, Inf], [a <> z, limit(a^k/(z^k*(a/z - 1)), k

= Inf) - z/(a - z)])limit(a^k/(z^k*(a/z - 1)), k = Inf) 并不为零,因为不确定 a 是否小

于 z% s1=ztrans(a^k,k,z) % 结果 s1 =-z/(a - z)

Page 48: 第 3 章  数值数组及向量化运算

第二章习题 有关问题%习题 2-23clear, syms x y S C3S = dsolve('Dy*y/5+x/4=0','x') % 解为 S = % 2^(1/2)*(C3 - (5*x^2)/8)^(1/2)% -2^(1/2)*(C3 - (5*x^2)/8)^(1/2)ezplot(subs(S(1),'C3',1),[-2,2 -2,2],1), hold onezplot(subs(S(2),'C3',1),[-2,2 -2,2],1) % 用此两条指令绘圆,在 y=0处有间隙

ezplot(subs(y^2-(S(1))^2, 'C3', 1),[-2,2 -2,2],2) % 用椭圆方程绘图不产生间隙

colormap([0 0 1]) % 用 ezplot(fun)绘图时,如果 fun 中只有一个参数,绘图的颜色是蓝色;如果 fun 中有两个参数,绘图的颜色是绿色,此指令设置图形颜色为蓝。

grid on

Page 49: 第 3 章  数值数组及向量化运算

习题 3 (Page142) 1-8 题全做