【Python】sympyを使用して対数方程式を解く

■対数方程式

対数方程式を解く場合は、まず、真数条件をチェックしてから解答する。

(例)
log4(x + 8) = log2(x + 2)を解く

真数条件:
 ①x + 8 > 0 かつ ②x + 2 > 0
 ①x > -8 かつ ②x > -2
 よって、①②ともに満たす条件は、x > -2 である(※1)

(※1)イメージ図

log4(x + 8) = log2(x + 2)
log2(x + 8) / log24 = log2(x + 2)     ←底の変換公式(※2)で底を2に揃える
log2(x + 8) / log222 = log2(x + 2)
log2(x + 8) / 2log22 = log2(x + 2)    ←log22=1
log2(x + 8) / 2 = log2(x + 2)
log2(x + 8) = 2log2(x + 2)
log2(x + 8) = log2(x + 2)2       ←底が2であり、かつ、真数部は等しいので
(x + 8) = (x + 2)2
(x + 8) = x2 + 4x + 4
x2 + 3x – 4 = 0
(x – 1)(x + 4) = 0
x > -2 より、x = 1

(※2 底の変換公式)

■sympy.log()を使用して対数(log)を表現する

sympy.log()を使用して対数を解く場合、

sympy.log(真数, 底)

と表記する。

すなわち、log24 をsympy.log()を使用して解く場合は、

import sympy

ans = sympy.log(4, 2)

print(ans)    # 答えは2

と表記する。

■例題

▼問題1
log3x – log3(4 – x) = 0

▼問題2
log4(x + 8) – log2(x + 2) = 0

▼問題3
log6(x – 2) + log6(x + 3) – 1 = 0

▼問題4
(log2x)2 – 2log2x – 3 = 0

■サンプルコード

# -*- Coding:UTF-8 -*-
import sympy

# 文字列をセット
x = sympy.Symbol('x')

# 問題1
ans1 = sympy.solve(sympy.log(x, 3) - sympy.log(4 - x, 3), x)

# 問題2
ans2 = sympy.solve(sympy.log(x + 8, 4) - sympy.log(x + 2, 2), x)

# 問題3
ans3 = sympy.solve(sympy.log(x - 2, 6) + sympy.log(x + 3, 6) - 1, x)

# 問題4
ans4 = sympy.solve(sympy.log(x, 2) ** 2 - 2 * sympy.log(x, 2) - 3, x)


print('問題1:x = ' + str(ans1))

print('問題2:x = ' + str(ans2))

print('問題3:x = ' + str(ans3))

print('問題4:x = ' + str(ans4))

■実行結果

問題1:x = [2]
問題2:x = [1]
問題3:x = [3]
問題4:x = [1/2, 8]

コメント