Python を使って方程式を解いたり、微分や積分などを行うことが出来ます。
簡単です!
パソコンに数学を解かせることは、数学の深い理解に繋がります。
Python の使い方にも慣れ、一石二鳥です。
Pythonはインストールなし(オンライン)で使うことが出来ます。
詳しくは 教育現場で Python を使う 1. Google Colaboratory を見てください。
次は、グラフィック編をつくるので、待っててください💛
最初に Google アカウント取得 Chrome を利用する。
Google Colaboratory(Python の立ち上げ)
https://colab.research.google.com にアクセスする
ノートブックを新規作成
2回目からはGoogle ドライブから直接アクセスできます。
☆下のコードは、CTRL+C、CTRL+V でセルに張り付けて実行できます。
最初に次の3行を打ち込んでおくと、楽です。
from sympy import *
x,y,z=symbols('x,y,z')
1.実数 Rational Sqrt #分数、√、近似値
1/3
2**0.5
Rational(1,2)+Rational(1,3)
sqrt(2)
sqrt(2)**3
pi
N(pi)
N(pi,100)
2.式の入力、整式の因数分解・展開 expand, factor
x=Symbol('x') #Symbol クラスのオブジェクトを作る。
2*x**2+3*x+3
cos(x)**2-1
2**x
exp(2*x)
E**2x
f=(x+y)**2
g=f.expand()
g.factor()
factor(g)
expand((2*x+3*y-1)*(x-4*y+3))
collect(_,x)
(x+1)/x
apart(_)
(5*x**2+x-5)/(x**2+3*x+2)
_.apart()
4.式の簡約 simplify, trigsimp, expand_trig, powsimp, expand_power_exp, expand_log, logcombine
f=cos(x)**4-2*cos(x)**2*sin(x)**2+sin(x)**4
simplify(f)
trigsimp(f)
tan(x)*cos(x)
_.trigsimp()
expand(sin(x+y))
expand_trig(sin(x+y))
expand_trig(cos(2*x))
a,b=symbols('a,b')
x**a*x**b
powsimp(x**a*x**b)
powsimp(x**a*y**b,force=True)
expand_power_exp(x**(a+b))
expand_log(log(x**2))
expand_log(log(x**2),force=True)
expand_log(log(x*y),force=True)
logcombine(a*log(x)-b*log(y),force=True)
5.微積分 テイラー展開 diff, integrate, series, Derivative,Integral,series
diff(x**2,x)
diff(x**5,x,3)
diff(x**2*y**3,x,y)
integrate(x**5,x)
integrate(x**5,(x,0,1))
f=exp(x)
f.series(x)
f.series(x,0,10)
Derivative(x**3,x)
Integral(x**2,(x,0,1))
_.doit()
sin(x)/x
limit(f,x,0)
x/exp(x)
limit(_,x,oo)
1/x
limit(_,x,0,'-')
f=3*x**4
f.subs(x,3)
f.subs(x,y+1)
f.subs(x,sin(x))
8.Σ 和 summation, Sum
summation(x,(x,1,100))
Sum(x,(x,1,100))
_.doit()
n,k=symbols('n,k')
g=Sum(k**2,(k,1,n))
_.doit()
factor(_)
g.subs(n,100)
_.doit()
9.方程式 solve,solveset,nonlinsolve
solve(x**2-1,x)
solveset(Eq(x**2,1),x) #x**2=1
solve([x**2+y**2-10,x+y],[x,y])
nonlinsolve([x**2+y**2-10,x+y],[x,y])
f=3*x+4*y
g=x-4*y-5
solve([f,g],[x,y])
solveset(sin(x)-1,x)
10.順列、組合せ factorial,binomial
n,k = symbols('n,k')
factorial(n)
_.subs(n,3)
binomial(n,k)
_.subs(n,6).subs(k,2)
11.ベクトル ,dot,norm
a1,a2,a3 = symbols('a1 a2 a3')
a=Matrix([a1,a2,a3])
a
b = Matrix(symbols('b1:4'))
b
a.dot(b)
b.norm()
12.行列 Matrix, eye, zeros, T
M1=Matrix([[1,2],[3,4]])
M2=Matrix([[1,3],[3,1]])
M1*M2
M1**(-1)
M1.row(0)
M1.col(1)
M1.T
eye(3)
zeros(3)
コメントをお書きください
Tda (月曜日, 03 5月 2021 19:05)
方程式を出力する際に簡約化する方法はご存知でしょうか?
例えば, 陰関数表示された曲線 f(x,y)=0 上の点 (x1,y1)における接線の方程式
を出力するコードを考えています.単純に
def tan_0(f, x, y, x1, y1):
par_x=diff(f,x)
par_y=diff(f,y)
return simplify( par_x.subs( [(x,x1), (y,y1)] ) * (x-x1) + par_y.subs( [(x,x1), (y,y1)] ) * ( y-y1 ) )
で定義した場合に, 曲線 f(x,y)=x^3 + y^3 -3 x y
の(3/2, 3/2)における接線の方程式を計算すると、
9x / 4+ 9y/4 -27/4
と出力されます.9x/4+9y/4-27/4=0として, 簡約にして, x+y-3=0
等と表示できるようにしたいのですが,それは可能でしょうか?
小林(管理者) (月曜日, 03 5月 2021 21:07)
Tda様
コメントおよび問題提起ありがとうございます。Sympy で関数を組むのは初めてだったので、勉強になりました。Eq(f,0)とおけば f=0 となるのでそれに Simplify を施しました。ちなみに Google Colaboratory を用いています。また、記事にさしてもらえたらと思います。
def tan_0(f, x, y, x1, y1):
par_x=diff(f,x)
par_y=diff(f,y)
return simplify(Eq(( par_x.subs( [(x,x1), (y,y1)] ) * (x-x1) + par_y.subs( [(x,x1), (y,y1)] ) * ( y-y1 ) ),0))
f=x**3+y**3-3*x*y
tan_0(f,x,y,Rational(3/2),Rational(3/2))
結果は
x+y=3
と出力されました。
Tda (月曜日, 03 5月 2021 22:42)
Eq(f,0)というやり方があったのですね.勉強になりました.ありがとうございました.
jupyter notebookとPythonTeXで実行したところ, 確かに,x+y=3と出力されました.
小林(管理人) (火曜日, 04 5月 2021 06:42)
Tdaさん
お役に立ててよかったです。
使われている微分の公式が、私(高校教員)の普段使っているものと異なっているので、興味をもちました。
Tdaさんは普段どのような分野で SymPy を使っておられるのですか?
差し支えなければ教えてもらえたらと思います。
Tda (火曜日, 04 5月 2021 09:20)
小林様
私は高専の数学教員をしております.今年は高専3,4年生を担当しており,偏微分,線形代数(行列式,線形変換,固有値),ベクトル解析などの授業で演習問題を作成する必要がありました.その問題作成の過程でSympyにたどり着きました.私が所属する高専では,大日本図書という出版社の教科書が採用されており,その教科書の内容を参考にしています.
小林(管理者) (火曜日, 04 5月 2021)
Tdaさん
高専で数学を教えておられるとのこと、SymPy の活用方法も沢山ありそうですね。
偏微分やベクトル解析等も勉強してみたいです。
本県(山口)では、今年から全ての高校生に端末 (Surface Go)が配布されました。
本校は、バリバリの進学校ではないのですが、先日 Wolfram Alpha を生徒に紹介したところ、結構興味をもってくれました。
今後とも、数学、コンピュータについて発信していきたいと思っておりますのでよろしくお願いします。