目录
前言
为在B站跟随台湾大学郭彦甫老师学习matlab的笔记,截图来自郭老师PPT,部分内容参考B站弹幕和评论,仅供学习参考。
一、变量
1.变量(数据)类型转换
double() | 转换为双精度 |
single() | 转换为单精度 |
int8() | 转换为 8 位有符号整数 |
int16() | 转换为 16 位有符号整数 |
int32() | 转换为 32 位有符号整数 |
int64() | 转换为 64 位有符号整数 |
uint8() | 转换为 8 位无符号整数 |
uint16() | 转换为 16 位无符号整数 |
uint32() | 转换为 32 位无符号整数 |
uint64() | 转换为 64 位无符号整数 |
2.char
字符使用 0 到 255 之间的数字代码以 ASCII 表示
通过将字符或字符串放入一对撇号中创建字符或字符串
>> s1='h'
s1 =
h
>> whos
Name Size Bytes Class Attributes
s1 1x1 2 char
>> s1='hex'
s1 =
hex
>> whos
Name Size Bytes Class Attributes
s1 1x3 6 char
字符以ASCII码储存
>> s1 = 'h'
whos
uint16(s1)
s1 =
h
Name Size Bytes Class Attributes
s1 1x1 2 char
ans =
uint16
104
>> s2 = 'H'
whos
uint16(s2)
s2 =
H
Name Size Bytes Class Attributes
ans 1x1 2 uint16
s1 1x1 2 char
s2 1x1 2 char
ans =
uint16
72
3.String
包含字符的数组
字符串连接
>> s1 = 'Example';
s2 = 'String';
>> s3 = [s1 s2]
s3 =
ExampleString
>> s4 = [s1;s2]
错误使用 vertcat
串联的矩阵的维度不一致。
报错原因:s1 与 s2 长度不一致
逻辑运算和分配
字符串可以索引(indexing)
>> str = 'aardvark';
>> str(3)
ans =
r
许多数字和逻辑运算符可以应用于字符串
>> str = 'aardvark';
>> 'a' == str
ans =
1×8 logical 数组
1 1 0 0 0 1 0 0
分别比较每个字符,返回数组的对应位置为逻辑变量1或0
>> str(str == 'a') = 'Z'
str =
ZZrdvZrk
使用 strcmp() 比较两字符串是否相同
>> s1='matlab';
>> s2='Matlab';
>> strcmp(s1,s2)
ans =
logical
0
>> s2='matlab';
>> strcmp(s1,s2)
ans =
logical
1
Exercise
编写反转任何给定字符串的脚本
>> s1='I like the letter E';
>> s2=s1(length(s1):-1:1)
s2 =
E rettel eht ekil I
>> s3=reverse(s1) %%reverse()逆序字符串中的字符
s3 =
E rettel eht ekil I
4.stucture
创建结构体
一种存储异构数据的方法
结构包含称为字段的数组
>> student.name = 'John Doe';
student.id = 'jdo2@sfu.ca';
student.number = 301073268;
student.grade = [100, 75, 73; ...
95, 91, 85.5; ...
100, 98, 72];
student
student =
包含以下字段的 struct:
name: 'John Doe'
id: 'jdo2@sfu.ca'
number: *
grade: [3×3 double]
>> student.grade
ans =
100.0000 75.0000 73.0000
95.0000 91.0000 85.5000
100.0000 98.0000 72.0000
向结构体中添加信息
>> 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
student =
包含以下字段的 1×2 struct 数组:
name
id
number
grade
显示第二个学生的第三个成绩
>> student(2).grade(7)
ans =
90
结构体函数
嵌套结构
使用 struct(a,b,c,d) 声明一个结构体,包含两个 field (暂时不知道中文民)a 和 c ,a 的值是 b ,c 的值是 d。
>> A = 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
ans =
包含以下字段的 struct:
testnum: 'Test 1'
xdata: [4 2 8]
ydata: [7 1 6]
ans =
包含以下字段的 struct:
testnum: 'Test 2'
xdata: [3 4 2]
ydata: [5 0 9]
>> A(1).data
ans =
3 4 7
8 0 1
5.Cell
存储异构数据的另一种方法
与矩阵类似,但每个条目都包含不同类型的数据
使用大括号声明一个 cell
创建 Cell
两种方式创建cell
>> 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 =
2×2 cell 数组
[3×3 double] 'Anne Smith'
[3.0000 + 7.0000i] [1×3 double]
>> 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 =
2×2 cell 数组
[3×3 double] 'Anne Smith'
[3.0000 + 7.0000i] [1×3 double]
Matlab如何做到
Exercise
创建如下cell
>> A{1,1}='This is the firse cell.';
>> A{1,2}=[5+6*j 4+5*j];
>> A{2,1}=[1 2 3;4 5 6; 7 8 9];
>> A{2,2}={'Tim','Chris'};
>> A
A =
2×2 cell 数组
'This is the firse cell.' [1×2 double]
[3×3 double] {1×2 cell }
读取 Cell 内容
使用小括号读取内容类型
使用大括号读取具体内容
>> A(1,2)
ans =
cell
[1×2 double]
>> A{1,2}
ans =
5.0000 + 6.0000i 4.0000 + 5.0000i
Cell 函数
>> a = magic(3)
b = num2cell(a)
c = mat2cell(a, [1 1 1], 3)
a =
8 1 6
3 5 7
4 9 2
b =
3×3 cell 数组
[8] [1] [6]
[3] [5] [7]
[4] [9] [2]
c =
3×1 cell 数组
[1×3 double]
[1×3 double]
[1×3 double]
6.多维数组
cat()指令
>> A{1,1} = [1 2;4 5];
A{1,2} = 'Name';
A{2,1} = 2-4i;
A{2,2} = 7;
B{1,1} = 'Name2';
B{1,2} = 3;
B{2,1} = 0:1:3;
B{2,2} = [4 5]';
C = cat(3, A, B)
2×2×2 cell 数组
C(:,:,1) =
[2×2 double] 'Name'
[2.0000 - 4.0000i] [ 7]
C(:,:,2) =
'Name2' [ 3]
[1×4 double] [2×1 double]
reshape() 指令
返回一个重新分配行和列的新数组
>> A = {'James Bond', [1 2;3 4;5 6]; pi, magic(5)};
C = reshape(A,1,4)
C =
1×4 cell 数组
'James Bond' [3.1416] [3×2 double] [5×5 double]
>> A=[1:3;4:6];
>> B=reshape(A,3,2)
B =
1 5
4 3
2 6
7.检查变量和变量状态
二、文件访问
save() 和 loda() 
使用 -ascii 保存的文件可使用记事本查看,但读取时也必须使用 -ascii
>> a=magic(4);
>> save mydata1.mat
>> save mydata2.mat -ascii
Excel 文件读取:xlsread()
读取 excel 文件内数据,可指定范围,只能读取数据,不能读取文字
>> Score=xlsread('D:\score.xlsx')
Score =
10 45 32
23 45 54
21 23 12
>> Score=xlsread('D:\score.xlsx','B3:D2')
Score =
10 45 32
23 45 54
Excel 文件存储:xlswrite()
可以写入文字
计算平均值并写入 excle
>> M=mean(Score')';
>> xlswrite('D:\hebut\code\matlab\score.xlsx',M,1,'E2:E4')
>> xlswrite('D:\hebut\code\matlab\score.xlsx',{'mean'},1,'E1')
从 Excel 电子表格中获取文本
文本将被存储在 cell 内
>> [Socre Header]=xlsread('D:\score.xlsx')
Socre =
10.0000 45.0000 32.0000 29.0000
23.0000 45.0000 54.0000 40.6667
21.0000 23.0000 12.0000 18.6667
Header =
4×5 cell 数组
'name' 'test1' 'test2' 'test3' 'mean'
'A' '' '' '' ''
'B' '' '' '' ''
'C' '' '' '' ''
低级文件输入/输出
低级文件 I/O 函数
将正弦函数写入 txt 文件
x = 0:pi/10:pi; y = sin(x); fid = fopen('sinx.txt','w');
for i=1:11
fprintf(fid,'%5.3f %8.4f\n', x(i), y(i));
end
fclose(fid); type sinx.txt
格式化读写
格式操作类似 C 语言
读取文件
feof(fid) 判断文件是否结束,结束返回1