如何在MATLAB中执行基于数组的求积法?

时间:2017-03-21 22:22:07

标签: matlab numerical-methods integral numerical-integration numerical-analysis

简介

考虑以下两个数组:

N = 100;  % for example

x(1:N) = [real values in ascending order];
y(1:N) = foo(x); 

我想计算y相对于x的积分。

我们假设y通常不是通过x的函数定义的(例如foo)。如果是这种情况,那么使用quad会很简单,这会对foo进行大量的函数调用。我明确地希望避免基于函数的求积法,因为在我的情况下,我只有xy,并且没有方便的函数(如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版本。

0 个答案:

没有答案