A bug with vector lengths?

1 次查看(过去 30 天)
C Meek
C Meek 2012-7-26
Hey everyone.
Without going into too much unnecessary detail, I'll try and explain this strange problem I'm having.
I've been writing some optimization code, in which I have a set of starting values (importantly, containing a value N which specifies vector length), which are repeatedly adjusted and rated for suitability using an objective function. All of this takes place in a loop.
The objective function always (purposely) outputs a vector of N+1 values, which is then used as the standard length for the rest of what I'm doing in the loop.
This all usually works absolutely fine, but recently I have come across a set of values where N doesn't increase to N+1 as it usually should, and hence it causes errors in the rest of the code. This set of values is nothing out of the ordinary, and furthermore, when I break the code down and run it in sections with these values, N increases to N+1 as it should - so the error only happens while running in a loop.
Therefore, there doesn't seem to be any problem with my code - so I'm just wondering if anyone has experienced something similar or knows of any bugs that produce this behaviour in Matlab?
Hope that wasn't too complicated. Thanks in advance if you have any advice!
  6 个评论
Tom
Tom 2012-7-27
have you set it to go into debug mode when the error occurs? Write
dbstop if error
C Meek
C Meek 2012-7-27
Ok, I think this is something like floating point error, which means I'm an eejit as I thought I'd already checked for it. I got it working now, just want to confirm that my thinking is right. Two bits lines of code:
N=N*d/L;
x=linspace(0,d,N+1);
In the case I'm working on, d should always be equal to L. In earlier functions in my code, L is simply being put as an input for d. But when I execute the linspace, its length stays as N instead of N+1. When I specifically make d=L in the command window, then x will become the correct length.
Because of this I'm concluding that some sort of error is creeping in somewhere such that d/L is a fraction below 1, which affects the linspace output. I simply put N = round(N*d/L) and this has fixed it.
Have i got the right idea here?

请先登录,再进行评论。

回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by