公文式の問題をPythonでやる(H教材)
家にある公文式の教材をSympyで解いてみる
H.1 整数の四則演算
>>> -3+8-5 0 >>> >>> >>> (-3)+(-5)-(-9) 1
H.1 分数・小数の四則演算
0.75も分数にしないとfloatで計算されてしまう
>>> from fractions import Fraction >>> from sympy import pprint >>> >>> Fraction(5,6) * Fraction(-2, 3) Fraction(-5, 9) >>> >>> >>> 0.75 / Fraction(5,6) * Fraction(-2, 3) -0.5999999999999999 >>> >>> type(0.75 / Fraction(5,6) * Fraction(-2, 3)) <class 'float'> >>> >>> a = Fraction(3,4) / Fraction(5,6) * Fraction(-2,3) >>> type(a) <class 'fractions.Fraction'> >>> pprint(a) -3/5
H.2 累乗計算
ビルトインでも出来るけどmath、numpyモジュールもある
>>> 3**2 9 >>> >>> pow(3,2) 9 >>> type(pow(3,2)) <class 'int'> >>> >>> math.pow(3,2) 9.0 >>> type(math.pow(3,2)) <class 'float'> >>> >>> numpy.power(3,2) 9 >>> type(numpy.power(3,2)) <class 'numpy.int64'>
H.5 代数式の計算1
>>> from sympy import Symbol >>> a = Symbol('a') >>> 6*a + a 7*a
H.10 代数式の計算2
をシンボルとしているのでFractionも不要
>>> x = Symbol('x') >>> (3*x - 5) / 4 * 12 9*x - 15
H.11 一次方程式
の計算
>>> from sympy import solve >>> solve(5+3*x-7*x-3, dict=True) [{x: 1/2}] >>> >>> solve(0.9*x - 1.1 - 0.3 - 0.2*x, dict=True) [{x: 2.00000000000000}]
H.21 2元連立方程式
>>> y = Symbol('y') >>> solve((5*x+2*y-11, 3*x+2*y-5), dict=True) [{x: 3, y: -2}]
H.88 4元連立方程式
>>> z = Symbol('z') >>> w = Symbol('w') >>> solve((x+y+z+w-10, x+2*y+3*z+6*w-22, x+3*y+4*z+5*w-26, x+4*y+7*z+7*w-37)) {w: 1, x: 4, y: 3, z: 2}
H.91 方程式の応用問題
>>> a, b = sympy.symbols('a,b')
>>> solve(x+b-a, x)
[a - b]
同じくbについて解く
>>> solve(x+b-a, b) [a - x]
H.111 単項式・多項式の計算
を計算する
>>> (-5 * a * b) * (-8 * x * y) 40*a*b*x*y
H.112 単項式・多項式の計算
>>> x**3 * x**6 x**9
H.112 単項式・多項式の計算
>>> (a**5)**3 a**15
H.131 多項式の乗法
を展開しろ
>>> from sympy import expand >>> expand((2*a+b)*(3*x+2*y)) 6*a*x + 4*a*y + 3*b*x + 2*b*y
H.151 因数分解
を因数分解しろ
>>> factor(5*a*x**2 - 35*a*y**2 + 45*a*z**2) 5*a*(x**2 - 7*y**2 + 9*z**2)