ydydo’s blog

自分用メモ

公文式の問題を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

 6a + a = 7a

>>> from sympy import Symbol
>>> a = Symbol('a')
>>> 6*a + a
7*a
H.10 代数式の計算2

 xをシンボルとしているのでFractionも不要

>>> x = Symbol('x')
>>> (3*x - 5) / 4 * 12
9*x - 15
H.11 一次方程式

 0.9x-1.1=0.3+0.2x の計算

>>> 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元連立方程式



\left\{\begin{array}{rrr}
5x  +  2y  =  11\\
3x  +  2y  =  5
\end{array}\right.
>>> y = Symbol('y')
>>> solve((5*x+2*y-11, 3*x+2*y-5), dict=True)
[{x: 3, y: -2}]
H.88 4元連立方程式


\left\{\begin{array}{rrrrr}
x + y + z + w = 10\\
x + 2y + 3z + 6w = 22\\
x + 3y + 4z + 5w = 26\\
x + 4y + 7z + 7w = 37
\end{array}\right.
>>> 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 方程式の応用問題

 x+b=a をxについて解く

>>> a, b = sympy.symbols('a,b')
>>> solve(x+b-a, x)
[a - b]

同じくbについて解く

>>> solve(x+b-a, b)
[a - x]
H.111 単項式・多項式の計算

 (-5ab ) \cdot (-8xy) を計算する

>>> (-5 * a * b) * (-8 * x *  y)
40*a*b*x*y
H.112   単項式・多項式の計算

x^3 \times x^6
>>> x**3 * x**6
x**9
H.112   単項式・多項式の計算

 (a^5)^3

>>> (a**5)**3
a**15
H.131   多項式の乗法

 (2a+b)(3x+2y) を展開しろ

>>> 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   因数分解

 5ax^2-35ay^2+45az^2因数分解しろ

>>> factor(5*a*x**2 - 35*a*y**2 + 45*a*z**2)
5*a*(x**2 - 7*y**2 + 9*z**2)