公文式の問題をPythonでやる(J教材)
家にある公文式の教材をPython(おもにSympy)で解いてみる
J.1 指数法則
の値を求めよ
import sympy a,b,c = sympy.symbols('a,b,c') (-2*a**2*b*c**3)**3
J.4 式の計算
を計算せよ
import sympy a,b,c = sympy.symbols('a,b,c') sympy.expand((2*a-3*b+c)**2)
J.8 式の計算
を計算せよ
import sympy a,b = sympy.symbols('a,b') sympy.expand((a+b)**3) sympy.expand((a-b)**3)
J.14 因数分解
を因数分解せよ
import sympy x, y = sympy.symbols('x,y') sympy.factor(2*(x+y)**2 + (x+y) - 3)
J.61 分数式
の分数式を約分せよ
import sympy x = sympy.Symbol('x') sympy.factor((x**2-5*x+6)/(x**2-7*x+12))
J.66 分数式
を計算せよ
import sympy x = sympy.Symbol('x') sympy.factor(1/(4*x) + 1/(6*x))
J.71 無理数
を計算せよ
from sympy import sqrt, expand expand(sqrt(3) * (2*sqrt(6) - sqrt(12)))
J.71 無理数
を計算せよ
from sympy import sqrt, expand expand((sqrt(2) + sqrt(6))**2)
J.74 無理数
を有理化せよ
from sympy import sqrt 5*sqrt(2) / (2*sqrt(6))
J.74 無理数
を有理化せよ
from fractions import Fraction sqrt(Fraction(8,3)) - sqrt(Fraction(3,8))
J.75 無理数
を有理化せよ
from sympy import sqrt, simplify simplify(1 / (sqrt(5) + 1))
J.77 無理数 (2重根号)
を簡単にせよ
from sympy import sqrt, sqrtdenest sqrtdenest(sqrt(9 + 2*sqrt(14)))
J.81 無理数
のとき の値を求めよ
from sympy import symbols x, y = symbols('x,y') (x+y).subs({x:5+sqrt(3), y:5-sqrt(3)}) expand((x*y).subs({x:5+sqrt(3), y:5-sqrt(3)}))
J.91 二次方程式
を解け
from sympy import solve, Symbol x = Symbol('x') solve(x**2 + 3*x -10, dict=True)
J.95 二次方程式
を解け
from sympy import solve, Symbol x = Symbol('x') solve(x**2 - 6*x -1, dict=True)
J.101 虚数と二次方程式
を i を用いて表せ
from fractions import Fraction from sympy import sqrt sqrt(Fraction(-3,16))
J.112 虚数と二次方程式
を 計算せよ
from sympy import I (3*i)**2
J.114 虚数と二次方程式
を 計算せよ
from sympy import sqrt, expand, I expand((sqrt(3)*I + 2)**2)
J.115 虚数と二次方程式
を 計算せよ
from sympy import I (1/I**3)
公文式の問題をPythonでやる(I教材)
家にある公文式の教材をSympyで解いてみる
I.22 平方根
の値を求めよ
>>> math.sqrt(361) 19.0
I.24 平方根
の値を求めよ
>>> from fractions import Fraction >>> sympy.sqrt(Fraction(1,9)) 1/3
I.29 平方根
の値を求めよ
>>> sympy.sqrt(60) 2*sqrt(15) >>> pprint(sympy.sqrt(60)) 2?√15
I.32 平方根
を計算せよ
>>> sympy.sqrt(6)*sympy.sqrt(12) 6*sqrt(2) >>> numpy.sqrt(6)*numpy.sqrt(12) 8.48528137423857
I.34 平方根
を計算せよ
この問題はnumpyではダメなことが分かる(こういう計算じゃない)
>>> sympy.sqrt(12) + sympy.sqrt(27) 5*sqrt(3) >>> numpy.sqrt(12) + numpy.sqrt(27) 8.660254037844386
I.37 平方根
を計算せよ
>>> from sympy import expand >>> expand((2*sympy.sqrt(3)+4)*(3*sympy.sqrt(3)-2)) 10 + 8*sqrt(3)
I.39 平方根
を計算せよ
>>> from sympy import expand >>> expand((sympy.sqrt(7) - sympy.sqrt(2))**2) 9 - 2*sqrt(14)
I.42 平方根
の分母を有理化せよ
>>> from sympy import expand >>> expand(3 / sympy.sqrt(5)) 3*sqrt(5)/5
I.47 平方根
の分母を有理化せよ
>>> from sympy import expand >>> expand((2*sympy.sqrt(3) + 3*sympy.sqrt(2)) / sympy.sqrt(6)) sqrt(2) + sqrt(3)
I.49 平方根
, のとき次の式の値を計算せよ
>>> expr = x**2 + y**2 >>> expr.subs({x:3+sympy.sqrt(3), y:3-sympy.sqrt(3)}).expand() 24
I.51 二次方程式
を解け
>>> from sympy import solve >>> solve(x**2+2*x-15, x, dict=True) [{x: -5}, {x: 3}]
I.76 二次方程式
をxについて解け
>>> from sympy import solve >>> solve(a*x**2 + b*x + c, x, dict=True) [{x: (-b - sqrt(-4*a*c + b**2))/(2*a)}, {x: (-b + sqrt(-4*a*c + b**2))/(2*a)}]
I.82 不等式
を解け
>>> solve(2*x>3) (3/2 < x) & (x < oo) >>> expr = solve(2*x>3) >>> expr.subs(x,1) False >>> expr.subs(x,2) True
I.95 不等式
連立不等式を解け
>>> solve((6*x+5 >= 2*x-7, 2*x-3 >= 5*x-9)) (-3 <= x) & (x <= 2)
I.101 一次関数とグラフ
のグラフをかけ
y = x/2 + 1 p1 = sympy.plot(y, (x, -5, 5))
I.141 二次関数とグラフ
のグラフをかけ
from sympy import Symbol, plot x = Symbol('x') sympy.plot(x**2)
I.168 二次関数とグラフ
次の2つのグラフの交点の座標を求めよ
y1 = x**2 - 5*x + 3 y2 = 0 plot(y1, y2) solve((x**2-5*x+3, 0))
公文式の問題を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)