#はじめに
1年後期にPythonを使用した講義があったのでその記録をしておきます。
簡単な数学の問題もありましたが主に微分積分、線形代数に関する問題ををPythonにも解いてもらおうぜって感じの講義です。
使ったのはこれです。
まだまだ使いこなせていませんが...。
(当時のコードをまんま載せただけなのでプログラムへの指摘はなしで...)
- numpy
- sympy
- pandas
- matplotlib
- math
- mpl_toolkits.mplot3d
これ以外にも選択課題でベイズ最適化と巡回セールスマン問題と画像認識をやりましたがコピペだったので講義に関する最後の記事に参考にしたQiita記事だけ載せておきます。
import math
import nunmpy as np
import sympy
sympy.init_printing() #綺麗に見せたいんや
##問題とコード
問1.次の6つの数を小さい順に並べよ。
$$
\sqrt[3]{4}, \hspace{5pt} \sqrt[2]{2}, \hspace{5pt} \sqrt[]{\sqrt[]{8}}, \hspace{5pt} 2, \hspace{5pt} 2^{3/5}, \hspace{5pt} (log_281)/(log_23)
$$
改めて見ると見にくいですね。
a = 2
b = 4
c = 8
d = math.log(81, 2)
e = math.log(3, 2)
A = math.pow(b, 1/3) #A=4**1/3
B = math.pow(a, 1/2) #B = 2**1/2
C = math.pow(c, 1/4) #C = 8**(1/4)
D = print(format(a, '.2f')) #D = 2
E = math.pow(b, 3/5) #E = 2**3/5
F = d/e #F = log(81, 2)/log(3, 2)
#計算結果を小数第2位まで表示する。
print(format(A, '.2f'))
print(format(B, '.2f'))
print(format(C, '.2f'))
print(format(E, '.2f'))
print(format(F, '.2f'))
2.00
1.59
1.41
1.68
2.30
4.00
小さい順に並び変える必要があるので最後に少しコードを追加します。
配列の要素をA,B,C,D,E,Fとしたかったですがそれでやるとエラーが起きるので一つずつ打ち込みました。
今回の場合は5個だったので良かったですが、もっと多いとき困りますね...。
number = [2.00, 1.59, 1.41, 1.68, 4.00]
number.sort() #小さい順に並べる。
number
[1.41, 1.59, 1.68, 2.0, 2.3, 4.0]
問2.$$
f(x) ≡ \frac{1}{1 + x^2 }のとき、f'(x), \hspace{3pt}f''(x)を求めなさい。
$$
#x, yを定義する。
x = sympy.Symbol('x')
y = sympy.Symbol('y')
#関数を定義する。
y1 = 1/(1+x**2)
y2 = sympy.diff(y1) #y2はy1の一階微分
y3 = sympy.diff(y2) #y3はy2の一階微分(y3はy1の二階微分)
print(y2)
print(y3)
-2*x/(x**2 + 1)**2
8*x**2/(x**2 + 1)**3 - 2/(x**2 + 1)**2
うまいこと表示できなかったので妥協させてください...。
y2
$ \frac{-2x}{(x^2 + 1)^2} $
y3
$ \frac{8x^2}{(x^2 + 1)^3} - \frac{2}{(x^2 + 1)^2} $
問3.不定積分・定積分を求めなさい。
(a)$\int (x^3 + 2x^2 + 1 )dx$
(b)$ \int (\frac{1}{\sqrt[]{x}} + e^x)dx$
(c)$ \int (x^2 + 3x + 1)e^xdx$
(d) $ \int_{1}^{4} (\sqrt[]{x} + x)dx$
from sympy import exp
#x,yを定義する。
x = sympy.Symbol('x')
y = sympy.Symbol('y')
#関数を定義する。
y1 = x**3 + 2*x**2 + 1
y2 = 1/x**1/2+ exp(x)
y3 = (x**2 + 3*x + 1)*exp(x)
y4 = x + x**1/2
#関数y1, y2, y3, y4を積分する。
a = sympy.integrate(y1)
b = sympy.integrate(y2)
c = sympy.integrate(y3)
d = sympy.integrate(y4,(x, 1, 4))
print(a)
print(b)
print(c)
print(d)
x**4/4 + 2*x**3/3 + x
exp(x) + log(x)/2
(x**2 + x)*exp(x)
45/4
先ほどに続き妥協...。
a
$ \frac{x^4}{4} + \frac{2x^3}{3} + x $
b
$ e^x + \frac{logx}{2}$
c
$ (x^2 + x)e^x $
d
$ \frac{45}{4} $
問4.テイラー展開を用いて関数f(x)を最低次から3つの非ゼロ項を書きなさい。
(a)$ f(x) = (1 + x)^4$
(b)$ f(x) = \frac{1}{(1 - x)}$
(c)$ f(x) = e^x$
(d)$ f(x) = cosx$
from sympy import exp, cos
x = sympy.Symbol('x')
y = sympy.Symbol('y')
#関数を定義する。
y1 = (1 + x)**4
y2 = 1/(1-x)
y3 = exp(x)
y4 = cos(x)
#テイラー展開する。
Y1 = sympy.series(y1, n = 3)
Y2 = sympy.series(y2, n = 3)
Y3 = sympy.series(y3, n = 3)
Y4 = sympy.series(y4, n = 6)
#計算結果を表示する。
print(Y1)
print(Y2)
print(Y3)
print(Y4)
1 + 4*x + 6*x**2 + O(x**3)
1 + x + x**2 + O(x**3)
1 + x + x**2/2 + O(x**3)
1 - x**2/2 + x**4/24 + O(x**6)
Y1
$ 1 + 4x + 6x^2 + O(x^3) $
Y2
$ 1 + x + x^2 + O(x^3) $
Y3
$ 1 + x + \frac{x^2}{2} + O(x^3)$
Y4
$ 1 -\frac{x^2}{2} + \frac{x^4}{24} + O(x^6) $
#最後に
本当にこんなコードの書き方でいいんか?って感じのコードな気がします。
今回はその1ですが、最終的にはその5~6までいきそうです。
またのんびり書こうと思います。
一旦投稿しますが修正繰り返します。