经过一番来回的思考,我想我知道您要达到的目标以及阻碍您前进的道路。

我已经对您的代码进行了编辑,以使其更快,更易读。 大多数情况下,操作花费的时间略高于0.05秒,并且在某些时间点,操作可能比预期的时间长约5毫秒。 当然,您的年龄可能会有所不同。 由于我没有arduino,所以我不知道那里是否有瓶颈。 您还应该尝试使用内置的Matlab探查器对代码进行性能分析(这非常有用),以查看到底是什么导致代码变慢。

我发现减慢代码运行速度的主要原因是您使用了plot函数每次向plot添加一个点。 每次调用此函数时,它都会创建一个新的图形对象。 经过几百次之后,事情变得迟钝了。 相反,您应该只更新已经绘制的数据,然后使用drawnow重新绘制它。

简而言之,解决方案是这样的:

1)用单点初始化绘图并保存图形手柄以备后用:

p1 = plot(0,0,'b*');

2)然后,在循环内部,一旦您的数据数组已更新,就用新数组替换现有绘图中的数据。

set(p1, 'XData', 1:i, 'YData', y(1:i));

3)重新绘制图以反映最新的更新。

drawnow;

drawnow最终还会减慢您的代码的速度,因为它必须在每次迭代时重新绘制越来越大的图。 为了使工作更快,您可能需要较长的时间间隔来刷新图。 例如,以下将每10次迭代刷新一次:

if rem(i,10) == 0

drawnow;

end

完整代码如下。 让我知道您是否还有其他问题。

max = 80;

min = 40;

amp = (max-min)/2;

offset = amp + min;

btime = 5;

bpm = 12;

spb = 60/bpm;

sapb = spb/.05;

tosd = sapb*bpm*btime;

time1 = btime*60;

x = linspace(0,time1,tosd)';

x1 = amp*sin(x*(2*pi/20)) + offset;

pause(1);

%fprintf(handles.UltraM,(['

']))

disp(['

']); % replacing with disp (I don't have an arduino)

pause(5);

%y = []; % unnecessary here, preallocated before loop

figure(1);

p1 = plot(0,0,'b*'); % plotting one dot to create an object, data will be overwritten

hold on;

title('Pressure Data');

xlabel('Data Number');

ylabel('Analog Voltage (0-1023)');

%t1 = []; % unnecessary here, preallocated before loop

figure(2);

p2 = plot(0,0,'b*'); % plotting one dot to create an object, data will be overwritten

hold on;

title('Time to execute task');

xlabel('iteration number');

ylabel('time taken');

% preallocate t1 and y arrays for faster operation

t1 = zeros(size(x));

y = zeros(size(x));

i = 1; % moved closer to loop beginning for better readability

while i <= length(x) % parentheses unnecessary in Matlab

t2 = tic;

t = tic;

%fprintf(handles.UltraM,(['

']));

disp((['

'])); % replacing with disp (I don't have an arduino)

%y(i) = fscanf(handles.UltraM,'%d');

y(i) = randn; % replacing with random number (I don't have an arduino)

%figure(1); % unnecessary

%hold on; % unnecessary

%plot(i, y(i), 'b*');

% replacing the above with a slightly faster version

set(p1, 'XData', 1:i, 'YData', y(1:i));

%drawnow; % first one is annecessary

%hold off; % unnecessary

while toc(t) < 0.05

continue

end

t1(i) = toc(t2);

%figure(2); % unnecessary

%hold on; % unnecessary

%plot(i,t1(i),'b*');

% replacing the above with a slightly faster version

set(p2, 'XData', 1:i, 'YData', t1(1:i));

if rem(i,10) == 0 % refreshing every 10 iterations

drawnow;

end

%hold off; % unnecessary

i = i + 1;

end

先前版本的答案

您可以通过以下两个语句完全替换循环来向量化循环:

% vectorizing num-to-string conversion

y4 = cellstr(strcat('

'));

% deleting all spaces

y4 = cellfun(@(u) u(~isspace(u)), y4, 'UniformOutput', false)

这个小小的调整可以使您的程序在我的PC上运行x4速度更快。

显示/打印结果也可以使用cellfun迭代器完成: cellfun(@disp, y4)

matlab循环迭代6,matlab - Matlab中每个for循环迭代的速度降低 - 堆栈内存溢出相关推荐

  1. java中mypoiexception,java - 如何使用Poi获取Java中单元格的数据验证源? - 堆栈内存溢出...

    此问题包含多个不同的问题. 首先,我们需要获取工作表的数据验证,然后为每个数据验证获取数据验证所适用的Excel单元格范围. 如果该单元格位于该单元格范围之一中,并且数据验证是列表约束,则进行进一步处 ...

  2. 如何为linux 桌面文件内存,linux - 桌面Linux发行版中.desktop文件的功能是什么? - 堆栈内存溢出...

    我有以下情况:我必须修改一个.desktop文件,该文件位于我正在使用的应用程序的包中. 当我尝试打开文件的内容时,我遇到了一个奇怪的问题. 如果我点击它然后我尝试点击"打开"它给 ...

  3. java ecj_java - 在Maven构建中使用Eclipse Java Compiler(ecj) - 堆栈内存溢出

    与标准Javac编译器相比,Eclipse Java编译器(ecj)具有很多优势. 它速度很快,并且可以配置更多警告和错误,从而提高了代码质量. 编译器中最有趣的事情之一是在编译器内部添加了null类 ...

  4. java slf4j日志级别_java - 在slf4j中设置运行时消息的日志级别 - 堆栈内存溢出

    ===============>>#1 票数:41 已采纳 使用slf4j无法做到这slf4j . 我想,缺少这个功能的原因是,几乎不可能为slf4j构建一个Level类型,它可以有效地映 ...

  5. android 边框重叠,android - Android:recyclerview中的viewitems轮廓与recyclerview边框重叠 - 堆栈内存溢出...

    在我当前的项目中,我有一个RecyclerView ,其边框为圆角矩形. 我在布局xml中使用background view标签对其进行了设置,并产生了正确的效果: ... android:backg ...

  6. ie11 html元素操作,css - 在IE11中过滤html / body元素的灰度[重复] - 堆栈内存溢出

    由于IE不支持滤镜:grayscale ,您可以尝试使用SVG + JS方法在IE中应用灰度滤镜. 以下是代码片段的一部分. // Grayscale images only on browsers ...

  7. java自动生成项目编号_java - Apache POI,在同一文档中创建项目符号点和编号列表 - 堆栈内存溢出...

    我试图用apache poi创建一个既包含圆点又包含编号列表的文档. 我想得到这样的结果. 名单: 清单1项目0 清单1项目1 清单1项目2 列表后的段落. 清单2: 清单2项目0 清单2项目1 清单 ...

  8. android framelayout 高度,android - Android:如何将FrameLayout中的线性布局与底部对齐? - 堆栈内存溢出...

    使用属性layout_gravity对齐FrameLayout中的任何视图 android:layout_gravity:"bottom" /> 但是,如果您尝试将其放置在其 ...

  9. mysql存储过程中as_mysql - 存储过程mySQL语法错误意外“ AS” - 堆栈内存溢出

    我正在编写一个存储过程,如下所示 我得到的错误是在第3行和第4行,这两个错误是第3行是"意外的'发布者'标识符",第4行是"意外的AS(as)",但我不知道我是 ...

最新文章

  1. gdb+gdbserver
  2. Java迭代器Iterator
  3. requirejs、vue、vuex、vue-route的结合使用,您认为可行吗?
  4. 161227、js显示对象所有属性和方法的函数
  5. CentOS7 安装Mysql5.6 后启动失败处理 The server quit without updating PID file
  6. Centos为什么比不过Ubuntu和Debian?
  7. 搜python题_python知识点汇总(可以搜Python题答案的APP)
  8. ORACLE忘记sys密码
  9. angelajs中ajax,Fabric.js Triangle angle属性用法及代码示例
  10. Android音频系统之AudioFlinger(一)
  11. AngularJs HelloWorld
  12. 乐高机器人编程自学入门
  13. 北京小升初混战:有家长给孩子报7个奥数班
  14. 工作经验分享:为什么我们要写Unti Test
  15. 危险废物处置与管理市场深度研究分析报告
  16. 【大数据】城市公交网络分析与可视化(二):获取公交行驶路径并绘制散点图
  17. VueDemo-12.加入购物车
  18. ADXL345 三轴加速度角度传感器
  19. java计算机毕业设计Web产品管理系统MyBatis+系统+LW文档+源码+调试部署
  20. 消除笔哪个p图软件有?快把这些软件收好

热门文章

  1. 测试分享之集五福 福卡的分享
  2. Android手机按键【监听】
  3. 2021-07-30嵌入式学习---智能家居项目
  4. SpringBoot Service 同名异常(conflicts with existing, non-compatible bean definition of same name)
  5. MarsNFT :个人如何发行数字藏品?
  6. 索尼PK东芝 -- 看了很有收获
  7. 逻辑题:100层扔鸡蛋问题(扔球问题)
  8. 计算机文档软件,电脑文档软件
  9. 爬虫实战:爬取微博明星的某一条动态的粉丝评论
  10. unity 使用socket制作局域网项目--激流勇进