23.1单变量函数

Octave支持五种不同的自适应求积算法来计算函数的积分f在的间隔内ab。这些是

quad

基于高斯求积的数值积分。

quadv

使用自适应向量化Simpson规则的数值积分。

quadl

使用自适应Lobatto规则的数值积分。

quadgk

使用自适应高斯-康罗德规则的数值积分。

quadcc

使用自适应克伦肖-柯蒂斯规则的数值积分。

此外,还提供了以下函数:

integral

一个兼容性软件包函数,将在quadvquadgk取决于被积函数和选择的参数。

trapz,cumtrapz

使用梯形方法对数据进行数值积分。

使用的最佳求积算法取决于被积函数。如果你有经验数据,而不是函数,那么选择是trapzcumtrapz。如果您不确定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从…起ab使用的Fortran子程序QUADPACK.

f是一个函数句柄、内联函数或包含要计算的函数名称的字符串。函数必须具有以下形式y=f(x)这里的yx是标量。

ab是集成的下限和上限。或者两者都可能是无限的。

可选参数tol是一个向量,用于指定结果的精确性。向量的第一个元素是所需的绝对公差,第二个元素是期望的相对公差。要仅选择相对测试,请将绝对公差设置为零。要仅选择绝对测试,请将相对误差设置为零。两个公差都默认为sqrt(eps)或大约1.5e-8。

可选参数是一个值的向量,在这个向量上,积分是奇异的。

集成的结果在中返回q.

ier包含一个整数错误代码(0表示集成成功)。

nfev指示已进行的函数评估的数量。

犯错误包含对解决方案中的误差的估计。

函数四边形参数(_O)可以为设置其他可选参数quad.

注意:因为quad是用Fortran编写的,它不能以递归方式调用。这防止了它在通过子程序集成多个变量时使用dblqad三重积分.

详见: 四边形参数(_O), quadv, 数值积分, 四边形, quadcc, 梯形公式, dblqad, 三重积分.

 
: quad_options ()
: val = quad_options (opt)
: quad_options (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从…起ab使用自适应Simpson规则。

f是一个函数句柄、内联函数或字符串,其中包含要计算的函数的名称。quadv是的向量化版本quad以及从定义的函数f必须接受标量或向量作为输入,并返回标量、向量或数组作为输出。

ab是集成的下限和上限。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从…起ab使用自适应Lobatto规则。

f是一个函数句柄、内联函数或字符串,其中包含要计算的函数的名称。函数f当给定输入值的向量时,必须进行向量化并返回输出值的向量。

ab是集成的下限和上限。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从…起ab使用自适应高斯-克朗罗德求积。

f是一个函数句柄、内联函数或字符串,其中包含要计算的函数的名称。函数f当给定输入值的向量时,必须进行向量化并返回输出值的向量(详见属性ArrayValued对于该规则的例外)。

ab是集成的下限和上限。或者这两个极限都可以是无穷大的或者包含弱端奇点。变分转换将用于处理任何无限的区间,并削弱其语言性。例如

四边形(@(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从…起ab使用双自适应Clenshaw-Curtis求积。

f是一个函数句柄、内联函数或字符串,其中包含要计算的函数的名称。函数f必须向量化,并且如果给定输入值的向量,则必须返回输出值的向量。例如

f=@(x)x.*sin(1./x).*sqrt(abs(1-x));

它对所有运算符使用按元素的“点”形式。

ab是集成的下限和上限。任何一个或两个极限都可能是无限的。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能够处理积分的非数值,例如NaNInf.如果积分发散,并且quadcc检测到此情况,则会报警告,并且Inf-Inf恢复。

笔记quadcc是一种通用的求积算法,因此,与其他方法(如quadgk.

该算法在每个区间中使用增加次数的Clenshaw-Curtis求积规则,如果函数看起来不光滑或达到了最大次数规则,则将区间一分为二。误差估计是根据被积函数在相应正交规则的节点上的两个连续插值之间的差的L2范数来计算的。

参考文献:P.Gonnet,使用显式插值提高自适应求积的可靠性,ACM数学软件汇刊,第37卷,第3期,文章编号:32010。

详见: quad, quadv, 数值积分, 四边形, 梯形公式, dblqad, 三重积分.

 
: q = integral (f, a, b)
: q = integral (f, a, b, prop, val, …)
: [q, err] = integral (…)

用数字计算的积分f从…起ab使用自适应正交。

integral是的软件包器quadcc(一般实数、标量积分和极限),以及quadgk(具有指定积分路径和数组值被积函数的积分),旨在提供MATLAB兼容性。通过直接调用各种求积函数,可以对数值积分进行更多的控制。

f是一个函数句柄、内联函数或字符串,其中包含要计算的函数的名称。函数f当给定输入值的向量时,必须进行向量化并返回输出值的向量。

ab是集成的下限和上限。或者这两个极限都可以是无穷大的或者包含弱端奇点。如果其中一个或两个极限都是复杂的,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不兼容性:

  1. 如果未指定公差,并且任何积分极限或路点都属于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号