2020-04-19_hw オンライン プログラミング勉強会

この記事は10分で読めます

このサイトは学部では早稲田で物理を, 修士では東大で数学を専攻し, 今も非アカデミックの立場で数学や物理と向き合っている一市民の奮闘の記録です. 運営者情報および運営理念についてはこちらをご覧ください.

中高の数学の復習から専門的な数学・物理までいろいろな情報を発信しています.
中高数学に関しては自然を再現しよう役に立つ中高数学 中高数学お散歩コース
大学数学に関しては現代数学観光ツアーなどの無料の通信講座があります.
その他にも無料の通信講座はこちらのページにまとまっています.
ご興味のある方はぜひお気軽にご登録ください!


2020-04-19 課題

  • コンテンツの案内ページ
  • GitHub へのリンク
  • 00-introduction_02_jupyter.ipynb を一通り読んで Jupyter notebook(大雑把には Google Colab も同じ)の概要を把握してください。特に次の点に注意して読んでください。
  • テキストセルを作ってください。
    • テキストセルに何か文章を書いてみてください。文章は「あ」だけでも構いません。
    • TeX 形式で次のような式を打ってみてください。「このセル」をダブルクリックで開くとどうすれば式が打てるかわかるので、そのコピペで構いません。他にも資料を漁ってどんな風に書くとどう表示されるか眺めてみるといいでしょう。

$$\int_0^1 f(x) \, dx$$

  • コードセルを作ってください。
    • 01-basic_01_fundamental.ipynb を参考に print("Hello, World!") を実行してみてください。「実行結果出力欄」に「Hello, World!」と出れば成功です。
  • もう 1 つコードセルを作ってください。
    • 01-basic_03_matplotlib.ipynb を参考に、グラフを 1 つ書いてみてください。コピペでグラフが出てくることを確認するだけで十分です。
    • お好みでの追加タスク:いろいろ推測しながらプログラムを少しいじってみて、直線以外のグラフを描いたり、グラフを描く範囲を変えてみてください。

プログラムを勉強するときの注意

  • プログラミング「言語」と言われるように、いわゆる語学を勉強するときのコツがある程度流用できます。
  • 「英作文は英借文」というように、既に動いている(通じる)「例文」をコピペしてみましょう。そこからパーツを少し変えてみてどうなるか試します。
  • プログラミング言語は機械が意味を判定するので、文法に厳格に沿っていないと「きちんと文法通りに話せ」と怒られます。
    • ある程度まで来たらこの文法もきちんと勉強する必要があります。
    • よほどの趣味を持っていない限り、文法の勉強は初学の段階であまり面白いものでもないので、まずは 01-basic_01_fundamental.ipynb に書いてあることを雑に眺めて気分を掴んでください。
    • 公式のチュートリアルも参考になります。
      • Web 上の資源の問題として、リンクがたくさん張られている関係でいろいろな所に飛ばされる(飛びたくなる)ことがあります。本だと自分でページを飛ばさない限り一直線の道を歩むしかないので、Web 上の資源で勉強すると気が散るなら本を買ってざっと眺めるのも一手です。
  • 一般の語学でも実際に読み書きしないと身につかないように、プログラムも実際に読み書きしないと身につきません。Jupyter notebook 配布のいいところはすぐにコード実行できるところにあります。パチパチ実行してみてください。

解答例

参考:TeX

  • $f(x)$ のように 1 つのドルマークで囲むと地の文に普通に埋め込まれる式として $\int f(x) dx$ が書けます。
  • $$\int f(x) dx, \left{a\in A \mid a>0, b>0 \text{かつ} c>0\right}$$ と 2 つのドルマークで囲むと別行立ての式 $$\int f(x) dx$$ が書けます。
  • \begin{align} \int f(x) dx \end{align} などと書くと、数式環境下での式が書けます。
    \begin{align} \int f(x) dx \end{align}
  • 複数行ある複雑な式を書くときは数式環境下で式を書きます:参考リンク
  • 数式環境と $$\int f(x)dx$$ 型との違い・使い分けについては次のように考えましょう.
  • $$\int f(x) dx$$ はあくまで地の文に埋め込みたいが縦・横に長い式なので別行立ての方が見やすい場合に使う
  • \begin{align} \int f(x) dx \end{align} は複数行にわたるハードな式展開・計算を書くときに使う.

$\epsilon$
$\varepsilon$

$$A = (a_{ij}) = \begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n} \ a_{21} & a_{22} & \cdots & a_{2n} \ \vdots & \vdots & \ddots & \vdots \ a_{m1} & a_{m2} & \cdots & a_{mn} \end{pmatrix}.$$

参考:Markdown

  • テキストセルは TeX の他, markdown という形式で書けます.
  • 参考リンク
  • 参考リンク
  • 参考リンク
  • 段落分けや文字の強調などはこの形式に沿っています.
  • 主に技術系の文書を書くために使われる書式なので, 過度な装飾はできません (そもそもそういう機能がない).

コード例

  • sympy のサンプルを紹介します。
  • Google Colab 上ではオリジナルの Jupyter より面倒で、追加処理が必要です。
    • オリジナルの Jupyter では動くのに Google Colab 上では動かない (らしい) プログラムもあります
    • 例:4 次方程式の解の公式の表示.
  • 実際に一通り眺めて sympy をできる限り Google Colab 上でも動くようにするのはこの勉強会の目的の 1 つです.
!pip install --upgrade sympy

import sympy as sp
from sympy.plotting import plot
from IPython.display import display

def custom_latex_printer(expr, **options):
    from IPython.display import Math, HTML
    from google.colab.output._publish import javascript
    url = "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-AMS_CHTML"
    javascript(content="""window.MathJax = {
        tex2jax: {
            inlineMath: [ ['$','$'] ],
            processEscapes: true
        }
        };""")
    javascript(url=url)
    return sp.latex(expr, **options)

sp.init_printing(use_latex="mathjax", latex_printer=custom_latex_printer)

x = sp.Symbol('x')
expr = x**2-12*x+8
display(expr)
Collecting sympy
[?25l  Downloading https://files.pythonhosted.org/packages/ce/5b/acc12e3c0d0be685601fc2b2d20ed18dc0bf461380e763afc9d0a548deb0/sympy-1.5.1-py2.py3-none-any.whl (5.6MB)
     |████████████████████████████████| 5.6MB 8.4MB/s 
[?25hRequirement already satisfied, skipping upgrade: mpmath>=0.19 in /usr/local/lib/python3.6/dist-packages (from sympy) (1.1.0)
Installing collected packages: sympy
  Found existing installation: sympy 1.1.1
    Uninstalling sympy-1.1.1:
      Successfully uninstalled sympy-1.1.1
Successfully installed sympy-1.5.1



<IPython.core.display.Javascript object>

$\displaystyle x^{2} – 12 x + 8$

x = sp.Symbol('x')
y = sp.Symbol('y')
expr1 = 2*x + 3*y - 6
expr2 = 3*x + 2*y - 12
display(expr1)
display(expr2)
# display(sp.solve((expr1, expr2))) # Math Processing error になる
<IPython.core.display.Javascript object>

$\displaystyle 2 x + 3 y – 6$

<IPython.core.display.Javascript object>

$\displaystyle 3 x + 2 y – 12$

display(sp.solve((expr1, expr2)))
<IPython.core.display.Javascript object>

$\displaystyle \left{ x : \frac{24}{5}, \ y : – \frac{6}{5}\right}$

  • 上の方程式は厳密解として $x=4.8,y=-1.2$ を持つ。
  • これの近似解として例えば $x=4.78888888,y=-1.1999999$
p = plot(-(2/3)*x - 2, - (3/2)*x - 6, legend=True, show=False)
p[0].line_color = 'b'
p[1].line_color = 'r'
p.show()
/usr/local/lib/python3.6/dist-packages/sympy/plotting/plot.py:1065: MatplotlibDeprecationWarning: 
The set_smart_bounds function was deprecated in Matplotlib 3.2 and will be removed two minor releases later.
  self.ax[i].spines['left'].set_smart_bounds(True)
/usr/local/lib/python3.6/dist-packages/sympy/plotting/plot.py:1066: MatplotlibDeprecationWarning: 
The set_smart_bounds function was deprecated in Matplotlib 3.2 and will be removed two minor releases later.
  self.ax[i].spines['bottom'].set_smart_bounds(False)
png
eq1 = x**2 + y**2 - 1
eq2 = x - y

plot1 = sp.plot_implicit(eq1, line_color="blue", show=False)
plot2 = sp.plot_implicit(eq2, line_color="green", show=False)
plot1.extend(plot2)
plot1.show()
/usr/local/lib/python3.6/dist-packages/sympy/plotting/plot.py:1065: MatplotlibDeprecationWarning: 
The set_smart_bounds function was deprecated in Matplotlib 3.2 and will be removed two minor releases later.
  self.ax[i].spines['left'].set_smart_bounds(True)
/usr/local/lib/python3.6/dist-packages/sympy/plotting/plot.py:1066: MatplotlibDeprecationWarning: 
The set_smart_bounds function was deprecated in Matplotlib 3.2 and will be removed two minor releases later.
  self.ax[i].spines['bottom'].set_smart_bounds(False)
/usr/local/lib/python3.6/dist-packages/sympy/plotting/plot.py:1096: MatplotlibDeprecationWarning: 
The set_smart_bounds function was deprecated in Matplotlib 3.2 and will be removed two minor releases later.
  ax.spines['left'].set_smart_bounds(False)
/usr/local/lib/python3.6/dist-packages/sympy/plotting/plot.py:1097: MatplotlibDeprecationWarning: 
The set_smart_bounds function was deprecated in Matplotlib 3.2 and will be removed two minor releases later.
  ax.spines['bottom'].set_smart_bounds(False)
png
import sympy as sp
from sympy.plotting import plot
from IPython.display import display

def custom_latex_printer(expr, **options):
    from IPython.display import Math, HTML
    from google.colab.output._publish import javascript
    url = "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-AMS_CHTML"
    javascript(content="""window.MathJax = {
        tex2jax: {
            inlineMath: [ ['$','$'] ],
            processEscapes: true
        }
        };""")
    javascript(url=url)
    return sp.latex(expr, **options)

a,b,c,d,x = sp.symbols('a,b,c,d,x')
expr = a*x**3 + b*x**2 + c*x + d

display(sp.solve(expr, x, dict=True))

$\displaystyle \left[ \left{ x : – \frac{- \frac{3 c}{a} + \frac{b^{2}}{a^{2}}}{3 \sqrt[3]{\frac{\sqrt{- 4 \left(- \frac{3 c}{a} + \frac{b^{2}}{a^{2}}\right)^{3} + \left(\frac{27 d}{a} – \frac{9 b c}{a^{2}} + \frac{2 b^{3}}{a^{3}}\right)^{2}}}{2} + \frac{27 d}{2 a} – \frac{9 b c}{2 a^{2}} + \frac{b^{3}}{a^{3}}}} – \frac{\sqrt[3]{\frac{\sqrt{- 4 \left(- \frac{3 c}{a} + \frac{b^{2}}{a^{2}}\right)^{3} + \left(\frac{27 d}{a} – \frac{9 b c}{a^{2}} + \frac{2 b^{3}}{a^{3}}\right)^{2}}}{2} + \frac{27 d}{2 a} – \frac{9 b c}{2 a^{2}} + \frac{b^{3}}{a^{3}}}}{3} – \frac{b}{3 a}\right}, \ \left{ x : – \frac{- \frac{3 c}{a} + \frac{b^{2}}{a^{2}}}{3 \left(- \frac{1}{2} – \frac{\sqrt{3} i}{2}\right) \sqrt[3]{\frac{\sqrt{- 4 \left(- \frac{3 c}{a} + \frac{b^{2}}{a^{2}}\right)^{3} + \left(\frac{27 d}{a} – \frac{9 b c}{a^{2}} + \frac{2 b^{3}}{a^{3}}\right)^{2}}}{2} + \frac{27 d}{2 a} – \frac{9 b c}{2 a^{2}} + \frac{b^{3}}{a^{3}}}} – \frac{\left(- \frac{1}{2} – \frac{\sqrt{3} i}{2}\right) \sqrt[3]{\frac{\sqrt{- 4 \left(- \frac{3 c}{a} + \frac{b^{2}}{a^{2}}\right)^{3} + \left(\frac{27 d}{a} – \frac{9 b c}{a^{2}} + \frac{2 b^{3}}{a^{3}}\right)^{2}}}{2} + \frac{27 d}{2 a} – \frac{9 b c}{2 a^{2}} + \frac{b^{3}}{a^{3}}}}{3} – \frac{b}{3 a}\right}, \ \left{ x : – \frac{- \frac{3 c}{a} + \frac{b^{2}}{a^{2}}}{3 \left(- \frac{1}{2} + \frac{\sqrt{3} i}{2}\right) \sqrt[3]{\frac{\sqrt{- 4 \left(- \frac{3 c}{a} + \frac{b^{2}}{a^{2}}\right)^{3} + \left(\frac{27 d}{a} – \frac{9 b c}{a^{2}} + \frac{2 b^{3}}{a^{3}}\right)^{2}}}{2} + \frac{27 d}{2 a} – \frac{9 b c}{2 a^{2}} + \frac{b^{3}}{a^{3}}}} – \frac{\left(- \frac{1}{2} + \frac{\sqrt{3} i}{2}\right) \sqrt[3]{\frac{\sqrt{- 4 \left(- \frac{3 c}{a} + \frac{b^{2}}{a^{2}}\right)^{3} + \left(\frac{27 d}{a} – \frac{9 b c}{a^{2}} + \frac{2 b^{3}}{a^{3}}\right)^{2}}}{2} + \frac{27 d}{2 a} – \frac{9 b c}{2 a^{2}} + \frac{b^{3}}{a^{3}}}}{3} – \frac{b}{3 a}\right}\right]$


中高の数学の復習から専門的な数学・物理までいろいろな情報を発信しています.
中高数学に関しては自然を再現しよう役に立つ中高数学 中高数学お散歩コース
大学数学に関しては現代数学観光ツアーなどの無料の通信講座があります.
その他にも無料の通信講座はこちらのページにまとまっています.
ご興味のある方はぜひお気軽にご登録ください!

  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

このサイトについて

数学・物理の情報を中心にアカデミックな話題を発信しています。詳しいプロフィールはこちらから。通信講座を中心に数学や物理を独学しやすい環境づくりを目指して日々活動しています。
  • このエントリーをはてなブックマークに追加
  • LINEで送る

YouTube チャンネル登録

講義など動画を使った形式の方が良いコンテンツは動画にしています。ぜひチャンネル登録を!

メルマガ登録

メルマガ登録ページからご登録ください。 数学・物理の専門的な情報と大学受験向けのメルマガの 2 種類があります。

役に立つ・面白い記事があればクリックを!

記事の編集ページから「おすすめ記事」を複数選択してください。