How do I avoid errors due to round-off in Matlab?
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Monisha S R
el 15 de Oct. de 2018
Editada: Bruno Luong
el 15 de Oct. de 2018
My code produces round-off errors which I cannot seem to correct even by using vpa(variable). The code gives Nt = 888890 whereas the length(t) = 888889. How do I resolve this discrepancy? I need Nt (number of nodes) to be an integer and the formula for Nt is correct. Any help would be appreciated. Thanks.
dt = 0.0225; tend = 20000;
Nt = round(tend/dt +1);
t = (0:dt:tend)';
0 comentarios
Respuesta aceptada
Bruno Luong
el 15 de Oct. de 2018
t=linspace(0,tend,Nt);
3 comentarios
Bruno Luong
el 15 de Oct. de 2018
Editada: Bruno Luong
el 15 de Oct. de 2018
Because of round-off error as you say. Basically the column syntax increment sequentially from the start value with the given step and go on while the current value <= the specified end value.
Because of round off, it end up slightly larger than 20000 at the step 888890, so this value is not kept.*
Linspace just divides the interval in (n-1) equal parts to get exactly n points, always.
(*) actually there are some special treatment by doing both directions by columns, but for simplicity of the explanation I don't go into the detail of that procedure.
Bruno Luong
el 15 de Oct. de 2018
Editada: Bruno Luong
el 15 de Oct. de 2018
The round-off occurs because 0.0225 = (9/16)*(1/5)*(1/5) and because 1/5 cannot be stored exactly on finite binary, it actually cannot be represented exactly on the computer, so is not 0.0225.
If you try with step for example 0.1250 = 1/8, this problem does not occur, or similar with 0.0625 = 1/16 or 0.03125. I cut my hand if the problem happens with those steps.
Más respuestas (0)
Ver también
Categorías
Más información sobre Logical 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!