【发布时间】:2014-08-21 08:48:33
【问题描述】:
我正在尝试使用数值方法中的复合梯形规则创建一个函数来计算积分。但问题是,当我要检查输入数据点是否等距时,出现了错误。因为浮点数。 这是我的代码
function answer = composite_trapezoidal (X, Y)
lx = length(X);
ly = length(Y);
h = X(2) - X(1);
validity = 1;
series_sum = 0;
answer = 0;
if (lx ~= ly)
fprintf('Error ! Dimensions Of Data Point Vectors Doesn''t Match\n');
else
for i = 1:lx - 1
hTmp = X(i + 1) - X(i);
if (hTmp ~= h)
validity = 0;
fprintf('Invalid Data Points. Data Must Be Equally Spaced !\n');
break;
end
end
end
if (validity == 1)
for i = 2:lx - 1
series_sum = series_sum + Y(i);
end
answer = (h / 2) * (2 * series_sum + Y(1) + Y(ly));
end
考虑输入x = linspace(0, 2, 7);
然后函数以“数据点不等间距”终止。但问题是它们是使用 linspace 计算的。
我能理解这个问题。点数为 0、0.3333333、0.6666667 等。因此在四舍五入时它们的间距不相等。但问题是我们能解决这个问题吗?
【问题讨论】:
标签: matlab floating-point comparison numerical-methods numerical-integration