Matlab 笔记

Matlab Figure 中重新提取数据

How do I extract data from MATLAB figures?

matlab 线型总结(查看帮助文档 plot 函数)

画图线型、符号及颜色汇总

寻找数据的波峰波谷

寻找峰值(波峰,波谷)

其中的,

IndMin, data (IndMin) 对应的是波谷点的数据 IndMax, data (IndMax) 对应的是波峰点的数据

matlab 中乘法 * 和点乘 .*;除法 / 和点除 ./ 的联系和区别

matlab 中乘法 * 和点乘 .*;除法 / 和点除 ./ 的联系和区别

matlab 导出图片删除白边

Save Plot with Minimal White Space

1
2
3
4
5
6
7
8
ax = gca;
outerpos = ax.OuterPosition;
ti = ax.TightInset;
left = outerpos(1) + ti(1);
bottom = outerpos(2) + ti(2);
ax_width = outerpos(3) - ti(1) - ti(3);
ax_height = outerpos(4) - ti(2) - ti(4);
ax.Position = [left bottom ax_width ax_height];

Get rid of the white space around matlab figure's pdf output

1
2
3
4
5
6
7
8
9
10
% 保存为 printpdf.m 
function printpdf(h,outfilename)

set(h, 'PaperUnits','centimeters');
set(h, 'Units','centimeters');
pos=get(h,'Position');
set(h, 'PaperSize', [pos(3) pos(4)]);
set(h, 'PaperPositionMode', 'manual');
set(h, 'PaperPosition',[0 0 pos(3) pos(4)]);
print('-dpdf',outfilename);

使用示例: printpdf(gcf,'test')

导出 pdf 不是矢量格式

matlab 导出矢量图 (pdf ,svg) 的坑。当数据过多的时候,Matlab的自动渲染器设置从 -painters 渲染器切换到 -opengl 渲染器,会输出成标量图。这时要手动换回 -painters.

Some figures not saving as vector graphics (.svg)

https://www.mathworks.com/help/matlab/ref/print.html

plot 绘制 marker ,控制绘制间隔

1
'LineStyle', '-.', 'Marker', 'x', 'MarkerIndices',1:300:length(ydata)

每隔 300 个点一个标记

matlab设置字体,导出 pdf 字体失效

一些特殊的字符,比如 ,会导致字体失效。示例代码。

1
2
3
4
5
6
7
8
9
A = peaks(15);
imagesc(A);
set(gca, 'FontName', 'Times New Roman', 'FontSize', 20);
xlabel('x ℃');
ylabel('Times New Roman Font ℃');
title('Title ℃')

print('test.pdf','-dpdf')
print('test.png','-dpng')

可以看到导出的 pdf 字体发生了变化。(左边 png,右边 pdf )

变量类型转换

num 类型转 str num2str sym 转 str char()

matlab 耗时优化

预分配内存

matlab 预分配内存后速度提升非常明显

1
2
3
4
5
6
7
8
9
10
11
12
13
tic
a = zeros(1, 10^5);
for i = 1:1:10^5
a(i) = i;
end
time1 = toc

tic
b = [];
for i = 1:1:10^5
b = [b ,i];
end
time2 = toc

time1 = 0.0019 time2 = 2.8006

disp 也会消耗较多时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
tic
a = zeros(1, 10^5);
for i = 1:1:10^5
a(i) = i;
end
time1 = toc;

tic
a = zeros(1, 10^5);
for i = 1:1:10^5
a(i) = i;
disp(a(i));
end
time2 = toc;

time1 = 0.0016 time2 = 1.1805