我的教授希望我使用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。
我做错了什么?
答案 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完全一致