CELL MODE 的应用
在编写大型程序时,往往需要对某一部分的语句进行调试,以检测其功能。在这种情况下,我们通常又希望保留其他语句的执行结果。恰好,Matlab就提供了一个很方便的功能-CELL MODE。不仅能够方便分块调试,代码定位,还可以进行参数扫描(帮助文档中称作 Increment Values)。
建立方法
两个%加一个空格即可显示高亮。
程序发布(Publish)
可以表叫清楚地看清楚每一个cell mode的运行结果。
同时生成html格式网页和上面网页效果是一样的。
查看、编辑MATLAB自带的工具箱函数
edit mean
edit newff
向量化编程
及时清除不再使用的变量
a = rand(10000);
b = rand(10000);
clear a
b = rand(10000);
当a不再使用,就用clear清除掉,释放内存
使用变量前预分配内存空间
clear all
clc
n = 30000;
% tic 是开始一个秒表计时器;toc是计算现在到tic所开始的计时器的时间间隔,单位是秒(S)
tic;
for k = 1:n
a(k) = 1; %未预分配
end
time = toc;
disp(['未预分配内存下动态赋值长为',num2str(n),'的数组时间是:',num2str(time),'秒!'])
tic
b = zeros(1,n); %先分配空间
for k = 1:n
b(k) = 1;
end
time = toc;
disp(['预分配内存下动态赋值长为',num2str(n),'的数组时间是:',num2str(time),'秒!'])
选择合适的数据类型
clear all
clc
n = 300000;
%三种类型的职位8的结构
a = 8;
b{1} = 8;
c.data = 8;
tic
for k = 1:n;
a;
end
time = toc;
disp(['访问',num2str(n),'次double型数组时间是:',num2str(time),'秒!'])
tic
for k = 1:n;
b{1};
end
time = toc;
disp(['访问',num2str(n),'次cell型数组时间是:',num2str(time),'秒!'])
tic
for k = 1:n;
c.data;
end
time = toc;
disp(['访问',num2str(n),'次struct型数组时间是:',num2str(time),'秒!'])
注意:不同计算机和运行环境,结果可能不同,在自己计算机编写代码的时候可以先调试一下,看看是否是cell类型更适合自己的电脑。
按列优先循环
因为存储是按列存的。
clear all
clc
tic
a = 0;
for i = 1:1000
for j = 50000
a = a + 1;
end
end
toc
tic
a = 0;
for i = 1:50000
for j = 1:1000
a = a + 1;
end
end
toc
注意:我的显示行更快,是版本问题,在32bit电脑上测试是列更快。
循环次数多的变量安排在内层
clear all
clc
tic
a = 0;
for i = 1:1000
for j = 1:50000
a = a + 1;
end
end
toc
tic
b = 0;
for i = 1:50000
for j = 1:1000
b = b + 1;
end
end
toc
给函数瘦身
通过观察mean函数,发现是先求和后除以长度,所以我们直接使用sum比较时间。
edit mean
clear all
clc
a = rand(1,10000);
tic
b = mean(a)
toc
tic
c = sum(a)/length(a)
toc
图形对象和句柄
图形对象:用于界面制作和数据可视的基本绘图元素。是图形系统中最基本、最底层的单元。图形对象的属性由属性名和属性值两部分组成。
句柄:图形对象的标识代码,句柄含有图形对象的各种必要的属性信息。根屏幕的句柄为0,图形窗口的句柄为整数,其他对象的句柄为浮点数。
图形设置
画出一个简单的sin(x)函数图
x = 0:0.01:2*pi;
y = sin(x);
h = plot(x,y);
grid on %添加网格线
get(h)
设置线条的属性
set(h,'linestyle','-','linewidth',2,'color','k')
set(h,'linestyle',':','linewidth',5,'color','b')
设置网格的坐标轴间距
gca表示当前网格的坐标轴距离,横线网格0-7步长0.5,纵线网格-1-1步长0.1
set(gca,'xtick',0:0.5:7)
set(gca,'ytick',-1:0.1:1)
设置图例legend字体的大小
新建一个:
x = 0:0.01:2*pi;
y1 = sin(x);
y2 = cos(x);
plot(x,y1,'r') %红色
hold on %在做下一个图的时候保留已有的图像
plot(x,y2,'-.b') %蓝色,---格式
设置图例大小(legend)
默认图例:
h = legend('sin(x)','cos(x)'); %图例用legend,里面内容是sin和cos
修改图例:
字体大小16,背景颜色黑色k,外围边线框颜色r红色,文本颜色白色w
set(h,'fontsize',16,'color','k','edgecolor','r','textcolor','w')
拆分图例
先建一个图形:
x = 0:0.01:2*pi;
y1 = sin(x);
y2 = cos(x);
h1 = plot(x,y1,'r');
hold on
h2 = plot(x,y2,'-.b');
然后替换:
ax1 = axes('position',get(gca,'position'),'visible','off'); %将原来坐标轴的位置用新坐标轴表示,off设置的新的坐标轴ax1不可见
legend(ax1,h1,'sin(x)','location','northwest')
ax2 = axes('position',get(gca,'position'),'visible','off');
legend(ax2,h2,'cos(x)','location','northeast')