Borrar filtros
Borrar filtros

A bug with vector lengths?

3 visualizaciones (últimos 30 días)
C Meek
C Meek el 26 de Jul. de 2012
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 comentarios
Tom
Tom el 27 de Jul. de 2012
have you set it to go into debug mode when the error occurs? Write
dbstop if error
C Meek
C Meek el 27 de Jul. de 2012
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?

Iniciar sesión para comentar.

Respuestas (0)

Categorías

Más información sobre Startup and Shutdown en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by