MATLAB基本操作¶
约 259 个字 141 行代码 预计阅读时间 3 分钟
常见数据类型¶
-
默认的数据类型 double(双精度浮点型) 8个字节
-
有复数complex
format % format short 或者 format long 可以调整输出的格式
a = 1+1i % a = 1.0000 + 1.0000i
b = 1+1j % b = 1.0000 + 1.0000i
c = a*b % c = 0.0000 + 2.0000i
矩阵的表示¶
各种数据类型都是以矩阵的形式存在的
一个数字就是一个\(1*1\)的矩阵
矩阵的创建¶
A = [1 2 3 ;4, 5 ,6]
B = [5,6,8;9,0,4]
C = [A,B;B,A] % 表示分块矩阵
R = [1,2,3;4,5,6]
I = [8,0,9;4,6,1]
com = R+I*1i
com = 2×3 complex
1.0000 + 8.0000i 2.0000 + 0.0000i 3.0000 + 9.0000i
4.0000 + 4.0000i 5.0000 + 6.0000i 6.0000 + 1.0000i
切分¶
%随机矩阵生成
A = 1+int64(9*rand(4,5)) % rand()生成0~1的数字,rand(4,5)生成一个四行五列的矩阵
%随机生成行向量
a = 1:2:19 % start:step:end
% linspace
b = linspace(1,10,20) % start,end,生成多少个元素
元素引用¶
A(2,3)
A(7) % 从列开始数
length(A) % 返回 X 中最大数组维度的长度
ndims(A) %2
numel(A) %20 数组元素的数目
A(3,:) % :表示所有
A(:,2)
A(1:3,2:4)
A(:,1:3:5) %用到了切分
% reshape
F = [1 2 3 4 5 6 7 8 9 10 11 12]
F1 = reshape(F,4,3) % 从列开始排,排成4*3的样子,四行三列
关键字以及变量管理¶
需要注意的保留关键字: i
, j
, ans
工作区可以查看当前变量的值
命令行窗口可以使用 whos
查看当前变量和值, who
查看当前所有的变量, clc
清空命令行窗口。
数学运算¶
常用数学函数¶
x = sqrt(7)-2i;
y = exp(pi/2);
z=(5+cosd(47))/(1+abs(x-y))
cos(47*pi/180)
cosd(47)
log(10) %ln
log10(100)
pow2(16)
gcd(12,82)
factorial(5)
运算¶
% 算数
% .* 点号加上算数表示矩阵对应数字的算术运算,没有点号的乘法则表示矩阵乘法
A=rand(3,3)
B=rand(3,3)
A.*B
% ./
A./B % 这些都是对应元素的乘和除
% *
A*B
% /
A/B % 这些是矩阵的乘法和除法
% ~= 这个是不等于
% & | ~ 与或非运算
``
### 字符串
```matlab
str1 = 'MATLAB'
str2 = 'MIkepp'
str3 = 'I''m mike' %str3 = 'I'm mike'
str1(2)
strA = [str1;str2]
%strA =
%'MATLAB'
%'MIkepp' 一个2*6的char数组
strA(1,3)
strA(7)
a = abs(str1) % 获得ASCII值
char(a+32) % 整体+32变成小写
结构矩阵(struct)¶
结构矩阵的创建¶
% % 定义一个 1x4 结构矩阵
structA(1).ID = 0001;
structA(1).name = 'Mike';
structA(1).data = [30 50;80 90];
structA(2).ID = 0002;
structA(2).name = 'Kate';
structA(2).data = [50 30;90 10];
structA(3).ID = 0003;
structA(3).name = 'Amy';
structA(3).data = [40 70;20 60];
structA(4).ID = 0004;
structA(4).name = 'John';
structA(4).data = [45 15;25 10];
structA(4).gender = 'Male'; %会自动为之前的创建空gender
structA
显示如下:
% 定义一个 2x2 结构矩阵
structB(1,1).ID = 0001;
structB(1,1).name = 'Mike';
structB(1,1).data = [30 50;80 90];
structB(1,2).ID = 0002;
structB(1,2).name = 'Kate';
structB(1,2).data = [50 30;90 10];
structB(2,1).ID = 0003;
structB(2,1).name = 'Amy';
structB(2,1).data = [40 70;20 60];
structB(2,2).ID = 0004;
structB(2,2).name = 'John';
structB(2,2).data = [45 15;25 10];
structB(2,2).gender = 'Male';
structB
可以在工作区中打开显示详细信息。
结构矩阵的索引¶
% % 索引
structA(2).name
structA(3).name
structA(4).data(3)
% % 修改
structA(4).name = 'John Little'
structA(4).data(1,2) = 36
% %删除 rmfield
tempStruct = rmfield(structA,"gender")
% structA(4).gender = [] 用这个去除单个
元胞(cell)¶
元胞的创建与操作
% 与struct的区别 : 元素没有自己的名字
% 创建
cellA = {1,'Mike',[10 20;30 40];
2,[1,2],[90,85;60,13] ;
3,'Amy',[77,89;50,4]}
% 索引 注意小括号和大括号的索引方式的不同之处!
cellA(2,3) %索引元素,返回的是一个矩阵 ans = {2×2 double}
cellA{2,3} %索引具体的值,返回如下:
%ans = 2×2
% 90 85
% 60 13
% 向元胞元素中加入结构矩阵
strctCellA.data1 = 'testData1';
strctCellA.data2 = 'testData2';
strctCellA
cellA{3,4} = strctCellA %注意使用的是花括号,很少情况下使用小括号
cellA{1,4} = 'MATLAB is the greatest software'
cellA{2,4} = structA
% 显示整个元胞 celldisp cellplot
celldisp(cellA)
cellplot(cellA)
% 再次强调 { } 和 ( )的区别
cellA(4) = [] %这将会直接删除位置,导致cellA变成一个1*11的行向量