L=A<3 A(L)=NaN L =
1 0 0 0 0 0 1 0 0 0 0 0 A =
NaN 3 5 7 9 11 NaN 4 6 8 10 12
3.2.4 数组构作技法综合
为了生成比较复杂的数组,或为了对已生成数组的进行修改、扩展,MATLAB提供了诸如反转、插入、提取、收缩、重组等操作。理解和掌握本节内容,对灵活使用MATLAB是重要的。
【例 3.2-7】数组操作函数reshape, diag, blkdiag, cat, repmat的用法;空阵 [ ] 删除子数组的用法。
a=1:8 A=reshape(a,4,2) A=reshape(A,2,4) a =
1 2 3 4 5 6 7 8 A =
1 5 2 6 3 7 4 8 A =
1 3 5 7 2 4 6 8
b=diag(A) B=diag(b) b = 1 4 B =
1 0 0 4
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],: )=[ ] D1 =
0 4 0 4 0 4 0 4
0 4 0 4 0 4 0 4
【例3.2-8】函数flipud, fliplr, rot90对数组的操作体现着“矩阵变换”。
A=reshape(1:9,3,3) A =
1 4 7 2 5 8 3 6 9
6
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
3.3
3.3.1 一
数组运算
数组运算的由来和规则 函数关系数值计算模型的分类
与符号计算不同,数值计算接受的是离散数字,在计算过程中的加减乘除等运算和函数运算是对离散数据集进行的,而最终的计算结果也是离散数据集。
二
数组运算规则
?[aij]m?n和B?[bij]m?n的算术运算结果为数组
两个同维同大小的(m?n)数组AC?[cij]m?n,即C数组的第(i,j) 元素一定是数组A和B相同位置元素进行那指定算术
运算的结果。
三
数组运算符及数组运算函数
3.3.2 数组运算和向量化编程
u,其中r, u, i分别是电阻(欧姆)、电压(伏特)、电流i 【例 3.3-1】欧姆定律:r?(安培)。验证实验:据电阻两端施加的电压,测量电阻中流过的电流,然后据测得的电压、电流计算平均电阻值。(测得的电压电流具体数据见下列程序)。 (1)非向量化程序
clear
vr=[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);
7
end
r % <10> % -------------非向量化编程计算平均电阻值--------------
sr=0; % <12> for k=1:L sr=sr+r(k); end
rm=sr/L r =
Columns 1 through 6
31.7857 30.0000 30.9000 29.4483 30.6780 29.8837 Columns 7 through 10
30.0669 30.8171 31.4935 30.1739 rm =
30.5247
(2)数组运算
vr=[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]; r0=vr./ir rm=mean(r0) r0 =
Columns 1 through 6
31.7857 30.0000 30.9000 29.4483 30.6780 29.8837 Columns 7 through 10
30.0669 30.8171 31.4935 30.1739 rm =
30.5247
(1) 用范数比较两个数组的差 c=norm(r0-r) c =
0
3.4
3.4.1
“非数”和“空”数组
非数NaN
0?,0??等运算都会产生非数(Not a Number)。该非数在MATLAB0?按IEEE规定,,中用NaN 或 nan 记述。 根据IEEE数学规范,NaN具有以下性质:
? NaN参与运算所得的结果也是NaN,即具有传递性。 ? 非数没有“大小”概念,因此不能比较两个非数的大小。
【例3.4-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
8
(2)非数的传递性
0*a,sin(a) ans = NaN ans = NaN
(3)非数的属性判断
class(a) isnan(a) size(a) ans = double ans = 1 ans =
1 1
【例3.4-2】非数元素的寻访。
%创建带非数的二维数组 rand('state',0)
R=rand(2,5);R(1,5)=NaN;R(2,3)=NaN;R(1,2)=NaN R =
0.9501 NaN 0.8913 0.4565 NaN 0.2311 0.4860 NaN 0.0185 0.4447
LR=isnan(R) LR =
0 1 0 0 1 0 0 1 0 0
%找出非数元素的位置标识
si=find(LR) [rj,cj]=ind2sub(size(R),si) [ri,ci]=find(LR)
disp('非数在二维数组R中的“单下标”位置:')
disp([' 单下标时的第',int2str(si(1)),'、第',int2str(si(2)),'、第',int2str(si(3)),'个元素']) disp([' '])
disp('非数在二维数组R中的“全下标”位置:')
disp([' 第',int2str(ri(1)),'行,第',int2str(ci(1)),'列元素']) disp([' 第',int2str(ri(2)),'行,第',int2str(ci(2)),'列元素']) disp([' 第',int2str(ri(3)),'行,第',int2str(ci(3)),'列元素']) si = 3 6 9 rj = 1 2 1 cj = 2 3 5 ri = 1 2 1 ci = 2 3
9
5
非数在二维数组R中的“单下标”位置: 单下标时的第3、第6、第9个元素
非数在二维数组R中的“全下标”位置: 第1行,第2列元素 第2行,第3列元素 第1行,第5列元素
3.4.2 “空”数组
“空”数组是MATLAB为操作和表述需要而专门设计的一种数组。 二维“空”数组,用一对方括号表示。
高维数组,某维长度为0或若干维长度均为0,则构成“空”数组。
【例3.4-3】关于“空”数组的算例。 (1)创建“空”数组的几种方法
a=[]
b=ones(2,0)
f=rand(2,3,0) %2行3列0页 a =
[] b =
Empty matrix: 2-by-0 f =
Empty array: 2-by-3-by-0
(2)“空”数组的属性
class(a) isnumeric(a) isempty(a) ans = double ans = 1 ans = 1
which a ndims(a) size(a) a is a variable. ans = 2 ans =
0 0
(3)“空”数组用于子数组的删除和大数组的大小收缩 A=reshape(-4:5,2,5)
A =
-4 -2 0 2 4 -3 -1 1 3 5
A(:,[2,4])=[] A =
-4 0 4 -3 1 5
10
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库数值数组及向量化运算(2)在线全文阅读。
相关推荐: