基本編
●累乗
同じ数 a を n 回掛け算する演算を「累乗」または「べき乗」といい、\(a^n\) と表記します。このとき、a を「底」といい、n を「指数」といいます。
\(a^n = \underbrace{a \times a \times \cdots \times a}_{n}\)
\(a, \, b\) を 0 ではない実数、\(m, \, n\) を正の整数とすると、以下の公式が成り立ちます。
- \(a^m \times a^n = a^{m+n}\)
- \({a^m} \div {a^n} = a^{m-n} \quad (m \gt n)\)
- \((a^m)^n = a^{mn}\)
- \((ab)^n = a^n b^n\)
- \(\left(\dfrac{a}{b}\right)^n = \dfrac{a^n}{b^n}\)
次の定義を追加すると、指数を整数まで拡張することができます。公式 2 の条件も不要になります。
- \(a^0 = 1\)
- \(a^{-n} = \dfrac{1}{a^n}\)
定義 \(\sqrt[n]{a} = a^{\frac{1}{n}} \) を追加すると、指数を有理数 (分数) まで拡張することができます。
- \(a^{\frac{p}{q}} = \left({a^p}\right)^{\frac{1}{q}} = \left({a^{\frac{1}{q}}}\right)^p = \sqrt[q]{a^p} = \left(\sqrt[q]{a}\right)^p \quad\) (\(p\) と \(q\) は正の整数)
指数は実数や複素数に拡張することもできます。
>>> (2**3) * (2**5)
256
>>> 2**(3+5)
256
>>> (2**5) // (2**3)
4
>>> 2**(5-3)
4
>>> (2**5)**3
32768
>>> 2**(5*3)
32768
>>> (2*3)**5
7776
>>> (2**5)*(3**5)
7776
>>> (15 // 3) ** 5
3125
>>> (15**5) // (3**5)
3125
>>> 2**0
1
>>> 2**(-1)
0.5
>>> 2**(-2)
0.25
>>> 2**(1/2)
1.4142135623730951
>>> import math
>>> math.sqrt(2)
1.4142135623730951
●対数
\(y = a^x\) のとき、x は a を底とする y の対数といい、\(x = \log_a y, \ (a \gt 0, a \ne 1)\) と書きます。底が 10 の対数を常用対数、e (ネイピア数 2.718281828459045) の対数を自然対数、2 の対数を二進対数といいます。
対数には次の公式が成立します。
- \(\log_{a}(RS) = \log_{a}R + \log_{a}S\)
- \(\log_{a}{\dfrac{R}{S}} = \log_{a}R - \log_{a}S\)
- \(\log_{a}{R^n} = n\log_{a}R\)
- \(\dfrac{\log_{a}R}{\log_{a}S} = \log_{S}R\)
- Python での使用例
- モジュール math をインポートすること
- log(x), 自然対数
- log(x, y), y を底とする x の対数を返す
- log10(x), 常用対数
- log2(x), 二進対数
>>> math.e
2.718281828459045
>>> math.log(math.e)
1.0
>>> math.log10(10)
1.0
>>> math.log2(2)
1.0
>>> math.log(123 * 456)
10.934677164886804
>>> math.log(123) + math.log(456)
10.934677164886804
>>> math.log(123 / 456)
-1.3103084541419685
>>> math.log(123) - math.log(456)
-1.3103084541419694
>>> math.log(123 ** 456)
2194.3560660498224
>>> 456*math.log(123)
2194.3560660498224
>>> math.log(456) / math.log(123)
1.2722897456493152
>>> math.log(456, 123)
1.2722897456493152
●順列と組み合わせ
- 階乗 \(n!\) の定義
\(n! = n \times (n-1) \times (n-2) \times \cdots \times 3 \times 2 \times 1 = \displaystyle \prod_{k=1}^{n} k\)
再帰定義
\(\begin{array}{l}
0! = 1 \\
n! = n \times (n - 1)! \quad \mathrm{if} \ n \gt 0
\end{array}\)
- 順列 \({}_n \mathrm{P}_r\) : n 個の異なるものから r 個を取り出して 1 列に並べる並べ方
\({}_n \mathrm{P}_r = \dfrac{n!}{(n-r)!}\)
- 組み合わせ \({}_n \mathrm{C}_r\) : n 個の異なるものから r 個を取り出す選び方
\({}_n \mathrm{C}_r = \dbinom{n}{r} = \dfrac{{}_n \mathrm{P}_r}{r!} = \dfrac{n!}{r!(n-r)!}\)
\(
{}_n \mathrm{C}_r = \begin{cases}
1 & \mathrm{if} \ r = 0 \\
1 & \mathrm{if} \ r = n \\
\dfrac{{}_n \mathrm{C}_{r-1} \times (n - r + 1)}{r} \quad & \mathrm{if} \ r \gt 0
\end{cases}
\)
\(
{}_n \mathrm{C}_r = \begin{cases}
1 & \mathrm{if} \ r = 0 \\
1 & \mathrm{if} \ r = n \\
{}_{n-1} \mathrm{C}_{r-1} + {}_{n-1} \mathrm{C}_r \quad & \mathrm{if} \ r \gt 0
\end{cases}
\)
- Python での使用例
- モジュール math をインポートすること
- factorial(n), \(n!\) を返す
- perm(n, r), \({}_n \mathrm{P}_r\) を返す
- comb(n, r), \({}_n \mathrm{C}_r\) を返す
>>> for n in range(14): print(math.factorial(n))
...
1
1
2
6
24
120
720
5040
40320
362880
3628800
39916800
479001600
6227020800
>>> for r in range(1, 11): print(math.perm(10, r))
...
10
90
720
5040
30240
151200
604800
1814400
3628800
3628800
>>> for r in range(11): print(math.comb(10, r))
...
1
10
45
120
210
252
210
120
45
10
1
●式の展開と因数分解
- \((a + b)^{2} = a^{2} + 2 a b + b^{2}\)
- \((a - b)^{2} = a^{2} - 2 a b + b^{2}\)
- \((a - b) (a + b) = a^{2} - b^{2}\)
- \((x + a) (x + b) = x^{2} + (a + b) x + a b\)
- \((ax + b) (cx + d) = acx^2 + (ad + bc)x + bd\)
- \((a + b)^3 = a^3 + 3a^2b + 3ab^2 + b^3\)
- \((a - b)^3 = a^3 - 3a^2b + 3ab^2 - b^3\)
- \((a + b)(a^2 - ab + b^2) = a^3 + b^3\)
- \((a - b)(a^2 + ab + b^2) = a^3 - b^3\)
- \((a + b + c)^2 = a^2 + b^2 + c^2 + 2bc + 2ca + 2ab\)
- 二項定理
\(
(a + b)^n = {}_n \mathrm{C}_0 a^n + {}_n \mathrm{C}_1 a^{n-1}b + {}_n \mathrm{C}_2 a^{n-2}b^2 + \cdots + {}_n \mathrm{C}_r a^{n-r} b^r + \cdots + {}_n \mathrm{C}_n b^n
\)
- Python での使用例
- SymPy をインポートすること
- SymPy については拙作のページ お気楽 SymPy 超入門 を参照
- expand(expr), 式 expr を展開する
- factor(expr), 式 expr を因数分解する
>>> import sympy as sy
>>> a, b, c, x = sy.var('a b c x')
>>> sy.expand((a + b)**2)
a**2 + 2*a*b + b**2
>>> sy.factor(a**2 + 2*a*b + b**2)
(a + b)**2
>>> sy.expand((x + a)*(x + b))
a*b + a*x + b*x + x**2
>>> sy.factor((x**2 + (a+b)*x + a*b))
(a + x)*(b + x)
>>> sy.expand((a + b + c)**2)
a**2 + 2*a*b + 2*a*c + b**2 + 2*b*c + c**2
>>> sy.factor(a**2 + 2*a*b + 2*a*c + b**2 + 2*b*c + c**2)
(a + b + c)**2
- 剰余定理
\(x\) の多項式 \(f(x)\) を \((x - a)\) で割ったときの余りは \(f(a)\)
- 証明
- 因数定理
\(x\) の多項式 \(f(x)\) について、\(f(a) = 0\) ならば \(f(x)\) は \((x - a)\) を因子に持つ
- Python での使用例
- SymPy をインポートすること
- expr.subs(変数, 値), 式 expr の変数に値を代入して計算する
- div(expr1, expr2), 式 expr1 を式 expr2 で割り算した商と余りを返す
>>> f = x**3 + x**2 - 4*x + 1
>>> f.subs(x, 2)
5
>>> sy.div(f, x - 2)
(x**2 + 3*x + 2, 5)
>>> g = x**3 - x**2 - 4*x + 4
>>> g.subs(x, 1)
0
>>> sy.div(g, x - 1)
(x**2 - 4, 0)
>>> g.subs(x, 2)
0
>>> g.subs(x, -2)
0
>>> sy.factor(g)
(x - 2)*(x - 1)*(x + 2)
●部分分数
- 部分分数は、分母が因数分解されている有理式をいくつかの有理式に分解すること
- 次の条件を満たすとき、有理式 g(x) / f(x) は簡単な形に分解できる
- f(x) は 1 次式の積に因数分解できるような整式であること
- g(x) は f(x) より次数が少ない整式であること
\(
\dfrac{g(x)}{f(x)} = \dfrac{b_1}{x - a_1} + \dfrac{b_2}{x - a_2} + \cdots + \dfrac{b_n}{x - a_n}
\)
- SymPy の関数 apart() は引数の式を部分分数に分解する
>>> sy.apart((2*x - 3)/(x**2 - 3*x + 2))
1/(x - 1) + 1/(x - 2)
>>> sy.apart((6*x**2 + x - 17) / (x**3 - 7*x -6))
1/(x + 2) + 3/(x + 1) + 2/(x - 3)
\(\begin{array}{l}
\dfrac{2x - 3}{x^2 - 3x + 2} = \dfrac{1}{x - 1} + \dfrac{1}{x - 2} \\
\dfrac{6x^2 + x - 17}{x^3 - 7x - 6} = \dfrac{1}{x + 1} + \dfrac{3}{x + 2} + \dfrac{2}{x - 3}
\end{array}\)
●二次方程式
二次方程式 \(ax^2 + bx + c = 0 \ (a \ne 0)\) の解
\(
x = \dfrac{-b\pm\sqrt{b^2-4ac}}{2a}
\)
- \(D = b^2 - 4ac\) とする
- \(D \gt 0\) ならば、異なる 2 つの実数解
- \(D = 0\) ならば、等しい 2 つの実数解 (重解)
- \(D \lt 0\) ならば、異なる 2 つの虚数解
- SymPy の関数 solveset(expr, var) を使うと、方程式 expr の解を求めることができる
>>> sy.solveset(x**2 - 1, x)
{-1, 1}
>>> sy.solveset(x**2 + 2*x + 1, x)
{-1}
>>> sy.solveset(x**2 + 1, x)
{-I, I}
I は虚数単位
二次方程式 \(ax^2 + bx + c = 0 \ (a \ne 0)\) の 2 つの解を \(\alpha, \beta\) とすると、判別式は以下のように書くこともできます。
\(
D = a^2 (\alpha - \beta)^2
\)
[証明]
\(\begin{array}{l}
\alpha + \beta = \dfrac{-b + \sqrt{b^2-4ac}}{2a} + \dfrac{-b - \sqrt{b^2-4ac}}{2a} = -\dfrac{b}{a} \\
\alpha \times \beta = \dfrac{-b + \sqrt{b^2-4ac}}{2a} \times \dfrac{-b - \sqrt{b^2-4ac}}{2a} = \dfrac{c}{a}
\end{array}\)
より
\(\begin{eqnarray}
a^2 (\alpha - \beta)^2 &=& a^2 \left(\alpha^2 -2\alpha\beta + \beta^2\right) \\
&=& a^2 \left(\left(\alpha + \beta\right)^2 -4\alpha\beta\right) \\
&=& a^2 \left(\left(-\dfrac{b}{a}\right)^2 -4\dfrac{c}{a}\right) \\
&=& b^2 - 4 a c
\end{eqnarray}\)
●平方完成
二次式 \(ax^2 + bx + c \ (a \ne 0)\) を \(a(x - p)^2 + q\) の形に変形することを「平方完成」といいます。
二次方程式 \(ax^2 + bx + c = 0 \ (a \ne 0)\) の解の導出
\(\begin{array}{l}
ax^2 + bx + c = a\left(x^2 + \dfrac{b}{a}x\right) + c = a\left(x + \dfrac{b}{2a}\right)^2 - \dfrac{b^2}{4a} + c = 0 \\
\left(x + \dfrac{b}{2a}\right)^2 = \dfrac{b^2 - 4ac}{4a^2} \\
x + \dfrac{b}{2a} = \pm \dfrac{\sqrt {b^2 - 4ac}}{2a} \\
x = \dfrac{-b \pm \sqrt {b^2 - 4ac}}{2a}
\end{array}\)
●不等式
- 相加相乗平均の不等式
- 2 つの正の数 \(a, b\) に対して、\(\dfrac{a + b}{2}\) を相加平均、\(\sqrt {ab}\) を相乗平均という
- \(a, b \geq 0\) のとき、以下の式が成立する
\(
\dfrac{a + b}{2} \geqq \sqrt {ab}
\)
- 証明
\(\begin{eqnarray}
\dfrac{a + b}{2} - \sqrt {ab} &=& a + b - 2 \sqrt {ab} \\
&=& \left({\sqrt a}^2 - 2 \sqrt a \sqrt b + {\sqrt b}^2\right) \\
&=& \left(\sqrt a - \sqrt b\right)^2 \geqq 0
\end{eqnarray}\)
- 変数が n 個でも成立する
\(a_1, a_2, \ldots, a_n \geqq 0\) のとき,
\(
\dfrac{1}{n} \displaystyle \sum_{i=1}^n a_i \geqq \sqrt[n]{\displaystyle \prod_{i=1}^n a_i}
\)
- シュワルツの不等式
- 任意の実数 \(a, b, x, y\) に対して、以下の不等式が成立する
\(
\left(a^2 + b^2\right)\left(x^2 + y^2\right) \geqq \left(ax + by\right)^2
\)
- 証明
\(\begin{eqnarray}
\left(a^2 + b^2\right)\left(x^2 + y^2\right) - \left(ax + by\right)^2 &=& a^2x^2 + a^2y^2 + b^2x^2 + b^2y^2 - a^2x^2 - 2abxy - b^2y^2 \\
&=& a^2y^2 + b^2x^2 - 2abxy \\
&=& (ay - bx)^2 \geqq 0
\end{eqnarray}\)
- 変数が n 個でも成立する
\(
\displaystyle \left(\sum_{i=1}^n {a_i}^2\right) \left(\sum_{i=1}^n {b_i}^2\right) \geqq \left(\displaystyle \sum_{i=1}^n a_i b_i\right)^2
\)
- チェビシェフの不等式
\(
\dfrac{ax + by}{2} \geqq \dfrac{a + b}{2} \cdot \dfrac{x + y}{2} \quad (a \geqq b, x \geqq y)
\)
- 証明
\(\begin{eqnarray}
\dfrac{ax + by}{2} - \dfrac{a + b}{2} \cdot \dfrac{x + y}{2} &=& \dfrac{1}{4} (2ax + 2by - ax - ay - bx - by) \\
&=& \dfrac{1}{4} (ax + by - bx - ay) \\
&=& \dfrac{1}{4} ((a - b)x - (a - b)y) \\
&=& \dfrac{1}{4} (a - b)(x - y) \geqq 0
\end{eqnarray}\)
- 変数が n 個でも成立する
\(a_1 \geqq a_2 \geqq \cdots \geqq a_n, \ b_1 \geqq b_2 \geqq \cdots \geqq b_n\) のとき,
\(
\dfrac{1}{n} \displaystyle \sum_{i=1}^n a_i b_i \geqq \left(\dfrac{1}{n}\sum_{i=1}^n a_i\right) \left(\dfrac{1}{n}\sum_{i=1}^n b_i\right)
\)
- SymPy での実行例は拙作のページ お気楽 SymPy 超入門 等式と不等式 を参照
●数列と級数
等差数列
次のように、一定の差で並んだ数列を「等差数列」といいます。
\(a, \ a + d, \ a + 2d, \ a + 3d, \ \cdots, \ a + (n - 1)d, \ \cdots\)
a を「初項」、d を「公差」といいます。等差数列の一般項は次の式で表すことができます。
\(a_n = a + (n-1)d\)
初項から \(a_n\) までの和 \(S_n\) は次の式で求めることができます。
\(S_n = \displaystyle \sum_{i=1}^{n} a_i = \frac{n(2a + (n - 1)d)}{2}\)
この公式は次のように導出することができます。
\(\begin{eqnarray}
S_n &=& a &+& (a + d) &+& \cdots \ &+& (a + (n - 2)d) &+& (a + (n - 1)d)\\
S_n &=& (a + (n - 1)d) &+& (a + (n - 2)d) &+& \cdots \ &+& (a + d) &+& a
\end{eqnarray}\)
足し算すると
\(\begin{array}{l}
2S_n = (2a + (n - 1)d) + (2a + (n - 1)d) + \cdots + (2a + (n - 1)d) + (2a + (n - 1)d) \\
2S_n = n(2a + (n - 1)d) \\
S_n = \dfrac{n(2a + (n - 1)d)}{2}
\end{array}\)
このように、右辺を逆順に並べ替えて足し算すると、\(2a + (n - 1)d\) が \(n\) 個並ぶことになります。あとは、これを 2 で割り算すればいいわけです。
等比数列
次のように、一定の比で並んだ数列を「等比数列」といいます。
\(a, \ ar, \ ar^2, \ \cdots, \ ar^{n-1}, \ \cdots\)
a を「初項」、d を「公比」といいます。等比数列の一般項は次の式で表すことができます。
\(a_n = ar^{n-1}\)
初項から \(a_n\) までの和 \(S_n\) は次の式で求めることができます。
\(S_n = \displaystyle \sum_{i=1}^{n} a_i = \dfrac{a(1 - r^n)}{1 - r}\)
この公式は次のように導出することができます。
\(
S_n = a + ar + ar^2 + \cdots + ar^{n-1}
\)
両辺を r 倍すると
\(
rS_n = ar + ar^2 + \cdots + ar^{n-1} + ar^n
\)
これを引き算すると
\(\begin{array}{l}
S_n - rS_n = a - ar^n \\
S_n = \dfrac{a(1 - r^n)}{1 - r}
\end{array}\)
右辺を引き算すると \(ar\) から \(ar^{n-1}\) の項がなくなって、\(a - ar^n\) だけになります。あとは、\(1 - r\) で割り算すればいいわけです。
数列の和
\(\begin{array}{ll}
1 + 2 + \cdots + n = \displaystyle \sum_{k=1}^n k = \dfrac{n(n+1)}{2} & (1) \\
1^2 + 2^2 + \cdots + n^2 = \displaystyle \sum_{k=1}^n k^2 = \dfrac{n}{6}(n+1)(2n+1) & (2) \\
1^3 + 2^3 + \cdots + n^3 = \displaystyle \sum_{k=1}^n k^3 = \dfrac{n^2}{4}(n+1)^2 & (3) \\
1 \cdot 2 + 2 \cdot 3 + \cdots + n \cdot (n+1) = \displaystyle \sum_{k=1}^n k(k + 1) = \dfrac{1}{3}n(n+1)(n+2) & (4) \\
\dfrac{1}{1 \cdot 2} + \dfrac{1}{2 \cdot 3} + \cdots + \dfrac{1}{n \cdot (n+1)} = \displaystyle \sum_{k=1}^n \dfrac{1}{k(k + 1)} = \dfrac{n}{n+1} & (5)
\end{array}\)
- 証明
- (1) は初項 1 公差 1 の等差数列だから、和の公式より n(2 * 1 + (n - 1) * 1) / 2 = n(n + 1) / 2 になる
- (2) - (5) は数学的帰納法で証明できる。(2) の証明は以下の通り
\(n = 1\) のとき、式 \(1^2 = \dfrac{1}{6} (1 + 1) (2 + 1)\) は成立する
\(n = k\) のとき、式 \(1^2 + 2^2 + \cdots + k^2 = \dfrac{k}{6}(k+1)(2k+1)\) が成立すると仮定する
\(n = k + 1\) のとき
\(\begin{eqnarray}
1^2 + 2^2 + \cdots + k^2 + (k + 1)^2 &=& \dfrac{k}{6}(k+1)(2k+1) + (k + 1)^2 \\
&=& \dfrac{1}{6} (k + 1) (k(2k + 1) + 6(k + 1)) \\
&=& \dfrac{1}{6} (k + 1) (2k^2 + 7k + 6) \\
&=& \dfrac{1}{6} (k + 1) (k + 2) (2k + 3) \\
&=& \dfrac{1}{6} (k + 1) ((k + 1) + 1) (2(k + 1) + 1)
\end{eqnarray}\)
\(k + 1 = n\) に置き換えると式 (2) が成り立つ
級数
- 級数は無限につづく数列の和のこと
- たとえば、等比級数 \(\displaystyle \sum_{n=0}^{\infty} ar^n\) は \(|r| \lt 1\) のとき \(\dfrac{a}{1 - r}\) に収束する
- 調和級数 \(\displaystyle \sum_{n=1}^{\infty} \dfrac{1}{n}\) は発散するが、交代級数 \(\displaystyle \sum_{n=1}^{\infty} \dfrac{(-1)^{n+1}}{n}\) は \(\log_e 2\) に収束する
SymPy での実行例
SymPy には数列を生成する関数 sequence() とその和を求める関数 summation() が用意されています。説明は拙作のページ
お気楽 SymPy 超入門 数列と級数 をお読みくださいませ。