[2019/5/22]学习MATLAB第二节,程序控制和常规函数的使用

一.①问题:使用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 0end,也可以起到跳过这段的作用
二.常用函数使用
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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值