Matlab
clc : 清空命令行窗口
clear all : 清空工作区
Matlab的数据类型:
-
数字
-
字符和字符串
-
矩阵
A = [1 2 3; 4 5 6; 7 8 9]
A( : , 1:2)
B = A’ % A的转置
C = A % 将A矩阵拉长,一列一列的拉长
D = inv(A) % A矩阵的逆
E = zeros(10, 5, 3) % 创建全是0的10行5列三维矩阵
运行结果:
A =
1 2 3
4 5 6
7 8 9
ans =
1 2
4 5
7 8
B =
1 4 7
2 5 8
3 6 9
C =
1
4
7
2
5
8
3
6
9
警告: 矩阵接近奇异值,或者缩放错误。结果可能不准确。RCOND = 1.541976e-18。
D =
1.0e+16 *
-0.4504 0.9007 -0.4504
0.9007 -1.8014 0.9007
-0.4504 0.9007 -0.4504
E(:,:,1) =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
E(:,:,2) =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
E(:,:,3) =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
rand生成均匀分布的伪随机数
randn生成标准正态分布的伪随机数
randi生成均匀分布的伪随机整数
E(:,:,1) = rand(10, 5)
E(:,:,2) = randi(5, 10, 5)
E(:,:,3) = randn(10, 5)
E(:,:,1) = rand(10, 5)
运行结果:
E(:,:,1) =
0.1192 0.9937 0.7720 0.4849 0.7549
0.9398 0.2187 0.9329 0.3935 0.2428
0.6456 0.1058 0.9727 0.6714 0.4424
0.4795 0.1097 0.1920 0.7413 0.6878
0.6393 0.0636 0.1389 0.5201 0.3592
0.5447 0.4046 0.6963 0.3477 0.7363
0.6473 0.4484 0.0938 0.1500 0.3947
0.5439 0.3658 0.5254 0.5861 0.6834
0.7210 0.7635 0.5303 0.2621 0.7040
0.5225 0.6279 0.8611 0.0445 0.4423
E(:,:,2) =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
E(:,:,3) =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
E(:,:,2) = randi(5, 10, 5)
运行结果:
E(:,:,1) =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
E(:,:,2) =
4 3 1 1 5
3 4 1 3 1
5 1 1 5 1
3 4 4 5 1
1 2 2 2 1
1 1 3 2 4
5 3 4 3 3
3 1 3 4 1
5 1 3 3 5
2 2 3 2 4
E(:,:,3) =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
E(:,:,3) = randn(10, 5)
运行结果:
-
E(:,:,1) =
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E(:,:,2) =
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E(:,:,3) =
-1.1933 1.0533 -1.4245 0.5411 0.8535 0.6470 -0.7489 0.7174 -1.5409 -1.8530 -0.3536 -0.9363 -0.7779 -0.2031 -0.2073 0.0464 -1.2691 0.3160 -0.5000 0.2704 -0.7929 0.4980 1.4065 0.3830 -0.6528 -1.5505 2.7891 0.4011 0.4120 0.4772 0.1716 0.7276 0.9297 0.4055 -0.0713 -0.0621 -0.7731 -1.6058 -0.3638 -0.9383 1.1990 0.8366 0.6615 -0.5993 0.1614 0.8017 -1.1283 2.1385 -0.5896 -0.2682
-
元胞数组:一种数组,可以包含不同数据类型的元素的数组,相当于C语言中的结构体。
%% 元胞数组(可以储存:数字、、字符串、数组、元胞数组本身等)
% 数组是只能储存数字或者字符的
a = [1, 5]
b = [2, 4, 3]
c = 'bilibili'
% 元胞数组的创建方式一:
A = {a, b, c} % 元胞数组储存了a,b两个数组和一个字符串
% 元胞数组的创建方式二:
B = cell(1, 4)
% 元胞数组取值
% 取元胞数组A中第二个元素的值
% 使用花括号是取元胞数组里面的值
% 使用()是对元胞数组进行切割
A{2} % 2 4
A{1, 2} % 2 4
A(1, 2) % 切割的是元胞数组
% 删除A的第二个元素
A(2) = []
- map容器的使用
%% map容器的使用
weekMap = containers.Map({'Monday', 'Tuesday'},{1, 2});
% 查询
weekMap('Monday')
% 添加
weekMap('Friday') = 5;
% 检查map中的内容
keys(weekMap)
values(weekMap)
% 注意,返回的是元胞数组
% 连接两个map:
weekMap1 = containers.Map('Thursday', 4);
weekMap2 = [weekMap; weekMap1]; % 连接weekMap和weekMap1两个map
keys(weekMap2);
% 具有重复键名的Map对象的合并示例
m1 = containers.Map({1, 5, 8}, {'A', 'B', 'C'});
m2 = containers.Map({9, 8, 6}, {'X', 'Y', 'Z'});
m3 = [m1; m2]; % 分号是竖直串联,逗号是水平串联
keys(m3)
% ans =
%
% 1×5 cell 数组
%
% {[1]} {[5]} {[6]} {[8]} {[9]}
values(m3)
% ans =
%
% 1×5 cell 数组
%
% {'A'} {'B'} {'Z'} {'Y'} {'X'}
% 键按顺序排列,键值重复时,合并是后者覆盖前者
%% stlread的使用,以及法向量的获取
file = stlread('Test_Models/horse.stl');
F = faceNormal(file, 1); % 获取索引值为1的三角面片的单位法向量
F = faceNormal(file); % 获取所有三角面片的单位法向量
%% 数组的增删改查
% 查
A = [1, 2, 3; 4, 5, 6; 7, 8, 9]
A(2, 1)
% 改
A(2, 1) = 20
% 增
b = [12, 23, 33]
[A; b]
% 转置
b'
[A, b']
% ans =
%
% 1 2 3 12
% 20 5 6 23
% 7 8 9 33
% 将b插入A的第二行
[A(1, :); b; A(2:3, :)] % 将b放在第一行后面的位置,A后面的行加在后面,就可以将b插入A数组的第二行了
% 删
% 删除第二行
% A(2, :)表示第二行的所有列":"表示从第几个到第几个
A(2,:) = [] % 给第二行赋值一个空的数组,那么第二行就会被删除
% 删除第二列
A(:, 2) = [] % 同样的给第二列赋空的数组
% size求数组各个维度的大小
size(A)
% length求维度最大的那一个
length(A)
B = [1, 2, 3; 4, 5, 7; 8, 9, 11] % 括号里的";"表示换行。
length(B) % 最大的维度是3
% stlread的延伸
tic;
file = stlread('Test_Models/femur.stl');
file.Points() % 取出所有的点
file.ConnectivityList() % 取出所有的索引值
toc
[TR,fileformat,attributes,solidID] = stlread('Test_Models/femur.stl'); % 返回 filename 的文件格式、属性(文件为二进制时)以及实体标识号(文件为文本时)
TR = stlread('Test_Models/金箔ASCII.stl');
triplot(TR); % 输出三角剖分
-
结构体
结构体相当于python中的字典(set)有键值对。