直接看大佬的整理吧

7b48e42a973bf7eb02c155475962edbf.png

Matlab的主要工作界面如上。

通常使用Matlab进行工作的时候是创建一个文件夹,里面存放着Matlab脚本、数据等。在这里,我创建了一个Matlab learning 文件夹。然后在里面创建了一个脚本,叫main。这个就相当于是我程序的入口。C#中的Main函数。

命令行窗口

命令行窗口输入的代码会立即执行。比如我输入doc ones会立即出现ones函数的帮助页面。

右边有工作区,存储着matlab运行时变量的值。

a785a28b08e38e24657e53b9e4368115.png

a是一个2行4列的矩阵。矩阵的每个元素可以通过()来获取。获取规则是从上到下,从左到右开始。

索引1-8 分别是 1  12  2  34  3  56  4  78。

在写函数之前,先介绍函数的提示。比如

9399ce97b7d741b191f741d905ef7328.png

函数zeros( ,我只打了一个括号时,按ctrl+f1就会显示出函数提示。

23d1980acf0c760caf43bab5e3e4ec56.png

ones和zeros是最容易创建矩阵的函数了。分别是元素为1的矩阵和元素为0的矩阵。

其中很重要的是

角度一:A(row, col)

提取单个元素

A(3,2) : 访问第三行第二列的数字 2

一次提取多个元素(利用复合形式的row和col)

A([1 3], [1 3]):逗号之前的[1 3]为行,逗号之后的[1 3]为列

89c79624d1e68244ebba300b3c6c6c5e.png

则结果为:[1 6;31 7]

角度二:A(index)

依旧以一个示例进行解释:

544f11d9d60afd987a1fe31ecf2566e6.png

提取单个元素

A(8):纵向开始数,从左往右依次纵向数,第8个即为所求的A(8): 9

一次提取多个元素(复合形式的index)

A([1 3 5]):表示将A(1),A(3),A(5)整合为一个行向量,结果为[1 31 17],即:[A(1) A(3) A(5)]

A([1 3; 1 3]):同上,即表示:[A(1) A(3);A(1) A(3)]

关于冒号的使用

如果是b=1:5 就是b为从1-5,步长为1的数组。

70e2375dc7b1260d1dcd773641d2c1c4.png

如果是b=1:0.5:5,就是b为从1-5,步长为0.5的数组

05a9f39c1c9de2c6da11a06daf895476.png

如果b=5:-0.5:1,就是b为从5-1,步长为-0.5的数组

e3f57ccb17d412e9324970505f3e8a49.png

下面可以试着加入;来表示成矩阵的形式。输入的是 b=[1:3;3:3:9]

b0d25a653770dc17cc9e356d88f1141b.png

如果输入>> b=[1:3;3:3:15]

eb7a4336dfec75ace5000137d14541d7.png

因为第一行有3列,第二行有5列。

冒号的另一个用法

新矩阵

8a03d8b268034c46cbd2c52dd8e616f4.png

0a2f956658777c0f215125e79457f3ef.png

9faefc069c29df8eb26250f9c0a6bafd.png

5fb95a2b829c1a29f1583ac24e299a04.png

删除整行整列

删除一整行或一整列:赋值[]即可;如A(3, : ) = []使得A的第三行被删除

30cea6d81fd9957c21739467d2d6ec1b.png

bab4feaee84e78426f1a2f6d113bd6fd.png

矩阵运算

10a7955dd18c74465bc52e723b9249c9.png

ce1a329b94fe27902398fd1c64aee805.png

606f75f2cfdf1fc6b5f4f70335b32ce0.png

1ca4d34108f38ab26c5a6031c52b6ce8.png

相当于[5 6;7 8] * [1 3 ; 2 4] 。然后应用矩阵乘法,算出来的就是上面的矩阵。

注意:两个1维行矩阵必须有一个变成转置矩阵b',这两一个行矩阵一个列矩阵才能相乘

5a982a7be0d834e0e920c47fc8ec6e60.png

85bb9443c9fd485ee1cd950af246bce5.png

max(A) :表示A中每一列的最大值提取出来后形成的行向量

bf683b30756c41ab52307ad3c8c809ef.png

max(max(A)) : 表示矩阵中最大的entry,即112

min同理

sum(A) :表示A中每一列之和所组成的行向量

f4a34e8ced3a2b79185be7429edef8f8.png

mean(A) : 表示A中每一列的平均数所组成的行向量

sort(A):表示A中的每一列进行从小到大的排序(每一个row的数据没有绑定在一起)

8cfe66556b7229fa4faf2a6f77f175fb.png

sortrows(A):表示A中的所有row按第一列进行排序,每一行row的数据是绑定的。就是说将矩阵A中的数据分成3行,每行根据最前面的元素的大小进行排列。

5080c90c2a37ae41e23c60e340a75d08.png

注:由于矩阵本身第一列已经有序,则矩阵没有变动;而sort(A)则对第二列第三列都做了处理

以下是一个第一列无序的示例:

8df13e974d3ee9fad27f7349803fcc0b.png

size(A):求出A的m x n

length(A):求出A的长,也即为:max(m,n)(将A看成矩形,矩形的长即为length(A)的值)

find(A==n):求出A中n的位置是多少(index按前面提到的角度二计算);若不存在则返回:空矩阵: 0×1

循环和条件结构

05d6eac22cb76f1509ab887219585334.png

a=2

55c6e8f9c0fa5cd3034d57e9db17a069.png

0cb41099835c3033ccbd09f5fd09c80a.png

n=101

2a7d53b0943bd98693a1e556150c9e63.png

break就是打断当前所在的循环,比如while和for

关于预分配内存,可以用tic  toc 函数来计时比较。  预分配内存还是快的

6eaca25d54353afe7229fa5200a47271.png

写函数的一些关键函数

判断函数参数大小

23c942781476fcf31447dca0647e18fe.png

nargin表示的是函数输入参数的数量;上面的程序段的意思是:若输入的参数数目只有2个,则将height默认设置为1;相当于python中:def pillar(Do,Di,height=1)

nargout:函数输出的参数个数

varargin:输入参数为列表时的长度

好骚的操作,匿名函数(C#中的委托或者lambda表达式)

语法:

f = @(x) experssion(x)

define x

前一个x是返回值,后一个x是参数。 定义了f后,以后要使用函数,只需f(x)这样调用。

设计匿名函数的原因是,只有一行函数体的函数,不需要额外创建一个m文件,直接写个匿名函数就ok。

67b470ec7aa0d17d0e894fedbcbb0e44.png

更多推荐