第三章MATLAB的数值计算功能
更新时间:2023-12-25 06:39:01 阅读量: 教育文库 文档下载
3 数值数组及其运算
3.1 引导
【*例3.1-1】绘制函数y?xe?x在0?x?1时的曲线。
x=0:0.1:1 %定义自变量的采样点取值数组
y=x.*exp(-x) %利用数组运算计算各自变量采样点上的函数值
plot(x,y),xlabel('x'),ylabel('y'),title('y=x*exp(-x)') %绘图 x =
Columns 1 through 7
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 Columns 8 through 11
0.7000 0.8000 0.9000 1.0000 y =
Columns 1 through 7
0 0.0905 0.1637 0.2222 0.2681 0.3033 0.3293 Columns 8 through 11
0.3476 0.3595 0.3659 0.3679 y=x*exp(-x)0.40.350.30.250.20.150.10.050y00.20.4x0.60.81图3.1-1
3.2 一维数组的创建和寻访
3.2.1 一维数组的创建
3.2.2 一维数组的子数组寻访和赋值
【*例3.2.2-1】子数组的寻访(Address)。
rand('state',0) x=rand(1,5)
%把均匀分布伪随机发生器置为0状态 %产生(1?5)的均布随机数组
1
x =
0.9501 0.2311 0.6068 0.4860 0.8913
x(3) %寻访数组x的第三个元素。 ans =
0.6068
x([1 2 5]) %寻访数组x的第一、二、五个元素组成的子数组。 ans =
0.9501 0.2311 0.8913 x(1:3) %寻访前三个元素组成的子数组 ans =
0.9501 0.2311 0.6068
x(3:end) %寻访除前2个元素外的全部其他元素。end是最后一个元素的下标。 ans =
0.6068 0.4860 0.8913
x(3:-1:1) %由前三个元素倒排构成的子数组 ans =
0.6068 0.2311 0.9501
x(find(x>0.5)) %由大于0.5的元素构成的子数组 ans =
0.9501 0.6068 0.8913
x([1 2 3 4 4 3 2 1]) %对元素可以重复寻访,使所得数组长度允许大于原数组。 ans =
Columns 1 through 7
0.9501 0.2311 0.6068 0.4860 0.4860 0.6068 0.2311 Column 8 0.9501
【*例3.2.2-2】子数组的赋值(Assign)。
x(3) = 0 %把上例中的第三个元素重新赋值为0 x =
0.9501 0.2311 0 0.4860 0.8913
x([1 4])=[1 1] %把当前x数组的第一、四个元素都赋值为1。 x =
1.0000 0.2311 0 1.0000 0.8913
3.3 二维数组的创建
3.3.1 直接输入法
【*例3.3.1-1】在MATLAB环境下,用下面三条指令创建二维数组C。
a=2.7358; b=33/79; %这两条指令分别给变量 a ,b 赋值。 C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i] %这指令用于创建二维数组C C =
1.0000 5.4716 + 0.4177i 0.6909 0.7071 4.8244 3.5000 + 1.0000i
2
【*例3.3.1-2】复数数组的另一种输入方式。
M_r=[1,2,3;4,5,6],M_i=[11,12,13;14,15,16] CN=M_r+i*M_i %由实部、虚部数组构成复数数组 M_r =
1 2 3 4 5 6 M_i =
11 12 13 14 15 16 CN =
1.0000 +11.0000i 2.0000 +12.0000i 3.0000 +13.0000i 4.0000 +14.0000i 5.0000 +15.0000i 6.0000 +16.0000i
3.3.2 利用M文件创建和保存数组
【例3.3.2-1】创建和保存数组 AM的 MyMatrix.m 文件。
% MyMatrix.m Creation and preservation of matrix AM AM=[101,102,103,104,105,106,107,108,109;... 201,202,203,204,205,206,207,208,209;... 301,302,303,304,305,306,307,308,309];
3.4 二维数组元素的标识
3.4.1 “全下标”标识 3.4.2 “单下标”标识 3.4.3 “逻辑1”标识
【*例3.4.3-1】找出数组A????4?2024??中所有绝对值大于3的元素。
?3?1135??A=zeros(2,5); %预生成一个(2*5)全零数组
A(:)=-4:5 %运用“全元素”赋值法获得A
L=abs(A)>3 %产生与A同维的“0-1”逻辑值数组
islogical(L) %判断L是否逻辑值数组。输出若为1,则是。 X=A(L) %把L中逻辑值1对应的A元素取出 A =
-4 -2 0 2 4 -3 -1 1 3 5 L =
1 0 0 0 1 0 0 0 0 1 ans = 1 X = -4 4 5
3
【*例3.4.3-2】演示逻辑数组与一般双精度数值数组的关系和区别。(本例在例3.4.3-1基础上进行)。
(1)逻辑数组与双精度数组的相同之处
Num=[1,0,0,0,1;0,0,0,0,1]; %产生与L数组外表完全相同的“双精度数组” N_L=Num==L %假如Num与L数值相等,则应得 1 。 c_N=class(Num) %用class指令检查Num的类属 c_L=class(L) %用class指令检查L的类属 N_L =
1 1 1 1 1 1 1 1 1 1 c_N = double c_L = double
(2)逻辑数组与一般双精度数组的差别
islogical(Num) %检查Num是否属于逻辑数组类
Y=A(Num) %试探Num能否象L一样具有标识作用 ans = 0
??? Index into matrix is negative or zero. See release notes on changes to
logical indices.
3.5 二维数组的子数组寻访和赋值
【*例3.5-1】不同赋值方式示例。
A=zeros(2,4) %创建(2?4)的全零数组 A =
0 0 0 0 0 0 0 0
A(:)=1:8 %全元素赋值方式 A =
1 3 5 7 2 4 6 8
s=[2 3 5]; %产生单下标数组行数组
A(s) %由“单下标行数组”寻访产生A元素组成的行数组 Sa=[10 20 30]' %Sa是长度为3的“列数组” A(s)=Sa %单下标方式赋值 ans =
2 3 5 Sa = 10 20 30 A =
1 20 30 7 10 4 6 8
A(:,[2 3])=ones(2) %双下标赋值方式:把A的第2、3列元素全赋为1 A =
1 1 1 7
4
10 1 1 8
3.6 执行数组运算的常用函数
3.6.1 函数数组运算规则的定义: 3.6.2 执行数组运算的常用函数
【*例3.6.2-1】演示pow2的数组运算性质。
A=[1:4;5:8] %生成(2?4)数组 A =
1 2 3 4 5 6 7 8
pow2(A) %计算2?2ans =
2 4 8 16
32 64 128 256
A[aij]的结果也是(2?4)数组
3.7 数组运算和矩阵运算
3.7.1 数组运算和矩阵运算指令对照汇总
【*例 3.7.1-1】两种不同转置的比较
clear;A=zeros(2,3);
A(:)=1:6; %全元素赋值法
A=A*(1+i) %运用标量与数组乘产生复数矩阵 A_A=A.' %数组转置,即非共轭转置 A_M=A' %矩阵转置,即共轭转置 A =
1.0000 + 1.0000i 3.0000 + 3.0000i 5.0000 + 5.0000i 2.0000 + 2.0000i 4.0000 + 4.0000i 6.0000 + 6.0000i A_A =
1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i 4.0000 + 4.0000i 5.0000 + 5.0000i 6.0000 + 6.0000i A_M =
1.0000 - 1.0000i 2.0000 - 2.0000i 3.0000 - 3.0000i 4.0000 - 4.0000i 5.0000 - 5.0000i 6.0000 - 6.0000i
3.8 多项式的表达方式及其操作
5
3.8.1 多项式的表达和创建 3.8.1.1 多项式表达方式的约定 3.8.1.2 多项式行向量的创建方法
【*例 3.8.1.2-1】求3阶方阵A的特征多项式。
A=[11 12 13;14 15 16;17 18 19];
PA=poly(A) %A的特征多项式
PPA=poly2str(PA,'s') %以较习惯的方式显示多项式 PA =
1.0000 -45.0000 -18.0000 -0.0000 PPA =
s^3 - 45 s^2 - 18 s - 2.8387e-015
【*例 3.8.1.2-2】由给定根向量求多项式系数向量。
R=[-0.5,-0.3+0.4*i,-0.3-0.4*i]; %根向量
P=poly(R) %R的特征多项式 PR=real(P) %求PR的实部 PPR=poly2str(PR,'x') P =
1.0000 1.1000 0.5500 0.1250 PR =
1.0000 1.1000 0.5500 0.1250 PPR =
x^3 + 1.1 x^2 + 0.55 x + 0.125
3.8.2 多项式运算函数
(s2?2)(s?4)(s?1)【*例3.8.2-1】求的“商”及“余”多项式。 3s?s?1p1=conv([1,0,2],conv([1,4],[1,1])); %计算分子多项式 p2=[1 0 1 1]; %注意缺项补零 [q,r]=deconv(p1,p2);
cq='商多项式为 '; cr='余多项式为 ';
disp([cq,poly2str(q,'s')]),disp([cr,poly2str(r,'s')]) 商多项式为 s + 5
余多项式为 5 s^2 + 4 s + 3
【*例 3.8.2-2】两种多项式求值指令的差别。
S=pascal(4) %生成一个4阶方阵 P=poly(S);PP=poly2str(P,'s')
PA=polyval(P,S) %独立变量取数组S元素时的多项式值 PM=polyvalm(P,S) %独立变量取矩阵S时的多项式值 S =
1 1 1 1 1 2 3 4 1 3 6 10 1 4 10 20 PP =
s^4 - 29 s^3 + 72 s^2 - 29 s + 1 PA =
1.0e+004 *
6
0.0016 0.0016 0.0016 0.0016 0.0016 0.0015 -0.0140 -0.0563 0.0016 -0.0140 -0.2549 -1.2089 0.0016 -0.0563 -1.2089 -4.3779 PM =
1.0e-011 *
-0.0077 0.0053 -0.0096 0.0430 -0.0068 0.0481 -0.0110 0.1222 0.0075 0.1400 -0.0095 0.2608 0.0430 0.2920 -0.0007 0.4737
【*例 3.8.2-3】部分分式展开。
a=[1,3,4,2,7,2]; b=[3,2,5,4,6]; [r,s,k]=residue(b,a) r =
1.1274 + 1.1513i 1.1274 - 1.1513i -0.0232 - 0.0722i -0.0232 + 0.0722i 0.7916 s =
-1.7680 + 1.2673i -1.7680 - 1.2673i 0.4176 + 1.1130i 0.4176 - 1.1130i -0.2991 k =
[]
%分母多项式系数向量 %分子多项式系数向量
3.9 标准数组生成函数和数组操作函数
3.9.1 标准数组生成函数
【*例3.9.1-1】标准数组产生的演示。
ones(1,2) %产生长度为2的全1行数组 ans =
1 1
ones(2) %产生(2?2)的全1阵 ans =
1 1 1 1
randn('state',0) %把正态随机数发生器置0 randn(2,3) %产生(2?3)的正态随机阵 ans =
-0.4326 0.1253 -1.1465 -1.6656 0.2877 1.1909
D=eye(3) %产生(3?3)的单位阵 D =
1 0 0 0 1 0 0 0 1
7
diag(D) %取D阵的对角元 ans = 1 1 1
diag(diag(D)) %内diag取D的对角元,外diag利用一维数组生成对角阵 ans =
1 0 0 0 1 0 0 0 1
repmat(D,1,3) %在水平方向“铺放”三个D阵 ans =
1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1
3.9.2 数组操作函数
【*例 3.9.2-1】diag与reshape的使用演示。
a=-4:4 %产生一维数组 A=reshape(a,3,3) %把一维数组a重排成(3?3)的二维数组 a =
-4 -3 -2 -1 0 1 2 3 4 A =
-4 -1 2 -3 0 3 -2 1 4
a1=diag(A,1) %取A阵“第一上对角线”的元素 a1 = -1 3
A1=diag(a1,-1) %产生以a1数组元素为“第一下对角线”元素的二维数组 A1 =
0 0 0 -1 0 0 0 3 0
【*例3.9.2-2】数组转置、对称交换和旋转操作后果的对照比较。
A A =
-4 -1 2 -3 0 3 -2 1 4 A.' %转置 ans =
-4 -3 -2 -1 0 1 2 3 4
flipud(A) %上下对称交换 ans =
-2 1 4
8
-3 0 3 -4 -1 2
fliplr(A) %左右对称交换 ans =
2 -1 -4 3 0 -3 4 1 -2
rot90(A) %逆时针旋转90度 ans =
2 3 4 -1 0 1 -4 -3 -2
【*例3.9.2-3】演示Kronecker乘法不具备“可交换规律”。
B=eye(2)
%产生(2?2)单位阵
C=reshape(1:4,2,2) %利用重组操作产生(2?2)矩阵 B =
1 0 0 1 C =
1 3 2 4
kron(B,C) ans =
1 3 0 0 2 4 0 0 0 0 1 3 0 0 2 4
kron(C,B) ans =
1 0 3 0 0 1 0 3 2 0 4 0 0 2 0 4
3.10 数组构作技法综合
【*例3.10-1】数组的扩展。 (1)数组的赋值扩展法
A=reshape(1:9,3,3) %创建(3?3)数组A A =
1 4 7 2 5 8 3 6 9
A(5,5)=111 %扩展为(5?5)数组。扩展部分除(5,5)元素为111外,其余均为0。 A =
1 4 7 0 0 2 5 8 0 0 3 6 9 0 0 0 0 0 0 0 0 0 0 0 111
9
A(:,6)=222 %标量对子数组赋值,并扩展为(5?6)数组。 A =
1 4 7 0 0 222 2 5 8 0 0 222 3 6 9 0 0 222 0 0 0 0 0 222 0 0 0 0 111 222
(2)多次寻访扩展法
AA=A(:,[1:6,1:6]) %相当于指令repmat(A,1,2),读者可以试试。 AA =
1 4 7 0 0 222 1 4 7 0 0 222 2 5 8 0 0 222 2 5 8 0 0 222 3 6 9 0 0 222 3 6 9 0 0 222 0 0 0 0 0 222 0 0 0 0 0 222 0 0 0 0 111 222 0 0 0 0 111 222
(3)合成扩展法
B=ones(2,6) %创建(2?6)全1数组 B =
1 1 1 1 1 1 1 1 1 1 1 1
AB_r=[A;B] %行数扩展合成 AB_r =
1 4 7 0 0 222 2 5 8 0 0 222 3 6 9 0 0 222 0 0 0 0 0 222 0 0 0 0 111 222 1 1 1 1 1 1 1 1 1 1 1 1
AB_c=[A,B(:,1:5)'] %列数扩展合成 AB_c =
1 4 7 0 0 222 1 1 2 5 8 0 0 222 1 1 3 6 9 0 0 222 1 1 0 0 0 0 0 222 1 1 0 0 0 0 111 222 1 1
【*例3.10-2】提取子数组,合成新数组。
A %重显A数组 A =
1 4 7 0 0 222 2 5 8 0 0 222 3 6 9 0 0 222 0 0 0 0 0 222 0 0 0 0 111 222
AB_BA=triu(A,1)+tril(A,-1) %利用操作函数,使主对角元素为全0 AB_BA =
0 4 7 0 0 222 2 0 8 0 0 222 3 6 0 0 0 222 0 0 0 0 0 222 0 0 0 0 0 222
AB1=[A(1:2,end:-1:1);B(1,:)] %灵活合成
10
AB1 =
222 0 0 7 4 1 222 0 0 8 5 2 1 1 1 1 1 1
【*例3.10-3】单下标寻访和reshape指令演示。
clear %清除内存变量
A=reshape(1:16,2,8) %变一维数组成(2?8)数组 A =
1 3 5 7 9 11 13 15 2 4 6 8 10 12 14 16
reshape(A,4,4) %变(2?8)数组为(4?4)数组 ans =
1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16
s=[1 3 6 8 9 11 14 16]; %定义“单下标”数组 A(s)=0 %利用“单下标”数组对A的元素重新赋值 A =
0 0 5 7 0 0 13 15 2 4 0 0 10 12 0 0
【*例3.10-4】“对列(或行)同加一个数”三种的操作方法。 clear,A=reshape(1:9,3,3)
A =
1 4 7 2 5 8 3 6 9
b=[1 2 3];A_b1=A-b([1 1 1],:) %使A的第1,2,3行分别减b向量[1 2 3] A_b1 =
0 2 4 1 3 5 2 4 6
A_b2=A-repmat(b,3,1) A_b2 =
0 2 4 1 3 5 2 4 6
A_b3=[A(:,1)-b(1),A(:,2)-b(2),A(:,3)-b(3)] A_b3 =
0 2 4 1 3 5 2 4 6
【*例3.10-5】逻辑函数的运用示例。
randn('state',1),R=randn(3,6) %创建正态随机阵 R =
0.8644 0.8735 -1.1027 0.1684 -0.5523 -0.6149 0.0942 -0.4380 0.3962 -1.9654 -0.8197 -0.2546 -0.8519 -0.4297 -0.9649 -0.7443 1.1091 -0.2698
11
L=abs(R)<0.5|abs(R)>1.5 %不等式条件运算,结果给出逻辑数组 L =
0 0 0 1 0 0 1 1 1 1 0 1 0 1 0 0 0 1
R(L)=0 %“逻辑1”对应的元素赋0值。 R =
0.8644 0.8735 -1.1027 0 -0.5523 -0.6149 0 0 0 0 -0.8197 0 -0.8519 0 -0.9649 -0.7443 1.1091 0
s=(find(R==0))' %利用find获得符合关系等式条件的元素“单下标” s =
2 5 6 8 10 11 17 18
R(s)=111 %利用“单下标”定位赋值 R =
0.8644 0.8735 -1.1027 111.0000 -0.5523 -0.6149 111.0000 111.0000 111.0000 111.0000 -0.8197 111.0000 -0.8519 111.0000 -0.9649 -0.7443 1.1091 111.0000
[ii,jj]=find(R<0); %利用find获得符合关系等式条件的元素“双下标” disp(ii'),disp(jj')
3 1 3 3 1 2 1 1 3 3 4 5 5 6
3.11 高维数组
3.11.1 高维数组的创建
【*例3.11.1-1】“全下标”元素赋值方式创建高维数组演示。 A(2,2,2)=1 %单元素赋值创建(2?2?2)数组
A(:,:,1) = 0 0 0 0 A(:,:,2) = 0 0
0 1
B(2,5,:)=1:3 %子数组赋值创建(2?5?3)数组 B(:,:,1) =
0 0 0 0 0 0 0 0 0 1 B(:,:,2) =
0 0 0 0 0 0 0 0 0 2 B(:,:,3) =
0 0 0 0 0 0 0 0 0 3
【*例3.11.1-2】低维数组合成高维数组。
clear,A=ones(2,3);A(:,:,2)=ones(2,3)*2;A(:,:,3)=ones(2,3)*3 A(:,:,1) =
1 1 1
12
1 1 1 A(:,:,2) =
2 2 2 2 2 2 A(:,:,3) =
3 3 3 3 3 3
【*例3.11.1-3】由函数ones, zeros, rand, randn直接创建标准高维数组的示例。 rand('state',1111),rand(2,4,3)
ans(:,:,1) =
0.6278 0.9748 0.2585 0.6949 0.2544 0.2305 0.0313 0.1223 ans(:,:,2) =
0.4889 0.3898 0.8489 0.0587 0.9138 0.3071 0.4260 0.6331 ans(:,:,3) =
0.2802 0.2073 0.7438 0.2714 0.4051 0.2033 0.4566 0.2421
【*例3.11.1-4】借助cat, repmat, reshape等函数构作高维数组。 (1)cat构作高维数组示例
cat(3,ones(2,3),ones(2,3)*2,ones(2,3)*3) ans(:,:,1) =
1 1 1 1 1 1 ans(:,:,2) =
2 2 2 2 2 2 ans(:,:,3) =
3 3 3 3 3 3
(2)repmat构作高维数组示例
repmat(ones(2,3),[1,1,3]) ans(:,:,1) =
1 1 1 1 1 1 ans(:,:,2) =
1 1 1 1 1 1 ans(:,:,3) =
1 1 1 1 1 1
(3)reshape构作高维数组示例
reshape(1:12,2,2,3) ans(:,:,1) = 1 3 2 4 ans(:,:,2) = 5 7 6 8 ans(:,:,3) = 9 11 10 12
13
3.11.2 高维数组的标识
【*例3.11.2-1】维数、大小和长度
clear;A=reshape(1:24,2,3,4);
dim_A=ndims(A) %测量A的维数 size_A=size(A) %测量A的大小 L_A=length(A) %求A的长度 dim_A = 3 size_A =
2 3 4 L_A = 4
3.11.3 高维数组构作和操作函数汇总
【*例3.11.3-1】数组元素对称交换指令flipdim的使用示例。 A=reshape(1:18,2,3,3) %创建3维数组
A(:,:,1) =
1 3 5 2 4 6 A(:,:,2) =
7 9 11 8 10 12 A(:,:,3) =
13 15 17 14 16 18
flipdim(A,1) ans(:,:,1) =
2 4 6 1 3 5 ans(:,:,2) =
8 10 12 7 9 11 ans(:,:,3) =
14 16 18 13 15 17
flipdim(A,3) ans(:,:,1) =
13 15 17 14 16 18 ans(:,:,2) =
7 9 11 8 10 12 ans(:,:,3) =
1 3 5 2 4 6
%关于“行平分面”交换对称位置上的元素
%关于“页平分面”交换对称位置上的元素
【*例3.11.3-2】数组的“维序号左移”重组。
shiftdim(A,1) %“维号左移1位”重组,使(2?3?3)数组变成(3?3?2)数组 ans(:,:,1) =
1 7 13 3 9 15
14
5 11 17 ans(:,:,2) =
2 8 14 4 10 16 6 12 18
shiftdim(A,2) %“维号左移2位”重组,使(2?3?3)数组变成(3?2?3)数组 ans(:,:,1) = 1 2 7 8 13 14 ans(:,:,2) = 3 4 9 10 15 16 ans(:,:,3) = 5 6 11 12
17 18
【*例3.11.3-3】广义非共轭转置。
permute(A,[2,3,1]) ans(:,:,1) =
1 7 13 3 9 15 5 11 17 ans(:,:,2) =
2 8 14 4 10 16 6 12 18
permute(A,[1,3,2]) ans(:,:,1) =
1 7 13 2 8 14 ans(:,:,2) =
3 9 15 4 10 16 ans(:,:,3) =
5 11 17 6 12 18
%相当于shiftdim(A,1)
【*例3.11.3-4】“孤维”的撤消和降维。
B=cat(4,A(:,:,1),A(:,:,2),A(:,:,3)) %串接为4维数组 B(:,:,1,1) =
1 3 5 2 4 6 B(:,:,1,2) =
7 9 11 8 10 12 B(:,:,1,3) =
13 15 17 14 16 18
size(B) %测量数组B的大小 ans =
2 3 1 3
15
C=squeeze(B) %撤消长度为1的“孤维”,使原4维数组减为3维数组。 C(:,:,1) =
1 3 5 2 4 6 C(:,:,2) =
7 9 11 8 10 12 C(:,:,3) =
13 15 17 14 16 18
size(C) ans =
2 3 3
【*例3.11.3-5】赋“空阵”值操作。
A=reshape(1:18,2,3,3) %创建3维数组 A(:,:,1) =
1 3 5 2 4 6 A(:,:,2) =
7 9 11 8 10 12 A(:,:,3) =
13 15 17 14 16 18
A(:,2:3,:)=[] %赋“空”,使原A数组的第二、三列消失。 B=A;
A(:,:,1) = 1 2
A(:,:,2) = 7 8
A(:,:,3) = 13 14
size(A) ans =
2 1 3
A_1=squeeze(A) %撤消“孤维”,数组由3维降为2维。 A_1 =
1 7 13 2 8 14
size(B) %B数组与A同样存在“孤维” ans =
2 1 3
B(:,1,:)=[] %对“孤维”赋“空”,不能降维! B =
Empty array: 2-by-0-by-3
3.12 “非数”和“空”数组
16
3.12.1 非数NaN
【*例3.12.1-1】非数的产生和性质演示。 (1)非数的产生
a=0/0,b=0*log(0),c=inf-inf
Warning: Divide by zero. a = NaN
Warning: Log of zero. b = NaN c =
NaN
(2)非数的传递性
0*a,sin(a) ans = NaN ans = NaN
(3)非数的不可比较性
a==nan ans = 0
%该指令想计算“a等于非数吗?”。但不能给出正确的判断结果。
(4)非数不能进行关系运算
a~=nan a==b b>c ans = 1 ans = 0 ans = 0
%该指令“a不是非数吗?”,也不可能给出正确的判断结果。 %两个非数不存在“等”与“不等”的概念 %两个非数不能比较大小
(5)非数的属性判断
class(a) isnan(a) ans = double ans = 1
%数据类型归属
%该指令是唯一能正确判断非数的指令。
【*例3.12.1-2】非数元素的寻访
%创建带非数的二维数组
rand('state',0) %将随机发生器置0。目的是使读者便于把自己运算结果与本书对照。 R=rand(2,5);R(1,5)=NaN;R(2,3)=NaN R =
0.9501 0.6068 0.8913 0.4565 NaN 0.2311 0.4860 NaN 0.0185 0.4447
isnan(R) %对数组元素是否非数进行判断
17
ans =
0 0 0 0 1 0 0 1 0 0
%找出非数元素的位置标识
Linear_index=find(isnan(R)) %非数的“单下标”标识
[r_index,c_index]=ind2sub(size(R),Linear_index); %转换成“全下标”标识 disp('r_index c_index'),disp([r_index c_index]) Linear_index = 6 9
r_index c_index 2 3
1 5
3.12.2 “空”数组
【*例3.12.2-1】关于“空”数组的算例。 (1)创建“空”数组的几种方法
a=[],b=ones(2,0),c=zeros(2,0),d=eye(2,0),f=rand(2,3,0,4) a =
[] b =
Empty matrix: 2-by-0 c =
Empty matrix: 2-by-0 d =
Empty matrix: 2-by-0 f =
Empty array: 2-by-3-by-0-by-4
(2)“空”数组的属性
class(a) %“空”的数据类别 isnumeric(a) %是数值数组类吗
isempty(a) %唯一可正确判断数组是否“空”的指令 ans = double ans = 1 ans = 1
which a %变量a是什么 ndims(a) %数组a的维数 size(a) %a数组的大小 a is a variable. ans = 2 ans =
0 0
(3)“空”数组不具备一般的传递性
b_c1=b.*c %两个空阵的点乘
b_c2=b'*c %矩阵乘一。注意:生成矩阵为0-by-0,故“空”。 b_c3=b*c' %矩阵乘二。注意:生成矩阵为2-by-2。 b_c1 =
Empty matrix: 2-by-0
18
b_c2 = [] b_c3 =
0 0 0 0
(4)“空”数组的比较要谨慎
a==b %结果解释不合理
Warning: [] == X is technically incorrect. Use isempty(X) instead. ans = 0
b==c %结果可合理解释为“无法比较” ans =
Empty matrix: 2-by-0 c>d %结果可合理解释“无法比较” ans =
Empty matrix: 2-by-0
a==0 %结果可解释为“不等于”
Warning: Future versions will return empty for empty comparisons. ans = 0
a~=0 %结果解释为“是不等”
Warning: Future versions will return empty for empty comparisons. ans = 1
(5)没有“空”数组参与运算时,结果中的“空”有合理的解释
A=reshape(-4:5,2,5) %创建一个数值数组A A =
-4 -2 0 2 4 -3 -1 1 3 5
L2=A>10 %检查A中大于10的元素位置
find(L2) %找出L2逻辑数组中非0元素的“单下标”标识。 L2 =
0 0 0 0 0 0 0 0 0 0 ans =
[]
(6)“空”数组用于子数组的删除和大数组的维数收缩(参见例3.11.3-5)A(:,[2,4])=[] %删除A的第二、四列 A =
-4 0 4 -3 1 5
3.13 关系操作和逻辑操作
19
== scalar ~= scalar
3.13.1 关系操作
【*例3.13.1-1】关系运算示例。
A=1:9,B=10-A,r0=(A<4),r1=(A==B) A =
1 2 3 4 5 6 7 8 9 B =
9 8 7 6 5 4 3 2 1 r0 =
1 1 1 0 0 0 0 0 0 r1 =
0 0 0 0 1 0 0 0 0
【*例3.13.1-2】关系运算运用之一:求近似极限,修补图形缺口。
t=-2*pi:pi/10:2*pi; %该自变量数组中,存在0值。
y=sin(t)./t; %在t=0处,按IEEE规则,计算将产生NaN tt=t+(t==0)*eps; %逻辑数组参与运算,使0元素被一个“机器零”小数代替。 yy=sin(tt)./tt; %用数值可算的sin(eps)/eps近似替代sin(0)/0极限. subplot(1,2,1),plot(t,y),axis([-7,7,-0.5,1.2]), xlabel('t'),ylabel('y'),title('残缺图形')
subplot(1,2,2),plot(tt,yy),axis([-7,7,-0.5,1.2]) xlabel('t'),ylabel('yy'),title('正确图形') Warning: Divide by zero. 2Dè±í?D?1.210.80.61.210.80.6?yè·í?D?0.20-0.2-0.4-50t5yyy0.40.40.20-0.2-0.4-50t5图3.13.2-2 极限处理前后的图形对照
3.13.2 逻辑操作
【*例3.13.2-1】逻辑操作示例。
A=1:9,L1=~(A>5) %判断A中,哪些元素不大于5
L2=(A>3)&(A<7) %判断A中,哪些元素大于3小于7 A =
1 2 3 4 5 6 7 8 9 L1 =
1 1 1 1 1 0 0 0 0 L2 =
0 0 0 1 1 1 0 0 0
【*例3.13.2-2】逻辑操作应用之一:逐段解析函数的计算和表现。本例演示削顶整流正弦半波的计算和图形绘制。
20
t=linspace(0,3*pi,500);y=sin(t);%产生正弦波 %处理方法一:从自变量着手进行逐段处理。
z1=((t
subplot(1,3,2),plot(t,z1,':r'),axis([0 10 -1 1]) subplot(1,3,3),plot(t,z2,'-b'),axis([0 10 -1 1]) 10.80.60.40.20-0.2-0.4-0.6-0.8-1051010.80.60.40.20-0.2-0.4-0.6-0.8-1051010.80.60.40.20-0.2-0.4-0.6-0.8-10510<3> <4> <5> <6>
y图 3.13.2-1 逐段解析函数的产生
%处理方法二:从函数量着手进行逐段处理。
z=(y>=0).*y; %正弦整流半波 a=sin(pi/3);
z=(y>=a)*a+(y
xlabel('t'),ylabel('z=f(t)'),title('逐段解析函数') legend('y=sin(t)','z=f(t)'),hold off
<11>
<13>
图 3.13.2-2 逐段解析函数的生成和表现
3.13.3 关系、逻辑函数 3.13.4
21
t=linspace(0,3*pi,500);y=sin(t);%产生正弦波 %处理方法一:从自变量着手进行逐段处理。
z1=((t
subplot(1,3,2),plot(t,z1,':r'),axis([0 10 -1 1]) subplot(1,3,3),plot(t,z2,'-b'),axis([0 10 -1 1]) 10.80.60.40.20-0.2-0.4-0.6-0.8-1051010.80.60.40.20-0.2-0.4-0.6-0.8-1051010.80.60.40.20-0.2-0.4-0.6-0.8-10510<3> <4> <5> <6>
y图 3.13.2-1 逐段解析函数的产生
%处理方法二:从函数量着手进行逐段处理。
z=(y>=0).*y; %正弦整流半波 a=sin(pi/3);
z=(y>=a)*a+(y
xlabel('t'),ylabel('z=f(t)'),title('逐段解析函数') legend('y=sin(t)','z=f(t)'),hold off
<11>
<13>
图 3.13.2-2 逐段解析函数的生成和表现
3.13.3 关系、逻辑函数 3.13.4
21
正在阅读:
第三章MATLAB的数值计算功能12-25
九年级数学(下)提高班讲义(三) - 二次函数的实际应用06-25
福清市2012-2013学年度八年级第二学期期中考试数学参考答案04-14
北京化工大学2005考研物理化学试题04-04
水库大坝安全管理应急预案01-08
中国特种设备典型事故案例10-20
2014届毕业生填写就业协议书和就业推荐表注意事项06-09
河北省衡水市重点中学《高考调研》高三历史二轮复习作业18高考热点专题 Word版含答案09-11
模具设计大学本科毕业论文03-08
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 数值
- 第三章
- 功能
- 计算
- MATLAB
- 森林防火工作应知应会100问
- 我国基金经理绩效考核方案设计
- 新课程视野下高中地理主体性教学模式应用研究
- 小升初语文常考辨音试题汇总
- 浅谈新形势下如何做好国有企业党群工作
- 农村寄宿制初中学生卫生习惯的养成研究研究报告
- 理论力学习题集1
- 属猴人的命运 猴年出生的人的命运
- 《闻一多先生的说和做》导学案 - 图文
- 基于OptiSystem软件的OCDMA系统仿真
- 园林树木学试题
- 一汽大众故障代码
- 六年级数学下册《变化的量》教案 北师大版
- 2013年东北农业大学田间试验与统计作业试题
- 基于STM32的室内温度控制系统 - 图文
- 基于产业集群的区域创新政策研究
- 《子路、曾皙、冉有、公西华侍坐》教学设计
- 告别母校演讲稿600字
- 做一个有责任心的小学生主题班会方案
- 综合服务公司2012年上半年工作总结