How do I avoid errors due to round-off in Matlab?
4 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Bruno Luong
2018-10-15
t=linspace(0,tend,Nt);
3 个评论
Bruno Luong
2018-10-15
编辑:Bruno Luong
2018-10-15
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
2018-10-15
编辑:Bruno Luong
2018-10-15
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.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!