ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

積分

f がシンボリック式の場合、

int(f)

は、diff(F) = f となる別のシンボリック式 F を求めようとするものです。つまり、int(f) は、f の不定積分 (閉形式で存在する場合) を返します。微分と同様に、

int(f,v)

は、symvar で決められる変数ではなく、シンボリック オブジェクト v を、積分変数として使います。次の表に int の使い方を示します。

数学的演算

MATLAB® コマンド

int(x^n) または int(x^n,x)

int(sin(2*x), 0, pi/2) または int(sin(2*x), x, 0, pi/2)

g  =  cos(at + b)

g = cos(a*t + b) int(g) または int(g, t)

int(besselj(1, z)) または int(besselj(1, z), z)

微分とは対照的に、シンボリックな積分はより複雑な作業です。多くの難問が、積分の計算において生じ得ます。

  • 積分 F が閉形式で存在しない

  • 馴染みのない関数を定義する

  • 不定積分が存在しても、ソフトウェアがそれを求められない

  • 大型コンピューターでは不定積分の検出が可能でも、使用しているマシンではメモリと時間の不足で求められない

それにもかかわらず、多くの場合、MATLAB はシンボリックな積分をうまく実行できます。たとえば、次のシンボリック変数を作成します。

syms a b theta x y n u z

次の表に、これらの変数を含んだ式の積分を示します。

f

int(f)

syms x n
f = x^n;
int(f)
ans =
piecewise([n == -1, log(x)], [n ~= -1, x^(n + 1)/(n + 1)])
syms y
f = y^(-1);
int(f)
ans =
log(y)
syms x n
f = n^x;
int(f)
ans =
n^x/log(n)
syms a b theta
f = sin(a*theta+b);
int(f)
ans =
-cos(b + a*theta)/a
syms u
f = 1/(1+u^2);
int(f)
ans =
atan(u)
syms x
f = exp(-x^2);
int(f)
ans =
(pi^(1/2)*erf(x))/2

最後の例 exp(-x^2) は、三角関数や指数関数などの標準微積分を含む積分に公式がないときにどうなるかを示しています。この場合、MATLAB はエラー関数 erf を使って答えを返します。

MATLAB が関数 f の積分を求められない場合は、int(f) を返すだけです。

定積分も行えます。

定積分

コマンド

int(f, a, b)

int(f, v, a, b)

ここで、別の例をいくつか示します。

f

a, b

int(f, a, b)

syms x
f = x^7;
a = 0;
b = 1;
int(f, a, b)
ans =
1/8
syms x
f = 1/x;
a = 1;
b = 2;
int(f, a, b)
ans =
log(2)
syms x
f = log(x)*sqrt(x);
a = 0;
b = 1;
int(f, a, b)
ans =
-4/9
syms x
f = exp(-x^2);
a = 0;
b = inf;
int(f, a, b)
ans =
pi^(1/2)/2
syms z
f = besselj(1,z)^2;
a = 0;
b = 1;
int(f, a, b)
ans =
hypergeom([3/2, 3/2], [2, 5/2, 3], -1)/12

ベッセル関数 (besselj) の例に対して、関数 double を使って、積分値の数値近似を計算することが可能です。次のコマンドを見てみましょう。

syms z
a = int(besselj(1,z)^2,0,1)

以下が返されます。

a =
hypergeom([3/2, 3/2], [2, 5/2, 3], -1)/12

コマンド

a = double(a)

では以下が返されます。

a =
    0.0717

実数パラメーターをもつ積分

シンボリックな積分に随伴する難解な点の 1 つは、さまざまなパラメーターの "値" です。たとえば a が任意の正の実数の場合、式

は、x が ±∞ に向かうと 0 に収束する正の釣鐘型曲線になります。a = 1/2 の場合のこの曲線の例を、以下のコマンドを使って描きます。

syms x
a = sym(1/2);
f = exp(-a*x^2);
ezplot(f)

ただし、次の積分を計算しようとする場合

a に値が与えられていない場合は、MATLAB は a を複素数であると仮定します。そのため、a の偏角に依存する区分的な解を返します。a が正の実数の場合のみを考える場合、assume を使用して、a の仮定を設定します。

syms a
assume(a > 0);

次のコマンド群を使って、前述の積分を計算します。

syms x
f = exp(-a*x^2);
int(f, x, -inf, inf)

次の値が返されます。

ans =
pi^(1/2)/a^(1/2)

複素数パラメーターの積分

以下の積分

a の複素数値に対して計算するには、以下のように入力します。

syms a x clear 
f = 1/(a^2 + x^2);
F = int(f, x, -inf, inf)

symsclear オプションと共に使用すると、a に関するすべての仮定を消去できます。シンボリック変数と仮定の詳細は、「シンボリック オブジェクトおよびその仮定の削除」を参照してください。

前のコマンドは、複素数出力を行います。

F = 
(pi*signIm(i/a))/a

関数 signIm は、次のように定義されます。

a = 1 + i のときの F を評価するには、次のように入力します。

g = subs(F, 1 + i)
g = 
pi*(1/2 - i/2)
double(g)
ans =
   1.5708 - 1.5708i
この情報は役に立ちましたか?