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

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

我已经对您的代码进行了编辑,以使其更快,更易读。 大多数情况下,操作花费的时间略高于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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值