第二课 MATLAB进阶与提高

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')

在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值