首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >while循环和i=i+1中函数的使用技巧

while循环和i=i+1中函数的使用技巧
EN

Stack Overflow用户
提问于 2012-11-07 00:46:22
回答 1查看 2.1K关注 0票数 2

我对matlab中的一个函数有个问题。此特定功能用于过滤光信号。正如您在下面看到的,我添加了在函数和while循环本身中使用的代码。代码是为NXT乐高机器人编写的。

有没有什么技巧可以让count变量(i=i+1)在函数中工作,这样我们就可以绘制Light(i)了?因为当我们尝试不同的代码使其工作时,我们会收到一堆错误消息。

代码语言:javascript
复制
function  [light]  = filter_func( i)
  lightI(i) = GetLight(SENSOR_3);  

  if i==1
    light(i)=lightI(i)

  elseif i==2
    light(i) =  0.55*lightI(i) + 0.45*lightI(i-1)
  else
    light(i) =  0.4*lightI(i) + 0.3*lightI(i-1) + 0.3*lightI(i-2);
  end

end

i=1
while true
  lightI(i) = GetLight(SENSOR_3); % Get’s a lightvalue between    0 and 1024.
  if i>2
    light =filter_func(i)
    light=round(light); 
  else
    light(i) = GetLight(SENSOR_3);;
  end
  i=1+i  

  plot(light(end-90:end), 'r-');
  title('Lightvalue')
  axis([0 100 0 1023]) ;
end
EN

回答 1

Stack Overflow用户

发布于 2012-11-07 16:45:43

你得到错误的主要原因可能是你不允许在MATLAB中像这样混合脚本和函数(就像在Python中一样)。

您的过滤器函数仅在i>2时使用,那么为什么要执行前两个测试?您似乎希望将lightI作为全局变量,但这并不是您所做的。函数内部的lightI与while循环中的不同。

因为您的while循环永远运行,所以您可能不需要担心前两次更新绘图。在这种情况下,您可以这样做:

代码语言:javascript
复制
filter                  = [0.4 0.3 0.3]';
latest_filtered_light   = nan(90,1);
lightI                  = [];
p                       = plot(latest_filtered_light, 'r-');
title('Lightvalue')
axis([0 100 0 1023]) ;

while True
    lightI(end+1,1) = rand*1024; % Get’s a lightvalue between    0 and 1024.
    if i>=3
        new_val               = lightI(end-2:end,1)'*filter;
        latest_filtered_light = [latest_filtered_light(2:end);...
                                new_val];
        set(p, 'ydata', latest_filtered_light)
        drawnow
    end
end

我认为重要的一点是不要每次都调用plot -至少如果你最不关心性能的话。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13255576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档