第三章 数组阵列及向量化运算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.数组运算和矩阵运算指令(表3.2-源自文库,3.2-5)
数组运算 矩阵运算
A.’ A+B,A-B A+s,A-s s.*A s./A, A.\s A.*B A./B, B.\A A.^n s.^A A.^B A#B
非共轭转置
aij±bij aij±s s*aij s/aij, aij\s aij*bij
标识和寻访:
(1)“全下标”标识 A(1,1),A(1, : ) (2)“单下标”标识 A(3), A( : )
注意数组元素内存按列排放
sub2ind 全下标换单下标 例: % a(2,3)换为单下标 sub2ind(size(a),2,3) ind2sub 单下标换全下标 例: %3*3单下标阵中取2,3,5号元素换为双下标
>>LR=isnan( R ) >>[ri,ci]= find(LR) %结果第2行3列,第1行5列元素为NaN
例:“空”数组算例 >>a=[], b=ones(2,0), c=zeros(4,0,2) a = [] b = Empty matrix: 2-by-0 c = Empty array: 4-by-0-by-2 >>class(a),isnumeric(a),isempty(a),which a,size(a) ans = double ans = 1 ans = 1 a is a variable. ans = 0 0 >>reshape(-4:5,2,5), ans(:,[2,4])=[] ans = -4 -2 0 2 4 -3 -1 1 3 5 ans = -4 0 4 -3 1 5
(2)直接对域赋值产生构架数组
G(2).name='六号房‘ G(1).name.a=[1 2 3;3:5]
G
%访问构架结构
G(1) %显示元素构架结构:域;是否有子域
G(2).name %访问name域中内容
本章小结 基本数据类型
数据类型 Data Type 数值 numeric 字符串 char 符号 sym

例:“非数”数组算例 >>a=0/0, b=0*log(0), c=inf - inf a = NaN
0 % , , 0 , 0
b = NaN
c = NaN >>class(a),isnan(a) ans = double ans = 1
>>R=rand(2,5);R(1,5)=NaN;R(2,3)=NaN;
对m行、n列的2维数组a: 计为m×n的数组a; 行标识、列标识均从1开始; 行标识从上到下递增; 列标识从左到右递增。 a=
1
2
3
4
5
2 22 23 24 25 3 32 33 34 35 4 42 43 44 45 a(3, 4)=34
§1 数值数组
1. 一维数组的创建和寻访 创建:(1)逐个元素输入法 >> x= [2 pi/2 sqrt(3) 3+5i] (2)冒号生成法( x = a:inc:b ) >> x = 1:2:10; y = 1:100; z=100:-3:1; (3)线性(或对数)定点法 x = linspace(a,b,n) (等差) 同x = a: (b-a)/(n-1): b x = logspace(a,b,n) (等比) %n为数组长度 例:>>x=linspace(1,7,5) 访问: x(3), x([1,3 5]), x(1:3), x(4:end), x(find(x>4)) (4) 函数生成法例: >>ones(1,6)
例:3.5-2关系运算例:求sin(x)/x近似极限,修补图形缺口
t=-2*pi:pi/10:2*pi; y=sin(t)./t; tt=t+(t==0)*eps; yy=sin(tt)./tt; subplot(1,2,1),plot(t,y),axis([-7,7,-0.3,1.2]) xlabel('t'),ylabel('y'),title('残缺图形') subplot(1,2,2),plot(tt,yy),axis([-7,7,-0.3,1.2]) xlabel('tt'),ylabel('yy'),title('完整图形')
[I,J]=ind2sub([3,3],[2 3 5])
( 3 )“逻辑 1”标识 : 通过与 A 同样大小的逻辑数组 L 中
“逻辑值1”所在的位置,指示A中元素位置
例:A=zeros(2,5); A(:)=-4:5 %2*5阵
L=abs(A)>3, islogical(L),
X=A(L) %满足条件元素按列放,
(2)由小串构成长串 A='这是算例。' ; ab=[A(1:4), 'A.1-2',A(5)] %ab = %这是算例A.1-2。
§3 胞元数组(附录A.2)
1. 定义 胞元数组的基本组分是胞元,胞元在数组中以下 标区分,每个胞元类型、大小可以不同。 2. 胞元标识寻访和内容编址寻访的不同
胞元数组的胞元和胞元里内容是不同范畴的东西, 因而寻访是不同的。
X1=A.*L
等价于X=A(find(L))
数组操作技法综合 变维 a=[1:12];b=reshape(a,3,4),c=zeros(3,4); c(:)=a(:) 变向 rot90(c):逆时针旋转90度; fliplr:左右翻; flipud:上下翻 抽取 diag(c) :抽取主对角线元素成列向量; diag(diag( c)):抽取主对角线元素成对角阵 tril(rand(4),-1): 抽取主下三角; triu:抽取主上三角 扩展 A=reshape(1:4,2,2),A(3,3)=5,A(:,4)=6 B=[A,A] %等价于B=A(:,[1:4,1:4]) , B=repmat(A,1,2) C=[A;A] %等价于 C=A([1:3,1:3],:), C=repmat(A,2,1) D=[A';A']
(1)胞元标识 A(1,4),寻访胞元元素 (2)胞元内容编址 A{1,4},寻访胞元元素内容
3. 胞元数组操作
B=cell(2) %创建2*2空胞元数组 Cstr=char(‘这是胞元数组创建算例 1’); R=reshape(1:9,3,3); Cn=[1+2i]; syms t; Ssym= 'sin(-3*t)*exp(-t)'; (1) 创建 B{1,1}=Cstr; B{1,2}=R; B{2,1}=Cn; B{2,2}=Ssym; (2)胞元的援引 b=B(1,2) ,class(b) %cell型 (3)胞元内容的援引 b=B{1,2},class(b) %double型
§2 字符串数组(附录A.1)
1. 字符标量
b='S', class(b), size(b)
2. 字符串数组的属性和标识
定义:a= 'This is an example.'
大小:size(a)
标识:取子串 a(1:4)
字符串倒排 a(end:-1:1) 取串数组的ASCII码数组 double(a) % 84 104 105 115 32 105 115 32 97 110 32 101 120 97 109 112 108 101 46 取ASCII码数组的串数组 char(ans)
尽可能多采用向量化编程, 即使用矩阵运算替代标量 的循环运算
例3.2-3:欧姆定律求解电阻平均值:
clear V=[0.89,1.2,3.09,4.27,3.62,7.71,8.99,7.92,9.7,10.41]; I=[0.02,0.04,0.1,0.145,0.11,0.258,0.299,0.257,0.308,0.345] (1)非向量化编程 (2)向量化编程 L=length(V); rL=V./I sr=0; r2=mean(rL) for k=1:L %r2 = r1(k)=V(k)/I(k); % 32.0193 sr=sr+r1(k); end r1=sr/L %r1 = % 32.0193
§4 构架数组(附录A.3) 1. 定义 * 构架数组的基本组分是构架,构架在数组中以下标 区分。 * 构架在划分“域”后才能使用,数据只能存放于域 中,域可以存放任何类型、大小的数组。 * 域的操作: 构架名.域名
* 构架的访问: 构架名 * 不同构架的同名域可以存放不同内容。
2. 构架数组创建和显示 (1)直接对域赋值产生单构架 G.name=‘一号房’; G.volume=2000; G.temperature={31.2 30.4 31.6 29.8} %此域为胞元类型 G.humidity=[62.4 60.2 61.3 ;59.7 60.3 62.5] 1个构架,4个域 G %访问单构架结构 G.name %访问name域中内容
A’ A+B,A-B A+s,A-s s*A s/A, A\s A*B
共轭转置
aij±bij aij±s s*aij s/aij, aij\s [aij]m*l *[bij]l*n
aij/bij, bij\aij A/B, B\A aijn saij, 得A大小阵 aij^bij
#为关系运算符
B右/左除A,结果不同 A为方阵,自乘n次
第三章 数组阵列及向量化运算
§1 数值数组 §2 字符串数组 §3 胞元数组 §4 构架数组
本章介绍内容: 教材第3章和附录A

数组定义:
按行(row)和列(column)顺序排列的实数或复数的有序集,被称为数组。 数组中的任何一个数都被称为这个数组的元素,由其所在的行和列标识,这个标识也称为数组元 素的下标或索引。
A^n s^A
A为方阵,sA
例:数组与矩阵乘法
ab —— a,b两数组必须有相同的行和列,相应元
素相乘。
a*b —— 满足a矩阵的列数与b矩阵行数相等,矩阵 乘法 a=[1 2 3;4 5 6;7 8 9]; b=[2 4 6;1 3 5;7 9 10]; a.*b a*b ans = ans = 2 8 18 25 37 46 4 15 30 55 85 109 49 72 90 85 133 172
例A.1-2:串的基本属性,标识和简单操作 (1)创建串数组,并将其中小写字母转为大写
a='This is an example.' ascii_a=double(a) w=find(a>='a'&a<='z') ascii_a(w)=ascii_a(w)-32 char(ascii_a), size(ans)
2.二维数组(矩阵)的创建和寻访
(1)小规模数组直接创建: A=[2 3;5,9]; (2)中规模数组用数组编辑器或M文件创建
(3)用matlab函数创建数组 rand /randn—— 均匀/正态分布随机数组 eye —— 单位数组 zeros ——全部元素都为0的数组 ones ——全部元素都为1的数组 diag ——对角数组 magic——魔方阵(矩阵各行,列,对角线元素和相等) gallery —— 产生各种用途的测试数组 空数组 [ ] — matlab允许输入数组,当一项操 作无结果时,返回空数组。
u r i
4. 关系和逻辑操作
约定: 关系和逻辑操作中非0为真(1),0为假(0) ;
关系和逻辑运算输出由0和1组成的逻辑数组; 逻辑数组是一种特殊的数值数组,可用于数组 寻访。 关系操作 符 < <= > >= == ~= 表3.5-1 关系操作符 意义 逻辑操作符 小于 小于或等于 大于 大于或等于 等于 不等于 & | ~ xor 意义 与、和 或 非 与非
胞元 cell
构架 structure
双精度 double
单精度 single
整数类 int * uint *
相关文档
最新文档