考虑以下两个数组:
N = 100; % for example
x(1:N) = [real values in ascending order];
y(1:N) = foo(x);
我想计算y
相对于x
的积分。
我们假设y
通常不是通过x
的函数定义的(例如foo
)。如果是这种情况,那么使用quad
会很简单,这会对foo
进行大量的函数调用。我明确地希望避免基于函数的求积法,因为在我的情况下,我只有x
和y
,并且没有方便的函数(如foo
)来评估。
请注意,我还假设foo
是一个表现良好的函数:在整个域[min(x), max(x)]
中连续且可微分。 foo(x)
的示例包括sin(x)
,exp(x)
,sqrt
(如果min(x)>0
),x^2
等。当然,这些示例功能可以很容易地通过分析进行集成,但我们不会从中学到任何东西。 :-)
trapz
我可以通过梯形法通过trapz
:
result = trapz( x, y );
我知道有很多方法可以比trapz
方法更准确地估算这个积分,例如使用Simpson's Rule。另一种方法可能是整合插值勒让德多项式或样条。我想也有其他聪明的方法。
除了 trapz
之外,使用MATLAB 来估算此积分的更好方法是什么?在典型的准确度/性能方面,它与trapz
的比较如何?
注意:由于至少R2014b,quad
被标记为弃用,而有利于integral
。其他人可能有助于指定答案适用的MATLAB版本。