つれづれなる備忘録

日々の発見をあるがままに綴る

関数電卓ツールiMemo

ちょっとした変数計算や検算をするのに以前はエクセルを立ち上げていたが、iMemoという関数電卓ツールを使用している。

V-Tails - imemo

もともとはWindows上で複素数にも対応した関数グラフ電卓ツールだが、自分の使い方としては計算のみでグラフ表示の部分はあまり使っていない。 電気回路計算に使いやすいように作られているが、一般的な計算にも十分使える。

メリットとしては

  1. 動作が非常に軽い

  2. エディタのように使えて、計算式や結果も自動保存される

  3. いろいろな関数がサポートされている

  4. 複素数計算ができる

Windows 10は動作OSに入っていないが、自分のWin10 PCでは動作している。

iMemo(複素メモ)の詳細情報 : Vector ソフトを探す!

gnuplotによるグラフ作成31~データ演算してプロット

 今回はgnuplotを用いてデータファイルをプロットする際に、データを演算してプロットする方法について紹介する。

1. データファイルの表示

 今回は以下のdata3.txtからデータを読み込み、演算した結果を表示する。data3.txtの中身は

#X Y
0   0
0.5 2.5
1   1
1.5 -0.5
2   2
2.5 4.5
3   3
3.5 1.5
4   4
4.5 6.5
5   5
5.5 3.5
6   6
6.5 8.5
7   7
7.5 5.5
8   8
8.5 10.5
9   9
9.5 7.5
10  10

2. データの演算

データファイルからデータを読み込んでプロットするにはplot "data3.txt"とするが、データを演算するには1行目であれば$1, 2列目では$2として、2倍するには$2*2、平方根をとるにはsqrt($2)とする。 以下、データを読み込んで何もしない場合、2列目のデータを2倍する場合、2列目のデータを平方根をとる場合をプロットするコマンドを示す。

 plot "data3.txt" using 1:2 with points, \      
"data3.txt" using 1:($2*2) with points, \ 
"data3.txt" using 1:(sqrt($2)) with points

実行結果は以下のようになる。

"データファイルを演算してプロット"
データファイルを演算してプロット

1列目のデータを演算する場合は$1を用いる。1列目、2列目同時に演算する場合は、以下のようにする

 plot "data3.txt" using ($1**2):($2**2) with points 

"データXYを両方とも演算してプロット"
データXYを両方とも演算してプロット

3. まとめ

 今回はgnuplotでデータプロットを行う際、$1や$2を用いることでファイルから読み込んだデータの演算処理できることを紹介した。

Texによる数式表現50~連立線形微分方程式の解法2

 Texによる数式表現方法として前回とは別の行列を用いた連立1階微分方程式の解法について紹介する。

atatat.hatenablog.com

1. 連立1階微分方程式の行列表現

 以下の連立1階微分方程式

<div>
[tex:\displaystyle \begin{eqnarray}
       \frac{dy_{1}}{dx} &=& ay_{1}+by_{2} \\
       \frac{dy_{2}}{dx} &=& cy_{1}+dy_{2}   \end{eqnarray} ]
</div>
\displaystyle \begin{eqnarray}
       \frac{dy_{1}}{dx} &=& ay_{1}+by_{2} \\
       \frac{dy_{2}}{dx} &=& cy_{1}+dy_{2}   \end{eqnarray}


を行列で表現すると以下のようになる。

<div>
[tex:\displaystyle \frac{d}{dx} \begin{pmatrix} y_{1} \\ y_{2} \\ \end{pmatrix}
 =  \begin{pmatrix} a & b \\ c &d \\ \end{pmatrix} \begin{pmatrix} y_{1} \\ y_{2} \\ \end{pmatrix} ] 
</div>
\displaystyle \frac{d}{dx} \begin{pmatrix} y_{1} \\ y_{2} \\ \end{pmatrix}
 =  \begin{pmatrix} a & b \\ c &d \\ \end{pmatrix} \begin{pmatrix} y_{1} \\ y_{2} \\ \end{pmatrix}  


ここで

<div>
[tex:\displaystyle {\bf{y}} = \begin{pmatrix} y_{1} \\ y_{2} \\ \end{pmatrix}  ,  {\bf{A}} = \begin{pmatrix} a & b \\ c &d \\ \end{pmatrix}  ] 
</div>
\displaystyle {\bf{y}} = \begin{pmatrix} y_{1} \\ y_{2} \\ \end{pmatrix}  ,  {\bf{A}} = \begin{pmatrix} a & b \\ c &d \\ \end{pmatrix}   


とすれば

[tex:\displaystyle \frac{d{\bf{y}}}{dx} = {\bf{A}} {\bf{y}} ] 

\displaystyle \frac{d{\bf{y}}}{dx} = {\bf{A}} {\bf{y}}  

2. 行列の固有値固有ベクトル

 行列Aに対して対角化可能な行列Pが存在すると

<div>
[tex:\displaystyle {\bf{P}}^{-1} {\bf{A}} {\bf{P}}= \begin{pmatrix} \lambda_{1} & 0 \\ 0 & \lambda_{2} \\ \end{pmatrix} ]
</div>
\displaystyle {\bf{P}}^{-1} {\bf{A}} {\bf{P}}= \begin{pmatrix} \lambda_{1} & 0 \\ 0 & \lambda_{2} \\ \end{pmatrix}


ここでλ12A固有値である。また、行列P

<div>
[tex:\displaystyle{\bf{P}}=( {\bf{p_{1}}},{\bf{p_{2}}} ) = \begin{pmatrix} p_{11} & p_{12} \\  p_{21} & p_{22} \\  \end{pmatrix} ]
</div>
\displaystyle{\bf{P}}=( {\bf{p_{1}}},{\bf{p_{2}}} ) = \begin{pmatrix} p_{11} & p_{12} \\  p_{21} & p_{22} \\  \end{pmatrix}


固有値λ12に対する固有ベクトルからなる行列で、それぞれの固有ベクトルは以下を満たす。

[tex:\displaystyle {\bf{Ap\_{1}}}=\lambda\_{1}{\bf{p\_{1}}},  {\bf{Ap\_{2}}}=\lambda\_{2}{\bf{p\_{2}}}]

\displaystyle {\bf{Ap_{1}}}=\lambda_{1}{\bf{p_{1}}},  {\bf{Ap_{2}}}=\lambda_{2}{\bf{p_{2}}}

なお固有値

[tex:\displaystyle \lambda\_{1,2}=\frac{1}{2} \left( (a+d)\pm \sqrt{(a+d)^{2}-4(ad-bc) } \right) ]

\displaystyle \lambda_{1,2}=\frac{1}{2} \left( (a+d)\pm \sqrt{(a+d)^{2}-4(ad-bc) } \right)

となる。

##3. 行列固有値を利用した連立線形微分方程式の解法

ここで以下を満たす新しい変数からなるベクトルzを定義する。

\displaystyle {\bf{y}}={\bf{P}}{\bf{z}}

\displaystyle {\bf{z}} = \begin{pmatrix} z_{1}(x) \\ z_{2}(x) \\ \end{pmatrix} 


両辺微分すると

[tex:\displaystyle \frac{d{\bf{y}}}{dx} = {\bf{P}} \frac{d{\bf{z}}}{dx} ] 

\displaystyle \frac{d{\bf{y}}}{dx} = {\bf{P}} \frac{d{\bf{z}}}{dx}

また

[tex:\displaystyle \frac{d{\bf{y}}}{dx} = {\bf{A}} {\bf{y}} = {\bf{A}} {\bf{P}}{\bf{z}}]

\displaystyle \frac{d{\bf{y}}}{dx} = {\bf{A}} {\bf{y}} = {\bf{A}} {\bf{P}}{\bf{z}}

から

[tex:\displaystyle  {\bf{P}} \frac{d{\bf{z}}}{dx} = {\bf{A}} {\bf{P}}{\bf{z}}]

\displaystyle  {\bf{P}} \frac{d{\bf{z}}}{dx} = {\bf{A}} {\bf{P}}{\bf{z}}

上にP-1を作用させると

<div>
[tex:\displaystyle  \frac{d{\bf{z}}}{dx} = {\bf{P}}^{-1}{\bf{A}} {\bf{P}}{\bf{z}}= \begin{pmatrix} \lambda_{1} & 0 \\ 0 & \lambda_{2} \\ \end{pmatrix}{\bf{z}} ]
</div>
\displaystyle  \frac{d{\bf{z}}}{dx} = {\bf{P}}^{-1}{\bf{A}} {\bf{P}}{\bf{z}}= \begin{pmatrix} \lambda_{1} & 0 \\ 0 & \lambda_{2} \\ \end{pmatrix}{\bf{z}}

以下2本の単純な1次線形微分方程式になる。

[tex:\displaystyle  \frac{dz\_{1}}{dx} = \lambda\_{1}z\_{1},  \frac{dz\_{2}}{dx} = \lambda\_{2}z\_{2} ]

\displaystyle  \frac{dz_{1}}{dx} = \lambda_{1}z_{1},  \frac{dz_{2}}{dx} = \lambda_{2}z_{2}

解はそれぞれ

[tex:\displaystyle  z\_{1} = C\_{1}\exp ( \lambda\_{1}x ),   z\_{2} = C\_{2}\exp ( \lambda\_{2} x ) ]

\displaystyle  z_{1} = C_{1}\exp ( \lambda_{1}x ),   z_{2} = C_{2}\exp ( \lambda_{2} x )

もともとy=Pzとしていたので、y

<div>
[tex:\displaystyle {\bf{y}}= \begin{pmatrix} p_{11} & p_{12} \\  p_{21} & p_{22} \\  \end{pmatrix} \begin{pmatrix}  C_{1}\exp ( \lambda_{1}x )  \\  C_{2}\exp ( \lambda_{2}x ) \\ \end{pmatrix} ]
</div>
\displaystyle {\bf{y}}= \begin{pmatrix} p_{11} & p_{12} \\  p_{21} & p_{22} \\  \end{pmatrix} \begin{pmatrix}  C_{1}\exp ( \lambda_{1}x )  \\  C_{2}\exp ( \lambda_{2}x ) \\ \end{pmatrix}
<div>
[tex:\displaystyle \begin{eqnarray}
       y_{1} &=& C_{1} p_{11} \exp ( \lambda_{1}x )+  C_{2}p_{12} \exp ( \lambda_{2}x )  \\
       y_{2} &=& C_{1} p_{21} \exp ( \lambda_{1}x )+  C_{2}p_{22} \exp ( \lambda_{2}x )   \end{eqnarray} ]
</div>


\displaystyle \begin{eqnarray}
       y_{1} &=& C_{1} p_{11} \exp ( \lambda_{1}x )+  C_{2}p_{12} \exp ( \lambda_{2}x )  \\
       y_{2} &=& C_{1} p_{21} \exp ( \lambda_{1}x )+  C_{2}p_{22} \exp ( \lambda_{2}x )   \end{eqnarray}

3. 考察・まとめ

 前回の変数消去法による連立1階微分方程式の解法と当然ながら解は一致する。行列を用いるメリットとしてはy'=Ayのように表現できればで2つ以上の連立微分方程式に対しても、行列の固有値を計算することで微分方程式の解が得られるところにある。