メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

int

定積分および不定積分

説明

F = int(expr) は、シンボリック式 expr の積分を計算します。積分の範囲が指定されていないため、この構文は不定積分を計算します。int は、symvar(expr,1) により決定される既定の積分変数を使用します。expr が定数の場合、既定の積分変数は x です。

F = int(expr,var) は、シンボリック スカラー変数 var について expr の不定積分を計算します。

F = int(expr,a,b)a から b までの expr の定積分を計算します。int は、symvar(expr,1) により決定される既定の積分変数を使用します。expr が定数の場合、既定の積分変数は x です。

関数 int(expr,[a b]) は、関数 int(expr,a,b) と等価です。

F = int(expr,var,a,b) では、シンボリックなスカラー変数 var について a から b までの expr の定積分を計算します。

関数 int(expr,var,[a b]) は、関数 int(expr,var,a,b) と等価です。

F = int(___,Name=Value) は、1 つ以上の Name=Value 引数を使用して追加のオプションを指定します。たとえば、IgnoreAnalyticConstraints=true を指定すると、int は被積分に対して追加の単純化を適用します。

メモ

関数 int は、積分をシンボリックに計算するもので、MATLAB® の整数データ型とは関係ありません。積分の詳細については整数 を参照してください。

すべて折りたたむ

一変数の式を定義します。

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

一変数の式の不定積分を求めます。

F = int(expr)
F = 

1x2+1

変数 x および z をもつ多変数関数を定義します。

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

シンボリック式を 0 から 1 まで積分します。

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

積分を直接近似するには、vpa の代わりにvpaintegralを使用します。関数 vpaintegral はより高速で、積分の許容誤差を制御します。

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

4 つの式を要素として含むシンボリック行列を定義します。

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 では厳密な数学的ルールが使用されます。このルールにより、int では acos(cos(x))x として書き換えることができません。

単純で実用的な解を求めるには、IgnoreAnalyticConstraintstrue に設定します。

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 のすべての値について一般的な結果を返します。この例では、intt=-1 の場合および t-1 の場合について 2 つの積分結果を返します。

特定の場合のパラメーター値を無視するには、IgnoreSpecialCasestrue に設定します。このオプションを使用すると、intt=-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=0 から x=2 までの定積分を計算します。積分区間に極が含まれているため、結果は定義されません。

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

ただし、コーシー主値積分は存在します。コーシー主値積分を計算するには、PrincipalValuetrue に設定します。

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) を多項式として近似できます。taylor を適用して、被積分関数 f(x)x=0 付近の多項式として展開します。近似された多項式の積分を計算します。

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

x95670-x790-x515+x

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

x1056700-x8720-x690+x22

3 次元空間のベクトル場を定義します。

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)

r(t) によってパラメーター化された曲線 C に沿ったベクトル場 F の線積分は、次のように定義されます。

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

ここで、演算子 はスカラー積を示します。

この定義を使用して、t=-5 から t=5 までのパラメーター化された曲線 r(t) に沿ったベクトル場の線積分を計算します。

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 を引用符で囲みます。

被積分関数に対して純粋に代数的な単純化を適用するかどうかのインジケーター。true または false として指定します。値が true である場合は、純粋に代数的な単純化が被積分関数に適用されます。このオプションを使用すると、この積分器を直接使用した場合に複雑な結果が返されるような式に対して、比較的単純な結果が返されます。場合によっては、他の方法では計算不可能な積分を int で計算できるようにもなります。

このオプションを使用すると、一般的に有効でない結果となる場合があります。このオプションは数学的恒等を適用します。便利ですが、変数のすべての値について結果が成り立つとは限りません。詳細については、アルゴリズムを参照してください。

特殊なケースを無視するかどうかのインジケーター。true または false で指定します。これにより、1 つ以上のパラメーターが、固定値の有限集合や整数の集合など、比較的小さい集合の要素であることを必要とするケースは無視されます。

主値を返すかどうかのインジケーター。true または false として指定します。値が true である場合、int はコーシーの主値積分を計算します。ライブ スクリプトでは、未評価のコーシー主値積分が Cauchy principal value notation 記号で表示されます。

未評価積分のインジケーター。true または false として指定します。値が 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 が数値でない場合、明示的に指定しない限り、inta <= 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 によって以下のルールのいくつかが適用されます。

  • 任意の a および b について、log(a) + log(b) = log(a·b) が成り立つ。特に、abc のすべての値に対して、次の等式が有効である。

    (a·b)c = ac·bc.

  • 任意の a および b について、log(ab) = b·log(a) が成り立つ。特に、abc のすべての値に対して、次の等式が有効である。

    (ab)c = ab·c.

  • f および g が標準的な数学関数、かつ任意の微小な正数について f(g(x)) = x である場合、すべての複素数値 x に対して f(g(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 より前に導入

すべて展開する