一.①问题:使用while循环计算1+2+3+…+999的和? ②.解答
i = 0; sum1 = 0; while i < 999 i = i + 1; sum1 = sum1 + i; end;结果:
>> test1 i = 999 sum1 = 499500怎么用for实现呢?
sum2 = 0;%一定要先声明 for i = 1 :999 sum2 = sum2 + i; end小技巧:1.在程序的开头和结尾分别添加tic、toc指令,可以输出程序运行时间; 2.按Ctrl + C可以强制终止脚本运行 ③问题:MATLAB中怎么屏蔽整段语句呢? 方法1.选中全段,然后ctrl + R,整段的前面就都被加上了注释符"%";ctrl+T可以取消注释符"%" 2.在需要注释段落的前后分别加上 if 0和end,也可以起到跳过这段的作用 二.常用函数使用 1.自定义函数时,函数文件名需与定义的函数名一致;如function x = freebody(x0,v0,t),那么文件名应为:freebody.m。 2.字符串的串接
>> s1 = 'Example'; s2 = 'String'; >> s3 = [s1 s2] s3 = ExampleString %注意当中没有空格符号 >> s4 = [s1;s2] %这是错误的运算,因为s1,s2的长度不一致,不能合成一个矩阵 Error using vertcat Dimensions of matrices being concatenated are not consistent. >> s4 = [s1; s1] %字符串长度一直才能运算 s4 = Example Example3.逻辑操作
>> str = 'aardvark'; 'a' == str ans = 1 1 0 0 0 1 0 0字符串str中的每一个字符与字符比较,如果相同输出真值1;否则输出0
>>str(str == 'a') = 'Z' str = ZZrdvZrk将字符串中为‘a’的字符全部替换成字符‘Z’
4. strcmp() 函数(help文档很强大,里面有详细介绍) ①.比较两个字符串是否相等,返回真值1或0;
>>s1 = 'Yes'; >>s2 = 'No'; >>tf = strcmp(s1,s2) tf = 0 >>s1 = 'Yes'; >>s2 = 'Yes'; >>tf = strcmp(s1,s2) tf = 1②.字符串数组与字符串的比较,用于查找字符串数组中等于某字符串的索引
>> s1 = 'upon'; >> s2 = {'Once','upon'; 'a','time'}; >> tf = strcmp(s1,s2) tf = 0 1 0 0strfind() 函数 用于查找字符串数组中包含某字符串所在的位置
>> str = 'Find the starting indices of a pattern in a character vector'; >> tf = strfind(str,'in') tf = 2 15 19 40 >> str1 = {'Once','upon'; 'o','time'}; %区分大小写 >> tf = strfind(str1,'o') tf = [] [3] [1] []5.元胞数组数组,其基本元素是元胞,元胞可以存放任意类型、任意大小的数组
>> A(1,1)={[1 4 3; 0 5 8; 7 2 9]}; >> A(1,2)={'Anne Smith'}; >> A(2,1)={3+7i}; >>A(2,2)={-pi:pi:pi}; >>A A = [3x3 double] 'Anne Smith' [3.0000 + 7.0000i] [1x3 double] >> C = A{1,1} %内容索引法 C = 1 4 3 0 5 8 7 2 9 >> D = A(1,1) %元胞索引法 D = [3x3 double]解读:①.元胞外标识,用圆括号(),表示元胞数组中某个元胞的位置;如A(1,1)目标是A元胞数组中第一行第一列元胞元素。 ②.元胞内寻访,用花括号{},表示元胞数组中某个元胞的内容;如A{1,1},表示元胞数组中第一行第一列元胞的内容。
如果要输出元胞数组的第一个元胞中的第3行第2列的元素“2”该怎么办?
>> C = A{1,1}(6) C = 2或者
>> C = A{1,1}(3,2) C = 26.num2cell()函数 将矩阵转换成元胞数组 mat2cell() 将元胞数组转换为不同大小的细胞单元阵列
>> a = magic(3) %产生一个3*3的魔方矩阵,随机矩阵用染得(3) a = 8 1 6 3 5 7 4 9 2 >> b = num2cell(a) %将3*3的矩阵转换成3*3的魔方矩阵 b = [8] [1] [6] [3] [5] [7] [4] [9] [2] >> c = mat2cell(a, [1 1 1], 3) %将元胞数组a分割成1*3的3个元胞;[1 1 1]确定行,3表示一行中有三列 c = [1x3 double] [1x3 double] [1x3 double]推广到多行多列:
>>X = reshape(1:20,5,4)' %reshape(A,m,n) 将矩阵A的元素返回到一个m×n的矩阵 >>C = mat2cell(X, [2 2], [3 2]) >>celldisp(C) %显示元胞数组中的详细内容 C = [2x3 double] [2x2 double] [2x3 double] [2x2 double] C{1,1} = 1 2 3 6 7 8 C{2,1} = 11 12 13 16 17 18 C{1,2} = 4 5 9 10 C{2,2} = 14 15 19 20相反cell2mat()函数是将元胞数组整合成一个矩阵
7.多维数组
例如:生成一个(3行,3列,2维)的数组
>> A{1,1,1} = [1 2;4 5]; >> A{1,2,1} = 'Name'; >> A{2,1,1} = 2-4i; >> A{2,1,1} = 7; >> A{1,1,2} = 'Name2'; >> A{1,2,2} = 3; >> A{2,1,2} = 0:1:3; >> A{2,2,2} = [4 5]'; >> A; >>celldisp(A) 显示元胞数组A中的所有元素 A(:,:,1) = [2x2 double] 'Name' [ 7] [1x3 double] A(:,:,2) = 'Name2' [ 3] [1x4 double] [2x1 double] A{1,1,1} = 1 2 4 5 A{2,1,1} = 7 A{1,2,1} = Name A{2,2,1} = -3.1416 0 3.1416 A{1,1,2} = Name2 A{2,1,2} = 0 1 2 3 A{1,2,2} = 3 A{2,2,2} = 4 58.**cat(n,A,B)**串接函数,n确定A、B矩阵串接形式
>> A=[1 2;3 4]; >>B=[5 6;7 8]; >>C=cat(1,A,B) %表示矩阵A、B按行串接 >>D=cat(2,A,B) %表示矩阵A、B按列串接 >>E=cat(3,A,B) %表示矩阵A、B按维度串接 C = 1 2 3 4 5 6 7 8 D = 1 2 5 6 3 4 7 8 E(:,:,1) = 1 2 3 4 E(:,:,2) = 5 6 7 8