Structure
Structure即结构。举个例子,有一个学生的结构,包含姓名、邮箱、学号、成绩
student.name = 'John Doe';
student.id = 'jd2@sfu.ca';
student.number = 301073268;
student.grade = [100,75,73;95,91,85.5;100,90,72];
structure的作用可不止这么点,假如学生不止一个人,有多了个学生
student(2).name = 'Ann Lane';
student(2).id = 'aln4@sfu.ca';
student(2).number = 301078853;
student(2).grade = [95 100 90;95 82 97;100 85 100]
其实就是在student后面用括号括起来加个数字
其实structure还有很多用法,比方说我要显示名为"Ann Lane"的学生的第三个成绩,也就是90,可以使用student(2).grade(7)
或student(2).grade(1,3)
cell array
cell有点类似矩阵,但是矩阵的每个位置存储的都是数值,而cell的每个位置可以用来存储不同类型的值,比方说,A(1,1)
的位置存储一个3*3的矩阵,A(1,2)
的位置存储一个string类型的字符串,A(1,3)
的位置存储一个复数3+7i
,A(1,4)
的位置存储一个1*3的矩阵
cell的定义代码有点类似于structure,有两种定义方式
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{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(1,1)
里面的内容
在这里我把花括号和圆括号展示cell内容的代码都写出来,好让读者区分,圆括号只会告诉你cell这个位置存储的是个什么类型的值,而花括号会给你展示这里面值得内容
num2cell()函数
num2cell()
函数的作用是将一个矩阵转换为相同行列数的cell类型,下面我们首先用magic(n)
函数创建一个魔方矩阵(每行、列、对角线上数的和相等,并且该和的值为$\frac{1+2+...n^2}{n}$,n必须党羽等于3)
a = magic(3)
b = num2cell(a)
$$ A = \left[ \begin{matrix} 8 & 1 & 6 \\ 3 & 5 & 7 \\ 4 & 9 & 2 \end{matrix} \right] $$
$$ A = \left[ \begin{matrix} [8] & [1] & [6] \\ [3] & [5] & [7] \\ [4] & [9] & [2] \end{matrix} \right] $$
mat2cell()函数
假如不想一个一个将矩阵内的值转换成cell,而是想一块一块的转换,比方说以行为单位,一行一行的转换成cell,转换成3行一列的cell
c = mat2cell(a,[1 1 1],3)
cat()函数
之前讲的都只涉及到一维或二维,创建三维矩阵或者cell,就用cat()
函数
A = [1 2;3 4];
B = [5 6;7 8];
C = cat(3,A,B);
reshape()函数
reshape()
函数的作用是将一个$i*j$的矩阵转换为$i_{new}*j_{new}$的矩阵,前提条件是$i*j = i_{new}*j_{new}$
A = {'James Bond',[1 2;3 4;5 6]; pi,magic(5)};
C = reshape(A,1,4);
reshape()
函数里的三个参数,第一个是需要转换的矩阵的名字,第二个是需要转换的行数,第三个数需要转换的列数
File Access
们有时候需要把计算完的 workspace 里的 data 存储为档案,或者是将存储的档案读取到 workspace 里,所以我们这里涉及到两个操作,load和save
save
save的含义是:Save (all) workspace data to a file
首先创建一个4*4的矩阵,然后通过save函数将其保存
当我们输入代码之后,workspace 里的所有数据都被保存了指定的文件夹下,现在看看能不能通过记事本打开 data1
通过记事本打开,里面的内容并不是矩阵的数值,而是一些相关信息,如果想保存为记事本也能打开的格式需要用这段代码save data2.mat -ascii
,在代码后买你加上-ascii
即可
如果不是想保存workspace里的所有变量,只是想保存某一个或者某一些,只要鼠标右键这个变量,另存为即可
load
xlsread
xlsread()
函数主要是用于读取excel文件的内容。我现在有这样一个excel文件
通过代码score = xlsread('04Score.xlsx')
,那么matlab就会把整个excel内的数据全部读进来?不对,其实matlab在读excel 内的数据时会将数值和 string 类型的字符串分开来,只会读数值
因为excel里有坐标,每个单元格都有其位置,比方说94,他的位置就是B2,因此可以选定一个区域进行读取score = xlsread('04Score','C3:D4')
因为matlab矩阵里面只能有数值类型的变量,所以不会读入string类型,但是可以分开读
xlswrite
xlswrite()
函数的作用是写入 excel。我们把刚才从 excel 中读入进来的数据,算他们每个人的平均数,然后再写入他们每个人的成绩的后一列。
首先是计算平均数,算平均数的函数是mean()
,mean()
计算平均数时是一列一列算的,但是这里我们应该一行一行算,所以代码应该是:mean(score')
创建一个矩阵,默认是一行多列,但是我们现在需要的是多行一列,所以还需要在mean()
函数的后买你再次转置,然后再写入excel
M = mean(score')';
xlswrite('04Score.xlsx',M,1,'E2:E4');
在写入的时候,excel是不能开着的
最后总结一下xlswrite()
函数的格式:xlswrite('filename',variable,sheet,'location')
,"sheet"的含义是excel的第几页