matlab基础使用

1. 比如说有一组点的坐标(1,1),(2,2),(3,3),如何将他们绘制在坐标系中?

cpp 复制代码
points = [1 1;2 2; 3 3];
plot(points(1,:), points(2,:))
hold on;
grid;

2. 矩阵表示

points = [1 1;2 2; 3 3];
实际上是
1 1
2 2
3 3
每个分号之前是一行

3. 图像绘制

3.1 一组点的绘制

cpp 复制代码
%% 已知样本特征向量
class_apple=...   %% 苹果类样本
    [220 240 220;
    90 95 95]
class_orange=... %% 桔子类样本
    [80 85 85;
    85 80 85]

%% 在二维平面上绘制两类点
plot(class_apple(1,:),class_apple(2,:),'o')
hold on;
plot(class_orange(1,:),class_orange(2,:),'*')
hold on;
grid;
plot(class_apple(1,:),class_apple(2,:),'o')后面为什么没有分号?
在 MATLAB 中,分号 ; 的作用是 抑制输出,即防止命令的结果显示在命令窗口中。
没有分号时,命令的结果会被显示出来。
plot(class_apple(1,:), class_apple(2,:), 'o') 这一行,
不加分号的原因通常是为了显示图形,而不是为了显示命令的输出。
"hold on;"  有什么作用?
hold on 是用来保持当前图形的状态,允许在同一个图像上绘制多个图形。
当你使用 hold on 时,后续的 plot 命令会继续在当前图形上添加内容,
而不是创建新的图形窗口。
"hold on" 和 "hold off" 有什么不同?
hold on:保持当前图形,后续的绘图命令将添加到已有图形上。
hold off:恢复默认行为,后续的绘图命令会清除当前图形并重新绘制。
hold off 通常在你完成多次绘图操作后使用,确保清除所有之前的图形,开始新的绘图。
hold on 和 hold off 可以配合使用,比如现在需要画100组点,
使用plot画完一组后使用 hold on; 画完第100组后使用 hold off; 
这样可以避免每组后面  都使用hold on; 
网格线的开关:
grid on:显示网格线。
grid off:隐藏网格线。
grid:根据当前状态切换网格的显示与隐藏(
如果网格已开启,则关闭;如果网格未开启,则开启)。
图例、标题和标签:
legend('图例1', '图例2', '图例3');
title(' 标题名 ');
xlabel('X');
ylabel('Y');

4. X = [randn(1000,2)+ones(1000,2); ...

randn(1000,2)-ones(1000,2);];

randn(m, n) 是 MATLAB 中用来生成一个 m 行 n 列的矩阵,其中每个元素是从标准正态分布(均值为 0,方差为 1)中随机抽取的数值。

ones(m, n) 生成一个 m 行 n 列的矩阵,所有元素的值为 1。

方括号 [] 用来在 MATLAB 中合并矩阵。这里使用了 垂直拼接(concatenation),即将两组数据(每组 1000 个二维数据点)上下合并成一个大矩阵。

5. size(train_data, 2);size(train_data, 2) 返回的是矩阵train_data第二维的大小,也就是train_data的列数

6. 二维数组映射成图像

% 定义颜色映射 (cmap)

cmap = [1 1 1; ... % 1 - 白色 - 可通行区域

0 0 0; ... % 2 - 黑色 - 障碍物

1 0 0; ... % 3 - 红色 - 已访问节点

0 0 1; ... % 4 - 蓝色 - 待处理队列中的节点

0 1 0; ... % 5 - 绿色 - 起点

1 1 0]; % 6 - 黄色 - 终点

% 设置颜色映射

colormap(cmap);

% 初始化一个 10x10 的地图,0 表示空白区域,2 表示障碍物

map = zeros(10);

map(1:9, 7) = 2; % 在第7列添加一个障碍物

map(3, 2) = 5; % 设置起点位置为 (3, 2)

map(4, 9) = 6; % 设置终点位置为 (4, 9)

% 绘制初始地图

image(1.5, 1.5, map);

grid on;

axis image;

解释:

image(1.5, 1.5, map):

image 是 MATLAB 用来显示图像的函数。它将一个矩阵 map 显示为一个图像,其中矩阵的值对应不同的颜色。这是一种将二维数据以图像的形式呈现出来的方式。

1.5, 1.5:

这是 image 函数的 XData 和 YData 参数,分别设置图像的 X 和 Y 轴坐标范围。

1.5 代表图像显示区域的左下角坐标。通过这种方式,图像会有一个固定的显示范围,而不仅仅是基于原始矩阵的索引。这个参数是用来控制图像显示的位置和缩放的,但在大多数情况下,你也可以省略它,只使用默认值,这时图像会按矩阵的索引自动显示。

map:

map 是一个包含地图信息的矩阵。它是一个二维数组,其中每个元素的数值代表该位置的类型(如障碍物、空地、起点、终点等)。这些值会映射到指定的颜色上,给图像着色。

通过 colormap(cmap) 来设置一个颜色映射,将 map 中的不同值映射到不同的颜色。例如,值为 1 的区域可能显示为白色,值为 2 的区域显示为黑色,以此类推。

7. 矩阵相关

7.1 正无穷矩阵

distanceFromStart = Inf(nrows, ncols);

创建一个 nrows行,ncols列 的正无穷矩阵

7.2 矩阵索引

示例:

map = [

1 2 3 4 5;

6 7 8 9 10;

11 12 13 14 15;

16 17 18 19 20

];

% 获取矩阵尺寸

matrix_size = size(map);

% 使用 sub2ind 将 (3, 2) 转换为线性索引

linear_index = sub2ind(matrix_size, 3, 2);

% 输出结果

disp(['线性索引为: ', num2str(linear_index)]);

disp(['对应的元素值为: ', num2str(map(linear_index))]);

解释:

  1. size(map) 返回矩阵 map 的尺寸 [4, 5],即 4 行 5 列。
  2. sub2ind(matrix_size, 3, 2) 将二维坐标 (3, 2) 转换为对应的线性索引。此时 (3, 2) 表示的是第 3 行第 2 列的元素。
  3. map(linear_index) 可以直接通过这个线性索引来访问矩阵中的元素。linear_index的值是列优先的,即(3,2)这个第三行第二列的元素索引是 7 。

7.3 矩阵反索引

[i, j] = ind2sub(size(distanceFromStart), current);

将线性索引 current 转换为二维数组 distanceFromStart 的行 i 和列 j

8. 图像相关

8.1 横纵坐标比例保持1 :1

axis image;

主要用于控制图像显示的比例,确保图像的横纵比例与原始数据一致,避免图像因坐标轴的尺度差异而产生变形。

8.2 网格展示

grid on;

用于在图形中显示网格线,使得数据的趋势和分布更加清晰,特别是在可视化过程中对比数据点的位置时非常有用。

8.3 强制更新图形

drawnow;

强制 MATLAB 更新图形窗口的命令,通常用于在循环中或长时间运行的程序中实时显示图形,确保图形显示是即时的而不是等待程序执行完毕后才显示。它特别适用于动画或实时更新的情境。

9. 简单函数

9.1 矩阵最小值

[min_dist, current] = min(distanceFromStart(😃);

min_dist 是 distanceFromStart 中的最小值。

current 是最小值在展开后的列向量中的索引位置。

9.2 find() 函数

示例:

locate = find(outRangetest>0);

outRangetest:这是一个列向量。

outRangetest > 0:这是一个逻辑条件,生成一个布尔数组。

find(outRangetest > 0):find 函数会返回所有满足条件(即 outRangetest(i) > 0)的索引值。

10. 行连接符 " ... "

outRangetest = (neighbor(:,1)<1) + (neighbor(:,1)>nrows) +...

(neighbor(:,2)<1) + (neighbor(:,2)>ncols);

" ... " 用于把两个条件 (neighbor(:,1)<1) 和 (neighbor(:,1)>nrows) 分成两行书写,但它们实际上是同一行代码的一部分。... 让 MATLAB 知道,下一行代码是当前行代码的延续,继续计算。

相关推荐
AI人H哥会Java30 分钟前
【JAVA】Java基础—面向对象编程:常用API与数据结构—集合框架(List、Set、Map等)
java·开发语言
shepherd枸杞泡茶1 小时前
C# 数据结构之【队列】C#队列
开发语言·数据结构·c#
简简单单做算法1 小时前
基于图像形态学处理的移动物体目标跟踪和质心提取matlab仿真,带GUI界面
matlab·目标跟踪·图像形态学处理·移动物体·质心提取
scoone1 小时前
C++中的原子操作:原子性、内存顺序、性能优化与原子变量赋值
开发语言·c++
轩情吖1 小时前
模拟实现Bash
linux·c语言·开发语言·c++·后端·bash·环境变量
旧故新长1 小时前
版本控制和idea简体中文教程
java·开发语言·intellij-idea
疯一样的码农1 小时前
使用 Maven 构建一个简单的 Java 项目
java·开发语言·maven
易风有点疯2 小时前
Python:序列化
开发语言·python
Biomamba生信基地2 小时前
R语言基础| 时间序列分析
开发语言·r语言·kotlin·编程
Promising_GEO2 小时前
使用R语言绘制简单地图的教程
开发语言·python·r语言