一.①问题:使用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
Example
3.逻辑操作
>> 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 0
strfind() 函数 用于查找字符串数组中包含某字符串所在的位置
>> 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 =
2
6.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
5
8.**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