2017-04-10 177 views
-1

我正在做一项任务,要求我使用MATLAB中的trapz函数来评估积分。我相信我已经正确地编写了代码,但程序返回的答案是非常不正确的。我试图找到从01e^(-x^2)的积分。MATLAB trapz函数错误

x = linspace(0,1,2000); 
y = zeros(1,2000); 
for iCnt = 1:2000 
    y(iCnt) = e.^(-(x(iCnt)^2)); 
end 

a = trapz(y); 
disp(a); 

此代码返回当前

1.4929e+03 

我在做什么错误?

+0

从文档: “* trapz(Y)返回的Y通过梯形法**中的近似积分与单元间距***”。 –

+0

@OliverCharlesworth你能详细说明一下吗?我阅读文档,但我不明白单位间距是什么意思 – Luke

+0

你可能需要除以2000然后,呃? –

回答

1

你只是需要还可以指定x值:

x = linspace(0,1,2000); 
y = exp(-x.^2); 
a = trapz(x,y) 

a = 

    0.7468 

更多细节:

  • 首先,在MATLAB中可以使用的载体,以避免for循环执行对数组(向量)进行操作。因此,整个四行代码

    y =零(1,2000);对于iCnt = 1:2000 y(iCnt)= exp( - (x(iCnt)^ 2)); 结束

将被翻译成一条线:

y = exp(-x.^2) 
  • 你定义x = linspace(0,1,2000)这意味着你需要计算范围[0 1]给定函数的积分。因此,您计算y时会出现错误,将其返回至范围[1 2000],这就是为什么您得到了大数字的原因。

  • 此外,在MATLAB中,您应该使用exp在MATLAB中没有函数e。另外,如果在该范围内绘制函数,则会看到结果有意义,因为整个页面的面积都是1x1。

enter image description here

+0

这非常有帮助,谢谢! – Luke

+0

当然,没问题! – NKN