无法使用梯形规则得到正确的结果

时间:2017-09-16 18:57:32

标签: matlab

我的教授希望我使用matlab来获取梯形规则来近似v=-300*t.^2+2700*t t=[0:dt:9]dt=0.1下的区域。我不能使用函数trapz

我尝试使用

v1=v(1:end-1)
v2=v(2:end)
x_total=1/2*range(t)*dt*sum(v1+v2)

但最终以

结束
x_total =

3.2801e+05

远不及实际面积36450

此外,我手动计算了子区间10的梯形规则并获得了36085.5。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

梯形公式不涉及范围(t)。步长dt已经反映了间隔的长度。所以,使用

0.5*dt*sum(v(1:end-1) + v(2:end))

答案 1 :(得分:0)

如果我没记错的话,曲线下的面积是从x = a0到x = a1的f(x)的黎曼和,它近似等于周期为dt的矩形区域的总和。 SOOO ...

sum(v(:) .* dt)

这也和其他人一样得到了同样的答案。

抱歉,我有一个快速的约会,四十岁,还有烟......

哎呀,我的坏。如果答案相同,则以下内容为零。

sum(v(:) * dt) - 0.5*dt*sum(v(1:end-1) + v(2:end)) = 7.27596e-12

所以,我比较了答案:     Answer_A = 36450 - 0.5 * dt * sum(v(1:end-1)+ v(2:end));     Answer_B = 36450 - sum(v(:) * dt);

% Answer_X defines the difference from the truth
% If Answer_A < Answer_B
%    "0.5*dt*sum(v(1:end-1) + v(2:end))" is closer to truth
% elseif Answer_A > Answer_B
%    "sum(v(:) * dt)" is closer to truth

Answer_A < Answer_B   resolves false
Answer_A > Answer_B   resolves true

我会回答我的回答,除非有问题,这不是真的。也许上面的内容是不必要的,考虑到解决方案之间的差异是正数,当从另一个中减去我的时候。

sum(v(:) * dt

我有兴趣看到你的作品,如图片或其他什么,找到你可能出错的地方获得36085.5

此外,这是trapz的路径。我知道你不允许使用它,但文件是明文ascii dot m。然后你就可以了解matlab是如何做到的,并根据你的需要使用相关部分。

${MATLAB_APP_PATH}/toolbox/matlab/datafun/trapz.m
可疑的作弊是我的游戏:)

此外,函数trapz()似乎与平均值(Answer_A + Answer_B)/ 2完全一致