Warning: First parameter must either be an object or the name of an existing class in /home/inomaty/inopage.com/public_html/wp-content/plugins/all-in-one-seo-pack/inc/general/aioseop-robots-meta.php on line 132

Warning: First parameter must either be an object or the name of an existing class in /home/inomaty/inopage.com/public_html/wp-content/plugins/all-in-one-seo-pack/inc/general/aioseop-robots-meta.php on line 136

Warning: First parameter must either be an object or the name of an existing class in /home/inomaty/inopage.com/public_html/wp-content/plugins/all-in-one-seo-pack/inc/general/aioseop-robots-meta.php on line 132

Warning: First parameter must either be an object or the name of an existing class in /home/inomaty/inopage.com/public_html/wp-content/plugins/all-in-one-seo-pack/inc/general/aioseop-robots-meta.php on line 136
コンテンツへスキップ

短期集中:振動論と制御理論 工学系の数学入門 の感想です。

振動を例にモデル化しグラフを描くまで、制御の一番はじめの体験ができる本。

短期集中:振動論と制御理論 工学系の数学入門 日本評論社 吉田 勝俊

期間: ~2019年2月11日の3週間程度

内容(個人的まとめ)

  1. 力学の運動方程式
  2. 単振動,減衰振動,強制振動
  3. スケール変換
  4. ハーモニックバランス
  5. 複素数,ラプラス変換,伝達関数
  6. 解析力学入門
  7. 棒立て制御(倒立振子)
  8. 線形化

特徴

単振り子や倒立振子を取り上げて、ソフト「MATX」で計算を体験しながら理解できる本でした。全体的に簡単に書いているので、なんとなく理解できます。 キーワードが載っているので、次につなげることができます。

感想

(参考)読む前: 電気科3年後期のテスト期間でした。
力学は入試+学部1年でやったきりで、さっぱりわかりませんでした。 制御工学の初歩的知識は持っており、なんとなく伝達関数を記述できました。 また、私はpythonで計算しましたが、pythonはこれで初めてさわりました(最下部のリンク)。

全体

この本の内容は

うちの卒研生が配属直後の1カ月以内に本書の全課題をこなし、

本書 「はじめに」より

と書かれている通りの難易度です。

力学、振動の運動方程式の解き方など、非常に基本的な部分からスタートして倒立振子の姿勢制御までを紹介しています。 数値計算ソフトMATXを使用しながら演習できます。

私は MATX ではなくPythonでやりました。pythonは方程式を解いたりグラフを描いたりすることが簡単にできるのでおすすめです。MATXのコードが載っているので、コーディングの参考にできました。

力学がさっぱりわからない状態で、倒立振子の制御がやりたかった私に最適な本でした。参考にした本、この後に読むといい本が載っているのもかなり有難かったです。

1. 力学の運動方程式

よくある内容です。

2. 単振動,減衰振動,強制振動

電気科の私にはLRC回路が馴染みがありましたが、ばねとダンパーで復習できました。

3. スケール変換

2次方程式を解くのは面倒なので、パラメータを減らして1次方程式にします。このような操作をスケール変換と呼びます。 1次方程式にすると、プログラムで解くのが簡単になります。

4. ハーモニックバランス法

解き方です。

5. 複素数,ラプラス変換,伝達関数

基本的な内容です。

6. 解析力学入門

この本で、解析力学というものを初めて知りました。それだけでもこの本を読んで良かったと思いました。

解析力学では、運動の座標を変化させたり一般化して表現したりするみたいです。ラグランジュの運動方程式の知識があると、一般化された座標の運動方程式が比較的簡単に立てられます。

ラグランジュの運動方程式をこの本だけで理解するのは厳しかったです。

7. 棒立て制御(倒立振子)

ラグランジュの運動方程式は使わずに倒立振子の運動方程式を立てて、グラフに書きました(下記の関連記事)。途中式は(よくあることですが)書かれていないので大変でした。それっぽい波形が得られたので満足です。

8. 線形化

あまりよくわからなかったのでさらっと読みました。

次に読みたい

解析力学キャンパス・ゼミ 改訂2 マセマ出版社 馬場 敬之 (著)

力学 裳華房 原島 鮮 (著)

Pythonによる制御工学入門 オーム社 南 裕樹 (著)

関連記事

Jupyter Notebookで倒立振子の振動波形を表示する

研究などでpythonを使って計算したりグラフ描画したりしたい人のための基礎事項まとめ本」でした。

「研究などでpythonを使って計算したりグラフ描画したりしたい人のための基礎事項まとめ本」でした。

科学技術計算のためのPython入門――開発基礎,必須ライブラリ,高速化 技術評論社 中久喜 健司 (著)

期間: 2019年9月4週目~10月1週目くらい

内容(個人的まとめ)

  1. pythonプログラミングの例
  2. IPython,Spyderなど
  3. pythonの基礎事項
  4. NumPy
  5. pandas
  6. SciPy
  7. Matplotlib
  8. 高速化

特徴

科学技術計算でPythonを使用したいと考えている方に向けた本になっていました。特定の何かをしようというものではなく、例が豊富で実行しながらpythonでできることを一通り網羅的に紹介して貰える本です。

感想

(参考として)読む前:pythonのフロー制御とモジュールを使って簡単な計算を自動化するプログラムが作成できる程度の知識がありました。一方で、Open CVなどその時々に必要なモジュールがないかググり、Qiita等に書いてある範囲内で使用することしかできませんでした。

全体

読む以前から多少の知識がある状態で、基本事項を改めて確認し直したい私にはとてもちょうどいい本でした。もしかしたらpythonを書いたことのない方には難しいかもしれませんが、例が豊富なのでひとまず読むことはできるかと思います。

公式リファレンスを読むのはまだ重い...という私と同じような方におすすめです。

1. pythonプログラミングの例

プログラムを書き、テストし、高速化して利用するという流れを一通り見せてくれようとしている章でした。作業フローを教えてくれる本はあまりであったことがなかったので貴重です。

例としてロケットシミュレーターを挙げており、公開されているコードを落としてこれるので実行しながら読み進められるはずです。が!地図をプロットするmatplotlib.basemapがエラー吐きまくりだったのでコードの実行はあきらめました。

2. IPython,Spyderなど

私はJupyter Notebookで普段書いています。Jupyter Notebookで書くとグラフや画像がその場で表示されるしTab補完もできるのでで重宝しています。

IPythonとはどんなものか、Spyderとは何かといった、知らなくてもどうにかなるが知っていると便利、でもわざわざ調べないことが書いてあり有難かったです。

3. pythonの基礎事項

一応知っていた内容が多い部分でした。「インデキシングとスライシングっていう名前の上での分類があったんだー」というような、教科書改めて読むと面白いという感じの内容です。

4. NumPy

NumPyいつもimportするけどnp.piしか使わないじゃん、と思っていた俺を殴りたい。多次元配列ndarrayとはどのようなものか、何がいいのかということを、例を実行しながらイメージできました。

5. pandas

よく聞くpandasとNumPyの違いとは何か、どんな時にpandasを使えばいいのか、なんとなく分かった気になれます。主にデータ型Series,DataFrame,Panelsに関して書かれています。

ただし、Panelsに関しては、「将来的になくなるよ、使わない方がいいよ」と警告してもらったので(下記)読み飛ばしました。本の悪い部分は情報の更新がわからないことなので仕方がないですね。

Panel is deprecated and will be removed in a future version.
The recommended way to represent these types of 3-dimensional data are with a MultiIndex on a DataFrame, via the Panel.to_frame() method
Alternatively, you can use the xarray package http://xarray.pydata.org/en/stable/.

6. SciPy

SciPyの項目では、以下の項目について例を挙げていました。

  • 統計関数
  • 離散フーリエ解析
  • ボーデ線図
  • データの内挿(グラフに近似線を追加するなど)
  • デジタル信号フィルタの設計
  • 行列の分解

7. Matplotlib

使いたいときにググればいいと思い、読み飛ばしました。

8. 高速化

自分が今必要としていない部分だと思いましたので、読み飛ばしました。

次に読みたい

関連記事

CSVファイルを指定して極座標系でグラフを描き、画像に出力するまでをやります。

ファイルを指定して極座標系でグラフを描き、画像に出力するまでをやります。

目次

  • 作業環境
  • CSV
  • 極座標系
  • ファイルのインポート

作業環境

  • anaconda 1.7.2
  • python 3.7.3
  • vscodeとexcel

jupyter notebookというIPythonを使用します。

jupyter notebook

jupyter notebook はサーバを立ててwebブラウザ上で文章を表示させるものです。 テキストエディタと同じ感覚で使用でき、IPythonの機能であるコードの解説の表示や図を含む実行結果をまとめて表示できます。

図を描くときは、実行してすぐ図を確認できるjupyterが楽です。anacondaをインストールするとまとめてインストールしてくれます。

CSV

csvって何

カンマで区切られた数値です。

VS code上で見やすく

csvはカンマで区切られているだけのデータなので見にくいです。そこで私が使っているvscode拡張機能を紹介します。

Rainbow CSV

Rainbow CSV

Excel VIewer

Excel viewer

ファイルを右クリックかcommand palletでpreviewが見れます。

極座標系の表示

=>matplotlib.pyplot.polar -matplotlib

import matplotlib.pyplot as plt
import numpy as np

r = 1
theta = 45
theta_rad = np.deg2rad(theta)# 角度をradに変換

ax=plt.subplot(projection="polar") #軸を表示
ax.scatter(theta_rad, r, c="red", s =15)

theta = np.arange(0.0, 4*2*np.pi, 0.01) #角度
r = 0.5*theta #半径
plt.polar(theta,r) # 極座標グラフのプロット

plt.savefig('PolarCoordinate.png')
plt.show()

subplotについて

fig.add_subplot(行,列,場所)を表します。(1,2,1)では列が(つまり縦方向に)半分になったグラフのうち1つめ(上側)が1つ表示されるらしいです。

import matplotlib.pyplot as plt

fig = plt.figure()
fig.add_subplot(1,2,1)
plt.show()
fig.add_subplot(1,2,1)
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)

ファイルのインポート

使っているデータは私が他の目的で作ったデータを適当に弄った意味のない数値列です。

import pandas as pd

df = pd.read_csv('fact_x2.csv')
print(df)
     turn[] length[mm]   total [mm]  radius[mm]    deg[deg]    \
0         0       0.00         0.00      0.0000    0.000000     NaN   
1         1      11.45        11.45      7.4000   88.653605     NaN   
2         1       0.45        11.90      7.4000   92.137808     NaN   
3         1      11.45        23.35      7.4000  180.791412     NaN   

~割愛~

117      17      16.10       854.45      9.4496   52.276096     NaN   
118      17       1.15       855.60      9.4496   59.248893     NaN   
119      17      16.10       871.70      9.4496  156.868057     NaN   

[120 rows x 10 columns]
import pandas as pd

df = pd.read_csv('fact_x2.csv')
print(df['turn[]'])
0       0
1       1
2       1
3       1

~割愛~

117    17
118    17
119    17
Name: turn[], Length: 120, dtype: int64

​指定できるのは行(Colum)。 横に伸びてる方です。

与える角度はdegじゃなくてradですので注意。

完成

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.read_csv('fact_x2.csv')
r = df['Radius[mm]']
deg = df['Deg[deg]']
radian = np.deg2rad(deg)

fig = plt.figure(figsize=(10, 10))#新しい図面
ax = fig.add_subplot(111, projection='polar')#軸の表示
ax.plot(radian,r, '-o')
i=2
while i < 122:
    ax.plot([radian[i],radian[i-1]],[r[i], r[i-1]], 'or-')
    i +=2
print(np.pi)
plt.savefig('PolarCoordinate.png')
plt.show()

関数化

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

"""
CSVファイルから極座標系のグラフをプロットする
入力:(CSVファイル名, 出力画像ファイル名,半径、角度)
出力:出力画像ファイル名.png
"""
def polar(in_file,out_file,param_r,param_theta):
    df = pd.read_csv(in_file) #ファイル読み込み
    r = df[param_r]
    deg = df[param_theta]
    radian = np.deg2rad(deg) #deg をradに変換
    Len=len(r)#配列の長さを取得

    fig = plt.figure(figsize=(10, 10))#新しい図面
    ax = fig.add_subplot(111, projection='polar')#軸の表示
    ax.plot(radian,r, '-o') 
    i=2
    while i < Len: #1つ飛ばしどうしを赤線で結ぶ
        ax.plot([radian[i],radian[i-1]],[r[i], r[i-1]], 'xr-')
        i +=2
    plt.savefig(out_file)
    plt.show()

polar('test.csv','Polar_test.png','Radius[mm]','Deg[deg]')

雑記

進捗がない!!!!!!!!!!!
[追記](2019/9/19)「完成」のコードを変更しました

参考