一、变量
1. char和string
MATLAB里面的字符和字符串都是用单引号括起来的。
% 示例:
a='I like China';
n=0;
for n=1:1:size(a,2)
b(size(a,2)-n+1)=a(n);
end
disp(a);
disp(b);
% 输出:
>> work
I like China
anihC ekil I
>>
% 示例:
str='zhangpeng';
str(str=='z')='Z';
disp(str);
% 结果:
>> work
Zhangpeng
>>
2. structure
% 示例:
student(1).name='zhangpeng';
student(1).age=20;
student(1).birthday.year=2002;
student(1).birthday.month=1;
student(1).birthday.day=5;
student(2).name='zhangwei';
student(2).age=18;
student(2).birthday.year=2003;
student(2).birthday.month=10;
student(2).birthday.day=10;
% 结构体中套用结构体
student(3)=struct('name','Zhou Ziyu','age',23,'birthday',struct('year',1999,'month',6,'day',14));
A(1)=struct('data',[3 4 7;8 0 1],'nest',struct('testnum','Test 1','xdata',[4 2 8],'ydata',[7 1 6]));
A(2).data=[9 3 2;7 6 5];
A(2).nest.testnum='Test 2';
A(2).nest.xdata=[3 4 2];
A(2).nest.ydata=[5 0 9];
A.nest
3. cell
% 示例:
%第一种声明cell的方法
a(1,1)={'zhangpeng'};
a(1,2)={20};
a(2,1)={[1 2 3;4 5 6;7 8 9]};
a(2,2)={1+2i};
disp(a);
%第二种声明cell的方法
a={'zhangpeng',20,[1 2 3;4 5 6;7 8 9],1+2i};
% 输出:
ans =
1 2 3
4 5 6
7 8 9
在cell中 {} 和 () 的区别:
%定义一个cell
a(1,1)={'zhangpeng'};
a(1,2)={20};
a(2,1)={[1 2 3;4 5 6;7 8 9]};
a(2,2)={1+2i};
% 如果输入a(2,1)回车则只会显示3x3数组;如果输入a{2,1}则会显示数组的详细信息。
>> a(2,1)
ans =
1×1 cell 数组
{3×3 double}
>> a{2,1}
ans =
1 2 3
4 5 6
7 8 9
4. reshape函数用法
b=reshape(a,3,2)表示将a矩阵变为3x2的矩阵
%示例:
a=[1 2 3;4 5 6];
b=reshape(a,3,2);
disp(b);
disp(a);
% 输出:
>> Matlab01
1 5
4 3
2 6
1 2 3
4 5 6
5. cat函数的用法
cat(1,a,b)是将a、b两个矩阵竖向合并;cat(2,a,b)是将a、b两个矩阵横向合并;cat(3,a,b)是将a、b两个矩阵三维合并。
%示例:
a=[1 2 3 4];
b=[5 6 7 8];
c1=cat(1,a,b);
c2=cat(2,a,b);
c3=cat(3,a,b);
%输出:
>> c1
c1 =
1 2 3 4
5 6 7 8
>> c2
c2 =
1 2 3 4 5 6 7 8
>> c3
c3(:,:,1) =
1 2 3 4
c3(:,:,2) =
5 6 7 8
二、档案高阶存取
1. 文档的存——save函数
a=magic(5);
%如果不在后面加上-ascii则打开文档后是乱码,看不见数据
save mydata1.mat;
%如果想要打开文档后可以直接看见内容则在后面加上-ascii
save mydata2.mat -ascii;
2. 文档的取——load函数
注意:如果存的时候是用-ascii存储的,那么取出的时候也必须使用-ascii来去除。
load('mydata1.mat');
load('mydata2.mat','-ascii');
3. 文档的Excel读
xlsread('matlab.xlsx')或者xlsread('matlab.xlsx','B2:D4')效果一样,因为默认情况下就是读取数据。
>> score1=xlsread('matlab.xlsx','B2:D4');
>> score2=xlsread('matlab.xlsx');
>> score1
score1 =
90 100 100
88 78 96
100 89 78
>> score2
score2 =
90 100 100
88 78 96
100 89 78
4. 文档的Excel写
xlswrite('matlab.xlsx',mymean,1,'E2:E4');
第一个参数是文件名 第二个参数是要写入的内容 第三个参数是文件页数 第四个参数是写入的位置。
% 计算出平均值放入E2到E4这一列
>> score=xlsread('matlab.xlsx');
>> mymean=mean(score')';
>> xlswrite('matlab.xlsx',mymean,1,'E2:E4');
score =
90.0000 100.0000 100.0000 96.6667
88.0000 78.0000 96.0000 87.3333
100.0000 89.0000 78.0000 89.0000
5. 同时提取文档中的数据和标题
% 用score提取数据,用name提取标题
>> [score name]=xlsread('matlab.xlsx');
>> score
score =
90.0000 100.0000 100.0000 96.6667
88.0000 78.0000 96.0000 87.3333
100.0000 89.0000 78.0000 89.0000
>> name
name =
4×5 cell 数组
{'name' } {'Chinese'} {'Math' } {'English'} {'mean' }
{'Zhang Peng'} {0×0 char } {0×0 char} {0×0 char } {0×0 char}
{'Zhang Wei' } {0×0 char } {0×0 char} {0×0 char } {0×0 char}
{'Zhou Ziyu' } {0×0 char } {0×0 char} {0×0 char } {0×0 char}
三、文档的低阶存取
1.文档的写入
% 示例:
x=0:pi/10:pi;
y=sin(x);
fid=fopen('sinx.txt','w'); %fopen会返回文件的地址;‘w’的意思是可以对文件进行写
for i=1:11
fprintf(fid,'%5.3f %8.4f\n',x(i),y(i)); %'%5.3f %8.4f\n'表示对输入的x,y的写入格式,"%5.3f"是指输出总共5个数字,小数点后面三个数字。
end
fclose(fid);
type sinx.txt;
输出:
2.文档的读出
% 示例:
fid=fopen('data.txt','r');
i=1;
while ~feof(fid) % feof(fid)表示如果没有读到文件的末尾则返回0,如果读到文件末尾则返回1.
name(i,:) =fscanf(fid,'%10c',1);
year(i) =fscanf(fid,'%d',1);
month(i) =fscanf(fid,'%d',1);
day(i) =fscanf(fid,'%d',1);
i=i+1;
end
fclose(fid);