2
0

More than 3 years have passed since last update.

講義で書いたPythonのコードをまとめてみた その1

Posted at

はじめに

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)
$$

改めて見ると見にくいですね。

問1
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)を求めなさい。
$$

問2
#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

うまいこと表示できなかったので妥協させてください...。

LaTeX表記
y2

$ \frac{-2x}{(x^2 + 1)^2} $

LaTeX表記
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$

問3
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

先ほどに続き妥協...。

LaTeX表記
a

$ \frac{x^4}{4} + \frac{2x^3}{3} + x $

LaTeX表記
b

$ e^x + \frac{logx}{2}$

LaTeX表記
c

$ (x^2 + x)e^x $

LaTeX表記
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$

問4
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)
LaTeX表記
Y1

$ 1 + 4x + 6x^2 + O(x^3) $

LaTeX表記
Y2

$ 1 + x + x^2 + O(x^3) $

LaTeX表記
Y3

$ 1 + x + \frac{x^2}{2} + O(x^3)$

LaTeX表記
Y4

$ 1 -\frac{x^2}{2} + \frac{x^4}{24} + O(x^6) $

最後に

本当にこんなコードの書き方でいいんか?って感じのコードな気がします。
今回はその1ですが、最終的にはその5~6までいきそうです。
またのんびり書こうと思います。
一旦投稿しますが修正繰り返します。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0