跳转至

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

工作区可以查看当前变量的值

img

命令行窗口可以使用 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

显示如下:

img

% 定义一个 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
structB的显示如下:

img

可以在工作区中打开显示详细信息。


结构矩阵的索引

% % 索引
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]}

img

% 索引 注意小括号和大括号的索引方式的不同之处!
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的行向量