数学建模社区-数学中国

标题: 数学建模十类经典算法(10) [打印本页]

作者: 百年孤独    时间: 2016-3-30 15:59
标题: 数学建模十类经典算法(10)
21、ndi***ength在多维数组中的注意事项 " i2 t9 R  ]2 ~6 J# W6 H
numel是用来查询矩阵所含元素总数的函数,例numel(A)
+ A" s  H, J0 E! i9 H3 h' kndims是用来查询矩阵所含维数的函数,例ndims(A) 6 ^% i. M' {: {  i0 R# t  g5 d3 T
ndims(A(:,:,1))返回结果是2,因为A的第三维只有1维,那么实际上A只是一个二维矩阵;
9 ~+ T, X$ e- e4 x' olength只能返回一维数组的长度,对于矩阵就必须用size将其化为一维数组之后再用length函数 2 W' O' `( ^% ~* O( A" H* V
length(A)将得到size(A)的结果中较大的那一个元素; & j+ F4 l* E2 w% A
length(size(A))才能得到A的维数;( }7 E8 w' k) L' U

8 J% i* T2 m. }: C8 F) k; S# A4 E- f22、创建单元数组(记得留意大括号{},等号两边至少要有一个大括号,否则会报错,因为单元数组能够容纳的内容要多,而数组中的元素只能容纳一个字符或数字,另外,单元中可以包含另一个单元) & U& r% ^7 B& J
1、 单元索引法:
8 y2 H7 s0 R; H& |# I, @A(1,1)={[1 2 3 ;4 5 6;7 8 9]};
- B5 n) X/ i- l& }- m4 f  m' \A(1,2)={'example'};
6 Y9 @8 C6 u* F5 dA(2,1)={1+2i}; ) k9 Z2 _& _/ u. }1 N4 F  E# k' D
A(2,2)={6:-1:1}; + l% s" d$ b& o5 A4 A
输出结果: $ @, O% _$ l" s8 \5 o* v9 g  P/ w

. k- q9 R) O; i$ s# y# EA = * ]5 U" p  ^. C0 Q) J5 V. W

1 |( G- I6 M3 l6 s; y6 Z% q[3x3 double] 'example'
8 U+ X  n! b8 J, ^  y[1.0000 + 2.0000i] [1x6 double] / k4 w; q2 Q* C8 f

" @; D7 L" P& t1 A$ D2、 内容索引法: - r" E: }, X% z4 c1 d. S+ }; ^
A{1,1}=[1 2 3 ;4 5 6;7 8 9]; 8 j0 i6 f6 }5 D- n1 z
A{1,2}='example'; ( o) P" r( `# t9 V& J" Y; `  h* S; K
A{2,1}=1+2i;
" g) ?& E" \0 j$ ^* O/ I0 pA{2,2}=6:-1:1;
" Z9 Q2 P8 R5 f9 C" k8 y/ t; y8 N& V' t& o# {# g6 Y
A(I,j)={x}和A{I,J}=x都表明将x的值保存于单元数组A的第(I,j)个元素中。其中,前者A(I,j)={x}被称为“按单元索引”,后者A{I,J}=x被称为“按内容索引”。换句话说,花括号{}用于访问单元的值,而圆括号()用于标识单元的位置而不访问它们的值。
$ Z8 j/ U- w0 y" |例:
, K4 s$ O3 k3 }+ i' bA{1,1}=[1 2 3 ;4 5 6;7 8 9] ) e9 f) U! Q* k% ]1 ], f7 a* c! F4 m
A(1,1)=[ 3x3 double]
( u0 Z* f8 q+ V& ~# ~( d花括号在等号左边时:可以对多个单元数组的数据进行输出; 4 |( K1 S6 Z  R9 O4 g0 t+ e
例:A{1,:}=1:5,将会报错;错误原因是A{1,:}没有指定多少个单元数组将要被赋值
4 `# K/ `2 J4 M花括号在等号右边时:可以对多个单元数组的数据进行输入;
! p7 _4 n7 x/ x) m. t) D例:A(1,={1:5},将会将A的第一行单元数组从左至右依次赋值为1、2、3、4、5;
6 ]" k7 L4 J5 ]0 g( c4 V! j2 q8 _$ k' u) b/ Z% P( R5 U
celldisp(A)用于强制输出单元数组A中的内容,联想记忆:cell+disp--------display展示
+ G) S7 \: r0 g/ w1 c7 n- mcell(I,j)用于生成指定大小的空单元数组 ) ]# U/ `6 h7 Y* t% \
5 M* \- t5 W6 o4 l# y
2 ?1 k6 _: y2 D6 x9 K
>> class(B{1,1})%按内容索引
: d8 S5 \0 x4 S$ X9 Z' y' R. u" R) D8 \7 Q, O
ans = 2 ^& O& L% k, }
2 g0 s/ P: }' v
double 2 k. I' ?+ u$ ?1 {1 h' R" A- y0 `- [
5 R$ B+ `& _4 n2 E1 |
>> class(B(1,1))%按单元索引   t  p+ C* l' i" k5 M

% v. v* {3 j& j. g$ z7 A: x' Xans = - B4 z7 L% _/ g6 O4 Q6 R4 k
/ S: ?$ \4 b* {$ o4 }
cell 7 a/ \. v8 f0 t
由上面的例子可以看出“由单元索引”和“由内容索引”的结果是完全不同的,“按单元索引”得到的是单元的标识(即单元里是什么类型的值),“按内容索引”得到的是单元的内容(即单元里是什么值)
+ H& X+ {& _2 E" M
9 i: v3 U) T/ G

) j( Q7 I0 Z, v( x* ?) Q$ [1 c6 ]2 {
/ ?$ O6 ?- [) U3 d0 ^$ s3 D6 c
) Z$ \/ r$ B# R4 O* A8 n% h8 P8 m4 [1 V" @, A2 K

) X0 ~0 @6 v  H




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5