主要内容

int

定积分和不定积分

说明

F = int(expr) 计算符号表达式 expr 的积分。由于您未指定积分的界限,因此此语法计算不定积分。int 使用由 symvar(expr,1) 确定的默认积分变量。如果 expr 是常数,则默认积分变量是 x

示例

F = int(expr,var) 计算 expr 关于符号标量变量 var 的不定积分。

示例

F = int(expr,a,b) 计算 exprab 的定积分。int 使用由 symvar(expr,1) 确定的默认积分变量。如果 expr 是常数,则默认积分变量是 x

int(expr,[a b]) 等效于 int(expr,a,b)

示例

F = int(expr,var,a,b) 计算 expr 关于符号标量变量 varab 的定积分。

int(expr,var,[a b]) 等效于 int(expr,var,a,b)

示例

F = int(___,Name=Value) 使用一个或多个 Name=Value 参量指定附加选项。例如,IgnoreAnalyticConstraints=true 指定 int 对被积函数应用额外的简化。

注意

int 函数以符号形式计算积分,它与 MATLAB® 中的整数数据类型无关。有关整数的详细信息,请参阅整数

示例

示例

全部折叠

定义一个一元表达式。

syms x
expr = -2*x/(1+x^2)^2;

求该一元表达式的不定积分。

F = int(expr)
F = 

1x2+1

定义一个包含变量 xz 的多元函数。

syms x z
f(x,z) = x/(1+z^2);

求该多元表达式关于变量 xz 的不定积分。

Fx = int(f,x)
Fx(x, z) = 

x22z2+1

Fz = int(f,z)
Fz(x, z) = xatan(z)

如果您不指定积分变量,则 int 使用 symvar 返回的第一个变量作为积分变量。

var = symvar(f,1)
var = x
F = int(f)
F(x, z) = 

x22z2+1

计算一个符号表达式从 01 的积分。

syms x
expr = x*log(1+x);
F = int(expr,[0 1])
F = 

14

计算另一个表达式从 sin(t)1 的积分。

syms t
F = int(2*x,[sin(t) 1])
F = cos(t)2

int 无法计算定积分的值时,使用 vpa 对积分进行数值近似计算。

syms x
f = cos(x)/sqrt(1 + x^2);
Fint = int(f,x,[0 10])
Fint = 

010cos(x)x2+1 dx

Fvpa = vpa(Fint)
Fvpa = 0.37570628299079723478493405557162

要直接进行近似积分计算,请使用 vpaintegral 而不是 vpavpaintegral 函数计算速度更快,并且可以控制积分容差。

Fvpaint = vpaintegral(f,x,[0 10])
Fvpaint = 0.375706

定义一个包含四个表达式作为其元素的符号矩阵。

syms a t
M = [exp(t) exp(a*t); sin(t) cos(t)]
M = 

(eteatsin(t)cos(t))

对该矩阵的每个元素求不定积分。

F = int(M,t)
F = 

(eteata-cos(t)sin(t))

定义一个符号函数并计算其不定积分。

syms f(x)
f(x) = acos(cos(x));
F = int(f,x)
F(x) = 

xacos(cos(x))-x22sign(sin(x))

默认情况下,int 遵循严格的数学规则。这些规则不允许 intacos(cos(x)) 重写为 x

如果您想要简单实用的解,请将 IgnoreAnalyticConstraints 设置为 true

F = int(f,x,IgnoreAnalyticConstraints=true)
F(x) = 

x22

定义一个符号表达式 xt 并计算其关于变量 x 的不定积分。

syms x t
F = int(x^t,x)
F = 

{log(x) if  t=-1xt+1t+1 if  t-1

默认情况下,int 会返回适用于另一个符号参数 t 的所有值的通用结果。在此示例中,int 针对 t=-1t-1 时的情况返回两个积分结果。

要忽略参数值的特殊情况,请将 IgnoreSpecialCases 设置为 true。启用此选项,int 会忽略特殊情况 t=-1,并返回 t-1 时的解。

F = int(x^t,x,IgnoreSpecialCases=true)
F = 

xt+1t+1

定义一个在 x=1 处有极点的符号函数 f(x)=1/(x-1)

syms x
f(x) = 1/(x-1)
f(x) = 

1x-1

计算此函数从 x=0x=2 的定积分。由于积分区间包含极点,因此结果未定义。

F = int(f,[0 2])
F = NaN

然而,积分的柯西主值存在。要计算积分的柯西主值,请将 PrincipalValue 设置为 true

F = int(f,[0 2],PrincipalValue=true)
F = 0

x ex dx 的积分。

通过将 Hold 选项设置为 true,定义积分而不对其进行计算。

syms x g(y)
F = int(x*exp(x),Hold=true)
F = 

xex dx

您可以使用 integrateByParts 函数对 F 应用分部积分。使用 exp(x) 作为要积分的微分。

G = integrateByParts(F,exp(x))
G = 

xex-ex dx

要计算 G 中的积分,请使用 release 函数忽略 Hold 选项。

Gcalc = release(G)
Gcalc = xex-ex

将结果与未设置 Hold 选项时由 int 返回的积分结果进行比较。

Fcalc = int(x*exp(x))
Fcalc = exx-1

如果 int 无法计算积分的封闭形式,则它将返回未求解的积分。

syms f(x)
f(x) = sin(sinh(x));
F = int(f,x)
F(x) = 

sin(sinh(x)) dx

您可以通过泰勒展开将被积函数 f(x) 近似表示为多项式。应用 taylorx=0 附近将被积函数 f(x) 展开为多项式。计算近似多项式的积分。

fTaylor = taylor(f,x,ExpansionPoint=0,Order=10)
fTaylor(x) = 

x95670-x790-x515+x

Fapprox = int(fTaylor,x)
Fapprox(x) = 

x1056700-x8720-x690+x22

定义一个三维空间中的向量场。

syms x y z
F(x,y,z) = [x^2*y*z; x*y; 2*y*z]
F(x, y, z) = 

(x2yzxy2yz)

接下来,定义一条参数化曲线。

syms t real
rx(t) = sin(t);
ry(t) = cos(t);
rz(t) = t;
r(t) = [rx; ry; rz]
r(t) = 

(sin(t)cos(t)t)

向量场 F 沿由 r(t) 参数化的曲线 C 的线积分定义为

CFdr=abF(r(t))dr(t)dtdt,

其中运算符 表示标量积。

使用此定义计算该向量场沿参数化曲线 r(t)t=-5t=5 的线积分。

drdt = diff(r(t),t);
integrand = dot(F(rx,ry,rz),drdt);
W = int(integrand,t,[-5,5])
W = 

-2sin(5)33

输入参数

全部折叠

被积函数,指定为符号表达式、符号函数、符号向量、符号矩阵或符号数。

积分变量,指定为符号变量。如果您不指定此变量,int 会使用由 symvar(expr,1) 确定的默认变量。如果 expr 是常数,则默认变量是 x

下界,指定为数字、符号数、符号变量、符号表达式或符号函数(包括具有无限值的表达式和函数)。

上界,指定为数字、符号数、符号变量、符号表达式或符号函数(包括具有无限值的表达式和函数)。

名称-值参数

全部折叠

将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

示例: IgnoreAnalyticConstraints=true 指定 int 对被积函数应用纯代数简化。

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

对被积函数应用纯代数简化的指示符,指定为 truefalse。如果值为 true,则对被积函数应用纯代数简化。对于直接使用积分器返回复杂结果的表达式,此选项可以提供更简单的结果。在某些情况下,它还允许 int 计算以其他方式无法计算的积分。

使用此选项可能会导致结果并非在所有情况下都成立。此选项应用方便的数学恒等式,但结果并不总是适用于变量的所有值。有关详细信息,请参阅算法

忽略特殊情况的指示符,指定为 truefalse。启用此选项会忽略需要一个或多个参数是相对较小集合(例如固定有限集或整数集)的元素的情况。

返回主值的指示符,指定为 truefalse。如果值为 true,则 int 计算积分的柯西主值。在实时脚本中,未计算积分的柯西主值显示为 Cauchy principal value notation 符号。

未计算积分的指示符,指定为 truefalse。如果值为 true,则 int 返回未进行计算的积分。

提示

  • 与微分相比,符号积分是一项更为复杂的任务。如果 int 无法计算某个表达式的积分,可检查以下原因:

    • 原函数不存在封闭形式。

    • 原函数存在,但 int 无法找到它。

    如果 int 无法计算积分的封闭形式,它将返回未求解的积分。

    对于一些有封闭形式解的积分,如果这些解很复杂且 int 返回未求解的积分,您可以使用 simplify 来获得封闭形式的解。例如,以下代码求 f(x) 的积分的封闭形式解:

    syms x
    f(x) = x*log(x/2+sqrt(x^2+1));
    F = int(f,x)
    simplify(F,Steps=10)

    除此以外,您可以尝试使用以下方法之一来近似计算未求解的积分:

    • 对于不定积分,使用级数展开。使用此方法在变量的特定值附近对积分进行近似计算。

    • 对于定积分,使用数值近似计算。

  • 对于不定积分,int 不会在结果中返回积分常数。对数学上等价的表达式进行积分时,其结果可能不同。例如,syms x; int((x+1)^2) 返回 (x+1)^3/3,而 syms x; int(x^2+2*x+1) 返回 (x*(x^2+3*x+3))/3,它与第一个结果相差 1/3

  • 对于不定积分,int 隐式假设积分变量 var 是实数。对于定积分,int 将积分变量 var 限制在指定的积分区间内,除非该区间与现有假设不相符。如果积分界限 ab 中的一者或两者不是数值,int 会假设 a <= b,除非您显式指定其他情况。

    例如,在默认假设 a <= b 下,此代码在 (a,b)=(3,2) 区间计算定积分时返回结果为 0。

    syms x a b
    F(a,b) = int(heaviside(x-1)*heaviside(4-x),a,b);
    F(3,2)
    ans = 
    0
    如果您显式指定假设 a > b,则以下代码返回积分结果为 –1。
    assume(a > b)
    F(a,b) = int(heaviside(x-1)*heaviside(4-x),a,b);
    F(3,2)
    ans = 
    -1

算法

使用 IgnoreAnalyticConstraints 时,int 会应用以下一些规则:

  • 对于 ab 的所有值,有 log(a) + log(b) = log(a·b) 。特别地,对于 abc 的所有值,以下等式成立:

    (a·b)c = ac·bc.

  • 对于 ab 的所有值,有 log(ab) = b·log(a) 。特别地,对于 abc 的所有值,以下等式成立:

    (ab)c = ab·c.

  • 如果 fg 是标准数学函数,并且对于所有小正数都有 f(g(x)) = x,则假设 f(g(x)) = x 对于所有的复数值 x 都成立。特别地:

    • log(ex) = x

    • asin(sin(x)) = x, acos(cos(x)) = x, atan(tan(x)) = x

    • asinh(sinh(x)) = x, acosh(cosh(x)) = x, atanh(tanh(x)) = x

    • 对于朗伯 W 函数的所有分支索引 k,都有 Wk(x·ex) = x

版本历史记录

在 R2006a 之前推出

全部展开