ydydo’s blog

自分用メモ

公文式の問題をPythonでやる(J教材)

家にある公文式の教材をPython(おもにSympy)で解いてみる

J.1   指数法則

 (-2a^3bc^3)^3 の値を求めよ

import sympy
a,b,c = sympy.symbols('a,b,c')
(-2*a**2*b*c**3)**3
J.4 式の計算

 (2a-3b+c)^2 を計算せよ

import sympy
a,b,c = sympy.symbols('a,b,c')
sympy.expand((2*a-3*b+c)**2)
J.8 式の計算

 (a+b)^3,  (a-b)^3 を計算せよ

import sympy
a,b = sympy.symbols('a,b')
sympy.expand((a+b)**3)
sympy.expand((a-b)**3)
J.14 因数分解

 2(x+y)^2 + (x+y) - 3因数分解せよ

import sympy
x, y = sympy.symbols('x,y')
sympy.factor(2*(x+y)**2 + (x+y) - 3)
J.61 分数式

 \frac{x^2-5x+6}{x^2-7x+12} の分数式を約分せよ

import sympy
x = sympy.Symbol('x')
sympy.factor((x**2-5*x+6)/(x**2-7*x+12))
J.66 分数式

 \frac{1}{4x} + \frac{1}{6x} を計算せよ

import sympy
x = sympy.Symbol('x')
sympy.factor(1/(4*x) + 1/(6*x))
J.71 無理数

 \sqrt{3} (2\sqrt{6} - \sqrt{12}) を計算せよ

from sympy import sqrt, expand
expand(sqrt(3) * (2*sqrt(6) - sqrt(12)))
J.71 無理数

 (\sqrt{2} + \sqrt{6})^2  を計算せよ

from sympy import sqrt, expand
expand((sqrt(2) + sqrt(6))**2)
J.74 無理数

  \frac{5\sqrt{2}}{2\sqrt{6}}  を有理化せよ

from sympy import sqrt
5*sqrt(2) / (2*sqrt(6))
J.74 無理数

   \sqrt{\frac{8}{3}} -  \sqrt{\frac{3}{8}}  を有理化せよ

from fractions import Fraction
sqrt(Fraction(8,3)) - sqrt(Fraction(3,8))
J.75 無理数

  \frac{  1  }{ \sqrt{5} + 1  }  を有理化せよ

from sympy import sqrt, simplify
simplify(1 / (sqrt(5) + 1))
J.77 無理数 (2重根号)

  \sqrt{9 + 2\sqrt{14}}  を簡単にせよ

from sympy import sqrt, sqrtdenest
sqrtdenest(sqrt(9 + 2*sqrt(14)))
J.81 無理数

  x=5+\sqrt{3} , y=5-\sqrt{3} のとき  x+y,  xy の値を求めよ

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 二次方程式

  x^2 + 3x - 10 = 0 を解け

from sympy import solve, Symbol
x = Symbol('x')
solve(x**2 + 3*x -10, dict=True)
J.95 二次方程式

  x^2 - 6x -1 = 0 を解け

from sympy import solve, Symbol
x = Symbol('x')
solve(x**2 - 6*x -1, dict=True)
J.101 虚数二次方程式

 \sqrt{\frac{-3}{16}} を i を用いて表せ

from fractions import Fraction
from sympy import sqrt
sqrt(Fraction(-3,16))
J.112 虚数二次方程式

 (3i)^2 を 計算せよ

from sympy import I
(3*i)**2
J.114 虚数二次方程式

 (\sqrt{3}i + 2)^2 を 計算せよ

from sympy import sqrt, expand, I
expand((sqrt(3)*I + 2)**2)
J.115 虚数二次方程式

 \frac{1}{i^3} を 計算せよ

from sympy import I
(1/I**3)

公文式の問題をPythonでやる(I教材)

家にある公文式の教材をSympyで解いてみる

I.22   平方根

 \sqrt{361} の値を求めよ

>>> math.sqrt(361)
19.0
I.24   平方根

 \sqrt{\frac{1}{9}} の値を求めよ

>>> from fractions import Fraction
>>> sympy.sqrt(Fraction(1,9))
1/3
I.29   平方根

 \sqrt{60} の値を求めよ

>>> sympy.sqrt(60)
2*sqrt(15)
>>> pprint(sympy.sqrt(60))
2?√15
I.32   平方根

 \sqrt{6} \sqrt{12} を計算せよ

>>> sympy.sqrt(6)*sympy.sqrt(12)
6*sqrt(2)
>>> numpy.sqrt(6)*numpy.sqrt(12)
8.48528137423857
I.34   平方根

 \sqrt{12} + \sqrt{27} を計算せよ
この問題はnumpyではダメなことが分かる(こういう計算じゃない)

>>> sympy.sqrt(12) + sympy.sqrt(27)
5*sqrt(3)
>>> numpy.sqrt(12) + numpy.sqrt(27)
8.660254037844386
I.37   平方根

 (2\sqrt{3} + 4) (3\sqrt{3} - 2) を計算せよ

>>> from sympy import expand
>>> expand((2*sympy.sqrt(3)+4)*(3*sympy.sqrt(3)-2))
10 + 8*sqrt(3)
I.39   平方根

 (\sqrt{7} - \sqrt{2})^2 を計算せよ

>>> from sympy import expand
>>> expand((sympy.sqrt(7) - sympy.sqrt(2))**2)
9 - 2*sqrt(14)
I.42   平方根

 \frac{3}{\sqrt{5}} の分母を有理化せよ

>>> from sympy import expand
>>> expand(3 / sympy.sqrt(5))
3*sqrt(5)/5
I.47   平方根

 \frac{2\sqrt{3}+3\sqrt{2}}{\sqrt{6}} の分母を有理化せよ

>>> from sympy import expand
>>> expand((2*sympy.sqrt(3) + 3*sympy.sqrt(2)) / sympy.sqrt(6))
sqrt(2) + sqrt(3)
I.49   平方根

 x=3+\sqrt{3} ,  y=3-\sqrt{3} のとき次の式の値を計算せよ
 x^2+y^2

>>> expr = x**2 + y**2
>>> expr.subs({x:3+sympy.sqrt(3), y:3-sympy.sqrt(3)}).expand()
24
I.51  二次方程式

 x^2 + 3x - 10 = 0 を解け

>>> from sympy import solve
>>> solve(x**2+2*x-15, x, dict=True)
[{x: -5}, {x: 3}]
I.76  二次方程式

 ax^2 + bx + c = 0 を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  不等式

 2x > 3 を解け

>>> 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  不等式

連立不等式を解け

 \left\{\begin{array}{rrr}
6x + 5 \geqq 2x - 7\\
2x - 3 \geqq 5x - 9
\end{array}\right.
>>> solve((6*x+5 >= 2*x-7, 2*x-3 >= 5*x-9))
(-3 <= x) & (x <= 2)
I.101  一次関数とグラフ

 y = \frac{1}{2}x +1 のグラフをかけ

y = x/2 + 1
p1 = sympy.plot(y, (x, -5, 5))
I.141  二次関数とグラフ

 y = x^2 +1 のグラフをかけ

from sympy import Symbol, plot
x = Symbol('x')
sympy.plot(x**2)
I.168  二次関数とグラフ

次の2つのグラフの交点の座標を求めよ

 \left\{\begin{array}{rrr}
y = x^2 - 5x + 3\\
y = 0
\end{array}\right.
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

 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)

うさんくさい記事リスト

うさんくさいと思った記事を記録しておく

dailyportalz.jp

 

  • 佐野研二郎(サノケンジロウ)グラフィックデザイナー

lifehackplus.jp

 

news.yahoo.co.jp