Octave支持五种不同的自适应求积算法来计算函数的积分f在的间隔内a到b。这些是
quad
基于高斯求积的数值积分。
quadv
使用自适应向量化Simpson规则的数值积分。
quadl
使用自适应Lobatto规则的数值积分。
quadgk
使用自适应高斯-康罗德规则的数值积分。
quadcc
使用自适应克伦肖-柯蒂斯规则的数值积分。
此外,还提供了以下函数:
integral
一个兼容性软件包函数,将在quadv
和quadgk
取决于被积函数和选择的参数。
trapz,cumtrapz
使用梯形方法对数据进行数值积分。
使用的最佳求积算法取决于被积函数。如果你有经验数据,而不是函数,那么选择是trapz
或cumtrapz
。如果您不确定integrand的属性,quadcc
将是最稳健的,因为它可以处理连续性、奇点、振荡函数和无限区间。当被积函数光滑时quadgk
可能是最快的算法。
作用 | 特点 | |
---|---|---|
quad | 非光滑被积函数精度低 | |
quadv | 具有平滑被积函数的中等精度 | |
数值积分 | 具有平滑被积函数的中等精度。比quadgk慢。 | |
四边形 | 中等精度(1e-6–1e-9),具有平滑的被积函数。 | |
处理振荡函数和无穷界 | ||
quadcc | 具有非光滑/平滑被积函数的低到高精度 | |
处理振荡函数、奇点和无限界 |
以下是使用的示例quad
集成函数
f(x) = x*罪(1/x)*sqrt(abs(1-x))
从…起x=0到x3.
这是一个相当困难的积分(绘制积分范围内的函数以了解原因)。
第一步是定义函数:
函数y=f(x)y=x.*sin(1./x).*sqrt(abs(1-x));结束函数
注意运算符的“点”形式的使用。这对于quad
积分器,但其他积分器需要。在任何情况下,它都可以更容易地生成一组用于绘制的点,因为可以使用向量参数调用函数来生成向量结果。
第二步是调用具有集成限制的quad:
[q,ier,nfun,err]=quad(“f”,0,3)⇒ 1.9819⇒ 1.⇒ 5061⇒ 1.1522e-07
虽然quad
返回的非零值ier,结果相当准确(要了解原因,请检查如果将下限移动到0.1、0.01、0.001等,结果会发生什么)。
函数f
可以是函数或函数句柄的字符串名称。这些参数使集成变得非常容易,而不必在m文件中完全定义函数。例如
#验证gamma函数=(n-1)!对于n=4f=@(x)x.^3.*exp(-x);quadcc(f,0,Inf)⇒ 6
q =
quad (f, a, b)
¶q =
quad (f, a, b, tol)
¶q =
quad (f, a, b, tol, sing)
¶[q, ier, nfev, err] =
quad (…)
¶用数字计算的积分f从…起a到b使用的Fortran子程序QUADPACK.
f是一个函数句柄、内联函数或包含要计算的函数名称的字符串。函数必须具有以下形式y=f(x)
这里的y和x是标量。
a和b是集成的下限和上限。或者两者都可能是无限的。
可选参数tol是一个向量,用于指定结果的精确性。向量的第一个元素是所需的绝对公差,第二个元素是期望的相对公差。要仅选择相对测试,请将绝对公差设置为零。要仅选择绝对测试,请将相对误差设置为零。两个公差都默认为sqrt(eps)
或大约1.5e-8。
可选参数唱是一个值的向量,在这个向量上,积分是奇异的。
集成的结果在中返回q.
ier包含一个整数错误代码(0表示集成成功)。
nfev指示已进行的函数评估的数量。
犯错误包含对解决方案中的误差的估计。
函数四边形参数(_O)
可以为设置其他可选参数quad
.
注意:因为quad
是用Fortran编写的,它不能以递归方式调用。这防止了它在通过子程序集成多个变量时使用dblqad
和三重积分
.
详见: 四边形参数(_O), quadv, 数值积分, 四边形, quadcc, 梯形公式, dblqad, 三重积分.
()
¶val =
quad_options (opt)
¶(opt, val)
¶查询或设置函数的参数quad
.
当在没有参数的情况下调用时,将显示所有可用参数的名称及其当前值。
给定一个参数,返回参数的值opt.
当用两个自变量调用时,四边形参数(_O)
设置参数opt到值val.
参数包括
绝对tolerance
绝对公差;对于纯相对误差测试可以是零。
相对tolerance
非负相对公差。如果绝对公差为零,则相对公差必须大于或等于最大值(50*eps,0.5e-28)
.
单精度绝对tolerance
单个精度的绝对公差;对于纯相对误差测试,可能为零。
单精度相对tolerance
单精度的非负相对公差。如果绝对公差为零,则相对公差必须大于或等于最大值(50*eps,0.5e-28)
.
q =
quadv (f, a, b)
¶q =
quadv (f, a, b, tol)
¶q =
quadv (f, a, b, tol, trace)
¶q =
quadv (f, a, b, tol, trace, p1, p2, …)
¶[q, nfev] =
quadv (…)
¶用数字计算的积分f从…起a到b使用自适应Simpson规则。
f是一个函数句柄、内联函数或字符串,其中包含要计算的函数的名称。quadv
是的向量化版本quad
以及从定义的函数f必须接受标量或向量作为输入,并返回标量、向量或数组作为输出。
a和b是集成的下限和上限。Bothlimits必须是有限的。
可选参数tol定义了用于停止自适应程序的绝对公差。默认值为1e-6。
使用的算法quadv
包括递归细分积分区间,并在每个子区间上应用Simpson规则。如果查出则在计算这些偏积分中的每一个之后显示:(1)函数求值的总数,(2)子区间的左端,(3)子区间长度,(4)积分在子区间上的近似值。
其他参数p1等,直接传递给函数f。使用的默认值tol和查出,可以通过空矩阵([])。
集成的结果在中返回q.
可选输出nfev表示执行的函数评估的总数。
笔记quadv
是用Octave的脚本语言编写的,可以在中递归使用dblqad
和三重积分
,不同于quad
作用
详见: quad, 数值积分, 四边形, quadcc, 梯形公式, dblqad, 三重积分, 完整的, integral2, integral3.
q =
quadl (f, a, b)
¶q =
quadl (f, a, b, tol)
¶q =
quadl (f, a, b, tol, trace)
¶q =
quadl (f, a, b, tol, trace, p1, p2, …)
¶[q, nfev] =
quadl (…)
¶用数字计算的积分f从…起a到b使用自适应Lobatto规则。
f是一个函数句柄、内联函数或字符串,其中包含要计算的函数的名称。函数f当给定输入值的向量时,必须进行向量化并返回输出值的向量。
a和b是集成的下限和上限。Bothlimits必须是有限的。
可选参数tol定义执行积分的绝对公差。默认值为1e-6。
使用的算法quadl
涉及递归细分积分区间。如果查出则定义每个子区间显示:(1)函数求值的总数,(2)子区间的左端,(3)子区间长度,(4)子区间上积分的近似值。
其他参数p1等,直接传递给函数f。使用的默认值tol和查出,可以通过空矩阵([])。
集成的结果在中返回q.
可选输出nfev表示执行的函数评估的总数。
参考文献:W.Gander和W.Gautschi,自适应正交-再谈,《双边投资协定》第40卷第1期,2000年3月,第84-101页。https://www.inf.ethz.ch/personal/gander/
详见: quad, quadv, 四边形, quadcc, 梯形公式, dblqad, 三重积分, 完整的, integral2, integral3.
q =
quadgk (f, a, b)
¶q =
quadgk (f, a, b, abstol)
¶q =
quadgk (f, a, b, abstol, trace)
¶q =
quadgk (f, a, b, "prop", val, …)
¶[q, err] =
quadgk (…)
¶用数字计算的积分f从…起a到b使用自适应高斯-克朗罗德求积。
f是一个函数句柄、内联函数或字符串,其中包含要计算的函数的名称。函数f当给定输入值的向量时,必须进行向量化并返回输出值的向量(详见属性ArrayValued
对于该规则的例外)。
a和b是集成的下限和上限。或者这两个极限都可以是无穷大的或者包含弱端奇点。变分转换将用于处理任何无限的区间,并削弱其语言性。例如
四边形(@(x)1./(sqrt(x).*(x+1)),0,Inf)
注意,被积函数的公式使用按元素运算符./
以及所有用户函数quadgk
也应该这样做。
可选参数弃权定义用于停止集成过程的绝对公差。默认值为1e-10(1e-5表示单个)。
使用的算法quadgk
包括细分积分区间并评估每个子区间。如果查出如果为true,则在计算这些偏积分中的每一个之后显示:(1)这一步的子区间数,(2)误差的当前估计犯错误,(3)积分的当前估计q.
可以通过将参数传递到来配置算法的行为quadgk
成对道具, val
。有效属性为
AbsTol
定义正交的绝对误差容限。默认绝对公差为1e-10(1e-5表示单个)。
RelTol
定义正交的相对误差容限。默认的相对公差为1e-6(1e-4表示单个)。
数组值
当设置为true时,函数f为scalarinput生成数组输出。默认值为false,这需要f生成与输入大小相同的输出。例如
四边形(@(x)x.^(1:5),0,2,“数组值”,1)
将整合[x.^1,x.^2,x.^3,x.^4,x.^5]
在一个函数调用中,而不必重复定义单个匿名函数并使用的正常调用quadgk
.
WayPoints
指定将成为算法中子区间端点的点,这可以显著改进积分中误差的估计,加快计算速度,或两者兼而有之。在被积函数快速变化的区域周围指定更多的子区间,或者在函数的一阶导数中存在不连续的标志位置,这可能很有用。例如,signum函数在x==0
并通过指定一个航路点
quadgk(@(x)符号(x),-0.5,1,“航路点”,[0])
误差范围从4e-7减小到1e-13。
如果函数具有奇点在一体化区域内,这些问题不应通过航路点来解决。相反,应该将整体积分分解为几个较小积分的总和,以便在调用时将其作为积分的边界之一quadgk
.
如果任何一个航路点是复杂的,则执行轮廓积分,如下所述。
最大间隔计数
quadgk
最初将执行正交的间隔细分为10个间隔,或者,如果给定了路点,则在每个路点细分。具有不可接受误差的子区间被细分并重新评估。如果子区间的数量在任何点超过650个子区间,则用信号通知收敛性差,并且返回积分的当前估计。该属性MaxIntervalCount
可用于更改退出前可能存在的子间隔数。
查出
如果逻辑正确quadgk
在每次迭代时打印关于正交收敛的信息。
如果有a, b或航点是复杂的,则正交被视为沿着从定义的分段线性路径的轮廓积分[a, 航点1.航点2.b]
在这种情况下,假设积分不具有边奇点。例如,
quadgk(@(z)log(z),1+1i,1+1i,“WayPoints”,[-1+1i,-1-1i,+1-1i])
集成log(z)
沿着从定义的正方形[1+1i,-1+1i,-1-1i,+1-1i]
.
集成的结果在中返回q.
犯错误是积分误差的近似界abs(q- 我)
这里的我是积分的确切值。如果自适应积分没有收敛,则的值犯错误将大于所指定的公差。如果只指定一个输出,则当未满足要求的公差时,将报警告。如果第二个输出犯错误则报警告,程序员有责任检查并确定结果是否令人满意。
参考文献:L.F.Shampine,向量化自适应正交MATLAB,《计算和应用数学杂志》,第131–140页,第211卷,第2期,2008年2月。
详见: quad, quadv, 数值积分, quadcc, 梯形公式, dblqad, 三重积分, 完整的, integral2, integral3.
q =
quadcc (f, a, b)
¶q =
quadcc (f, a, b, tol)
¶q =
quadcc (f, a, b, tol, sing)
¶[q, err, nr_points] =
quadcc (…)
¶用数字计算的积分f从…起a到b使用双自适应Clenshaw-Curtis求积。
f是一个函数句柄、内联函数或字符串,其中包含要计算的函数的名称。函数f必须向量化,并且如果给定输入值的向量,则必须返回输出值的向量。例如
f=@(x)x.*sin(1./x).*sqrt(abs(1-x));
它对所有运算符使用按元素的“点”形式。
a和b是集成的下限和上限。任何一个或两个极限都可能是无限的。quadcc
通过用替换积分变量来处理无限极限x=tan(pi/2*u)
.
可选参数tol是一个1元或2元向量,用于指定所需的结果精度。向量的第一个元素是期望的绝对公差,第二个元素是所需的相对公差。要仅选择相对测试,请将绝对公差设置为零。要仅选择绝对测试,请将相对公差设置为零。默认绝对公差为1e-10(1e-5表示单个),默认相对公差为1e-6(1e-4表示单个)。
可选参数唱包含被积函数在积分区间内具有已知奇点或其任何导数中的不连续性的点的列表。对于上面具有不连续性atx=1的示例,调用quadcc
将如下
int=quadcc(f,a,b,[],[1]);
集成的结果在中返回q.
犯错误是绝对积分误差的估计值。
nr_点是评估被积函数的点数。
如果自适应积分没有收敛,则的值犯错误将迟于所要求的公差。如果只指定一个输出,当不满足指定的公差时,将报警告。如果第二个输出犯错误则不报警告,程序员有责任检查并确定结果是否令人满意。
quadcc
能够处理积分的非数值,例如NaN
或Inf
.如果积分发散,并且quadcc
检测到此情况,则会报警告,并且Inf
或-Inf
恢复。
笔记quadcc
是一种通用的求积算法,因此,与其他方法(如quadgk
.
该算法在每个区间中使用增加次数的Clenshaw-Curtis求积规则,如果函数看起来不光滑或达到了最大次数规则,则将区间一分为二。误差估计是根据被积函数在相应正交规则的节点上的两个连续插值之间的差的L2范数来计算的。
参考文献:P.Gonnet,使用显式插值提高自适应求积的可靠性,ACM数学软件汇刊,第37卷,第3期,文章编号:32010。
q =
integral (f, a, b)
¶q =
integral (f, a, b, prop, val, …)
¶[q, err] =
integral (…)
¶用数字计算的积分f从…起a到b使用自适应正交。
integral
是的软件包器quadcc
(一般实数、标量积分和极限),以及quadgk
(具有指定积分路径和数组值被积函数的积分),旨在提供MATLAB兼容性。通过直接调用各种求积函数,可以对数值积分进行更多的控制。
f是一个函数句柄、内联函数或字符串,其中包含要计算的函数的名称。函数f当给定输入值的向量时,必须进行向量化并返回输出值的向量。
a和b是集成的下限和上限。或者这两个极限都可以是无穷大的或者包含弱端奇点。如果其中一个或两个极限都是复杂的,integral
将执行直行径积分。或者,可以使用指定复杂域路径航路点
参数(见下文)。
可以使用指定其他可选参数属性, value
对。有效属性为:
路点
指定要在定义象限算法的子区间时使用的点,或者如果a, b或航点是复杂的,则正交被计算为沿着分段连续路径的轮廓积分。有关更多详细信息,详见quadgk
.
数组值
integral
期望f返回标量值,除非数组值被指定为true。此参数将导致integral
在整个数组上执行集成并返回q与返回的尺寸相同f。有关详细信息,详见quadgk
.
AbsTol
定义正交的绝对误差容限。默认绝对公差为1e-10(1e-5表示单个)。
RelTol
定义正交的相对误差容限。默认的相对公差为1e-6(1e-4表示单个)。
可选输出犯错误包含被调用的积分器使用的绝对误差估计。
自适应求积用于最小化误差估计,直到满足以下条件:
错误<=最大值(AbsTol, RelTol*|q|).
已知MATLAB不兼容性:
single
,则Octave的积分函数会自动减少上面指定的默认绝对和相对误差容限。如果需要更严格的公差,则必须指定公差。MATLAB使更严格的公差适用于double
输入到位,而不考虑集成极限的类别。详见: integral2, integral3, quad, 四边形, quadv, 数值积分, quadcc, 梯形公式, dblqad, 三重积分.
有时一个人没有函数,而只有原始的(x,y)点来执行积分。在实验中收集数据时可能会出现这种情况。这个trapz
函数可以对这些值进行积分,如以下示例所示,其中“数据”已在范围[0,pi/2)上的余弦函数上收集。
x=0:0.1:pi/2;#均匀间隔点sy=cos(x);trapz(x,y)⇒ 0.99666
答案相当接近1的精确值。普通象限对被积函数的属性很敏感。经验积分不仅取决于被积函数,还取决于为表示函数而选择的特定点。用正弦函数在[0,pi/2)范围内重复上面的例子会返回差得多的结果。
x=0:0.1:pi/2;#均匀间隔点sy=sin(x);trapz(x,y)⇒ 0.92849
然而,数据点的选择略有不同会显著改变结果。相同的积分,相同的点数,但间隔不同,可以得到更准确的答案。
x=林空间(0,pi/2,16);#均匀间隔,但包括端点y=sin(x);trapz(x,y)⇒ 0.99909
一般来说,可能无法知道一段时间内点的最佳分布。或者这些点可能来自一个实验,在这个实验中没有选择最佳分布的自从。在任何情况下,使用时都必须意识到这个问题trapz
.
q =
trapz (y)
¶q =
trapz (x, y)
¶q =
trapz (…, dim)
¶用数字计算点的积分y使用梯形法。
trapz(y)
计算的积分y沿着第一个非单例维度。当参数x被省略了一个相等的空格x假设具有单位间距(1)的向量。trapz(x, y)
针对中的间距计算积分x和中的值y。如果点siny采样不均。
如果可选dim给定参数,沿此维度操作。
应用说明:如果x如果未指定,则将使用单位间距。要将积分缩放到正确的值,必须乘以实际间距值(deltaX)。例如,的积分x^3在[0,1]范围内是x^4/4或0.25。以下代码使用trapz
以三种不同的方式计算积分。
x=0:0.1:1;y=x.^3;##无刻度q=trapz(y)⇒ q=2.5250##按比例q*0.1近似积分⇒ 0.25250##指定相同结果xtrapz(x,y)⇒ 0.25250
详见: 累计梯形积分.
q =
cumtrapz (y)
¶q =
cumtrapz (x, y)
¶q =
cumtrapz (…, dim)
¶点的累积数值积分y使用梯形法。
cumtrapz(y)
计算的累积积分y沿着第一非单例维度。这里的trapz
仅返回整体积分和,cumtrapz
返回的每个点的当前部分总和y.
当参数x省略了等间距x假设具有单位间距(1)的向量。cumtrapz(x, y)
评估中关于间距的积分x和中的值y。如果中的点y已经过不均匀的采样。
如果可选dim给定参数,沿此维度操作。
应用说明:如果x如果未指定,则将使用单位间距。要将积分缩放到正确的值,必须乘以实际间距值(deltaX)。
版权所有 © 2024 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号