絶対に忘れない和積の公式の覚え方
和積の公式はこんなです。
$$sinA+sinB=2\sin \frac {A+B}{2}\cos \frac {A-B}{2}$$
$$sinA-sinB=2\cos\frac {A+B}{2}\sin \frac {A-B}{2}$$
$$cosA+cosB=2\cos\frac {A+B}{2}\cos\frac {A-B}{2}$$
$$cosA-cosB=-2\sin\frac {A+B}{2}\sin \frac {A-B}{2}$$
これをさっと覚えるにはどうしたら良いでしょうか。
加法定理から導くというのもこのA+Bという謎の変数の変換によってなんだかよくわかりません。
ではどうやって覚えたらいいでしょうか?
実はこの公式はsin, cos の微分の公式を導出するのに使われています。
ならばそのsin, cosの微分の導出を手がかりにこの公式を覚えてはどうでしょうか?
sin(x)の微分はなんですか?
そうcos(x)です。
ではこれを導き出してみましょう。
微分の定義より
$$sin'(x) = \lim_{h \to 0} \frac {sin(x+h) - sin(x)}{h}$$
はい!ここに何か見覚えのあるやつが出てきていますよ。
そう!sinA - sinBだ!
ここでA = (x + h) , B = xと置けば和積の公式の形です。
A+B/2とA-B/2は
$$ \frac {A+B}{2} = x + \frac{h}{2}$$
$$ \frac {A-B}{2} = \frac{h}{2}$$
です。
そしてこれはcos(x)になることがわかっている。
ということは A+B のほうがcosだとわかります。
なぜならh はlim h->0で0になり消えてなくなるからです。
なのでcosの方にA+B/2 (x + h/2)を入れて
$$ \lim_{h \to 0} \frac {2 sin(\frac{h}{2}) cos(x+\frac{h}{2})}{h}$$
分子の2を分母に1/2にしてかけると
$$ \lim_{h \to 0} \frac {sin(\frac{h}{2}) cos(x+\frac{h}{2})}{\frac{h}{2}}$$
sin(x)/xはxが0に近づくと1なので無事にcos(x)が残りました。めでたしめでたし
で終わるのではなく逆にこのsinの微分の導出を思い出しながら和積の公式を覚えてみましょう。
具体的にはsinA - sinBの形を見る。
これはsinの微分のやつと思う。
ならばcosが残るはずと考え。そうならcosのほうにA+B/2が入ると思い出す。
あとはlim h->0で1になるためのsinが必要だと考えればsin(A-B/2)が思い出されるはずです。
よってsinA - sinB = 2 cos(A+B/2) sin(A-B/2) が出てきました。
では同じようにcosの微分を考えてみましょう。
cos(x)の微分は-sin(x)です。なので和積の公式にもマイナスがでてきます。
そして今度は1になって消える部分(sin(x)/x)のもういっぽうもsinです
ここまでくればもう和積の公式がでるでしょう。
-2 sin(A-B/2)sin(A+B/2)ですね。
あと2つはどうするんだって?
そこはsinとcosがひっくり返ってマイナスが消えるとでも覚えておきましょう(適当)(´Д`;)
いまさら聞けないjunitの実行のやり方
junitを簡単にさっと実行したいと思うことはありませんか?
今回はjunitをコマンドラインから直接実行してみたいと思います
まずテストの対称となるクラスをつくります。
Hoge.java
package com.hoge; public class Hoge { public Hoge(){ System.out.println("hoge"); } }
次にそのテストをつくります
HogeTest.java
package com.hoge; import static org.junit.Assert.*; import org.junit.Test; import com.hoge.Hoge; public class HogeTest { @Test public void testHoge(){ Hoge h = new Hoge(); assertNotNull(h); } }
まずは対称のクラスをコンパイルします
javac -d . Hoge.java
-d . のオプションをつけてフォルダーを自動生成しましょう
-d のあとに .でカレントディレクトリからフォルダーのを生成します
com/hoge/Hoge.class ができます。
テストクラスをコンパイルしましょう
javac -d . HogeTest.java
com/hoge/HogeTest.class ができます。
├── Hoge.java ├── HogeTest.java └── com └── hoge ├── Hoge.class └── HogeTest.class
このようなファイル構成になります
では実行してみましょう
java -cp .:/usr/share/java/hamcrest-core.jar:/usr/share/java/junit4.jar org.junit.runner.JUnitCore com.hoge.HogeTest
-cp のあとには:でclasspathをつなげていきます
ここではまず
.:実行時のディレクトリでこれはcom.hogeを見つけるためです
つぎにはjunitとhamcrest-coreへのclasspathです
これはubuntuの時のpathです
org.junit.runner.JUnitCore をつけることでmainがないクラスを実行出来るようになります
Happy TDD :)
強制振動の微分方程式をフーリエ変換を使って解く
$$\ddot { \psi } + \omega _ { 0 } ^ { 2 } \psi + 2 \gamma \dot { \psi } = F \sin ( \omega t )$$
独習者のための大学数学 5.3 例題9 の問題です
必要な基礎知識
フーリエ変換
$$\hat { f } ( k ) = \int _ { - \infty } ^ { \infty } f ( t ) e ^ { - i k t } d t$$
フーリエ逆変換
$$ { f } ( k ) = \frac {1} {2 \pi} \int _ { - \infty } ^ { \infty } \hat {f }( t ) e ^ { i k t } d t$$
フーリエ変換と微分
$$\begin{array} { l } { \mathcal { F } \left[ f ^ { \prime } ( x ) \right] ( k ) = i k \mathcal { F } [ f ( x ) ] ( k ) } \\ { \mathcal { F } \left[ f ^ { ( n ) } ( x ) \right] ( k ) = ( i k ) ^ { n } \mathcal { F } [ f ( x ) ] ( k ) } \end{array}$$
デルタ関数
$$\delta ( x ) = \left\{ \begin{array} { l l } { \infty } & { ( x = 0 ) } \\ { 0 } & { ( x \neq 0 ) } \end{array} \right.$$
$$\int _ { - \infty } ^ { \infty } \delta ( x ) \mathrm { d } x = 1$$
$$\int _ { - \infty } ^ { \infty } f ( x ) \delta ( x ) \mathrm { d } x = f ( 0 )$$
$$\int _ { - \infty } ^ { \infty } f ( x ) \delta ( x - a ) \mathrm { d } x = f ( a )$$
$$ \delta (x) = \delta (-x)$$
デルタ関数のフーリエ積分表示
$$\delta ( x ) = \frac {1} {2 \pi} \int _ { - \infty } ^ { \infty } e ^ { i k x } d k$$
オイラーの公式
$$ e ^ { i x } = cos x + i sin x $$
$$\begin{aligned} \cos z & = \frac { e ^ { i z } + e ^ { - i z } } { 2 } \\ \sin z & = \frac { e ^ { i z } - e ^ { - i z } } { 2 i } \end{aligned}$$
加法定理
$$ sin(A - B) = sinA cosB - cosA sinA $$
$$\ddot { \psi } + \omega _ { 0 } ^ { 2 } \psi + 2 \gamma \dot { \psi } = F \sin ( \omega t )$$
左辺は微分のフーリエ変換を利用して
$$\ddot { \psi } \rightarrow - k ^ { 2 } \hat { \psi } , \quad \psi \rightarrow \hat { \psi } \quad \dot { \psi } \rightarrow i k \hat { \psi }$$
を代入すると
$$- k ^ { 2 } \hat { \psi } ( k ) + \omega _ { 0 } ^ { 2 } \hat { \psi } ( k ) + 2 i \gamma k \hat { \psi } ( k )$$
となる。
右辺は$$sin \omega t $$ のフーリエ変換をする
フーリエ変換の定義
$$\hat { f } ( k ) = \int _ { - \infty } ^ { \infty } f ( t ) e ^ { - i k t } d t$$
より
sinを代入して
$$\int_{-\infty }^{\infty }sin\omega t e^{-ikt}dt $$
オイラーの公式によりsinを変形
$$ = \int _ { - \infty } ^ { \infty } \frac { e ^ { i \omega t } - e ^ { - i \omega t } } { 2 i } e ^ { - i k t } d t $$
$$ e $$ の掛け算を実行し積分を分ければ
$$ = \frac { 1 } { 2 i } \int _ { - \infty } ^ { \infty } e ^ { - i ( k - \omega ) t } d t - \frac { 1 } { 2 i } \int _ { - \infty } ^ { \infty } e ^ { - i ( k + \omega ) t } d t=$$
となる
eの積分をデルタ関数であらわすと
$$\delta ( x ) = \frac {1} {2 \pi} \int _ { - \infty } ^ { \infty } e ^ { i k x } d k$$
より
$$ = \frac { \pi } { i } ( \delta ( k - \omega ) - \delta ( k + \omega ) )$$
これで右辺の計算は終わり
右辺$$ = F \frac { \pi } { i } \{ \delta ( k - \omega ) - \delta ( k + \omega ) \}$$
をえる
全体をフーリエ変換された$$\hat { \psi }$$でまとめると
$$- k ^ { 2 } \hat { \psi } ( k ) + \omega _ { 0 } ^ { 2 } \hat { \psi } ( k ) + 2 i \gamma k \hat { \psi } ( k ) = F \frac { \pi } { i } \{ \delta ( k - \omega ) - \delta ( k + \omega ) \}$$
が
$$\hat { \psi } ( k ) = \frac { \pi F} {i} \frac { \{ \delta ( k - \omega ) - \delta ( k + \omega ) \} } { w _ { 0 } ^ { 2 } - k ^ { 2 } + 2 i \gamma k }$$
となる
その逆変換から目的である$$ \psi $$を求めていく
$$ \hat {\psi} $$のフーリエ逆変換より
$$\psi ( k ) = \frac { 1 } { 2 \pi } \int _ { - \infty } ^ { \infty } \hat { \psi } ( k ) e ^ { i k t } d k$$
$$ = \frac { F } { 2 i } \int _ { - \infty } ^ { \infty } \frac { e ^ { i k t } } { w _ { 0 } ^ { 2 } - k ^ { 2 } + 2 i \gamma k } \{ \delta ( k - \omega ) - \delta ( k + \omega ) \} d k$$
デルタ関数をかけて積分するとf(x)の積分がf(0)になるので$$ f(k - \omega )$$の積分は $$ f(\omega) $$となる
$$ \omega $$ ,$$ - \omega $$をそれぞれのkに代入して
$$ = \frac { F } { 2 i } \{ \frac { e ^ { i \omega t } } {w _ { 0 } ^ { 2 } - \omega ^ { 2 } + 2 i \gamma \omega } - \frac { e ^ { - i \omega t } } {w _ { 0 } ^ { 2 } - \omega ^ { 2 } - 2 i \gamma \omega } \}$$
となる
eをsinとcosであらわすと
$$ cos(- \theta) = cos( \theta), sin(-\theta) = - sin(\theta) $$ より
$$ e ^ { i \omega t } = cos \omega t + i sin \omega t $$
$$ e ^ { -i \omega t } = cos (- \omega t) + i sin (- \omega t) = cos ( \omega t) - i sin (\omega t) $$
とあらわせる
これを代入して
$$ = \frac { F } { 2 i } \{ \frac { cos \omega t + i sin \omega t } {w _ { 0 } ^ { 2 } - \omega ^ { 2 } + 2 i \gamma \omega } - \frac { cos ( \omega t) - i sin (\omega t) } {w _ { 0 } ^ { 2 } - \omega ^ { 2 } - 2 i \gamma \omega } \}$$
分数の足し算をするために分母をそろえる
$$ = \frac { F } { 2 i } \{ \frac { (cos \omega t + i sin \omega t) (w _ { 0 } ^ { 2 } - \omega ^ { 2 } - 2 i \gamma \omega) } { (w _ { 0 } ^ { 2 } - \omega ^ { 2 } + 2 i \gamma \omega)(w _ { 0 } ^ { 2 } - \omega ^ { 2 } - 2 i \gamma \omega) } - \frac { (w _ { 0 } ^ { 2 } - \omega ^ { 2 } + 2 i \gamma \omega) ( cos ( \omega t) - i sin (\omega t) )} { (w _ { 0 } ^ { 2 } - \omega ^ { 2 } + 2 i \gamma \omega)(w _ { 0 } ^ { 2 } - \omega ^ { 2 } - 2 i \gamma \omega) } \}$$
$$ = \frac { F } { 2 i } \{ \frac { (cos \omega t + i sin \omega t) (w _ { 0 } ^ { 2 } - \omega ^ { 2 } - 2 i \gamma \omega) } { \left( \omega _ { 0 } ^ { 2 } - \omega \right) ^ { 2 } + 4 \gamma ^ { 2 } \omega ^ { 2 } } - \frac { (w _ { 0 } ^ { 2 } - \omega ^ { 2 } + 2 i \gamma \omega) ( cos ( \omega t) - i sin (\omega t) )} { \left( \omega _ { 0 } ^ { 2 } - \omega \right) ^ { 2 } + 4 \gamma ^ { 2 } \omega ^ { 2 } } \}$$
$$ = \frac { F } { 2 i } \{ \frac { (cos \omega t) (- 4 i \gamma \omega) } { \left( \omega _ { 0 } ^ { 2 } - \omega \right) ^ { 2 } + 4 \gamma ^ { 2 } \omega ^ { 2 } } + \frac {2 * (w _ { 0 } ^ { 2 } - \omega ^ { 2 }) ( i sin (\omega t) )} { \left( \omega _ { 0 } ^ { 2 } - \omega \right) ^ { 2 } + 4 \gamma ^ { 2 } \omega ^ { 2 } } \}$$
$$ = \frac { F } { 2 i } \{ \frac { (cos \omega t) (- 4 i \gamma \omega) + 2 * (w _ { 0 } ^ { 2 } - \omega ^ { 2 }) ( i sin (\omega t) )} { \left( \omega _ { 0 } ^ { 2 } - \omega \right) ^ { 2 } + 4 \gamma ^ { 2 } \omega ^ { 2 } } \}$$
$$ = F \{ \frac { (cos \omega t) (- 2 \gamma \omega) + (w _ { 0 } ^ { 2 } - \omega ^ { 2 }) ( i sin (\omega t) )} { \left( \omega _ { 0 } ^ { 2 } - \omega \right) ^ { 2 } + 4 \gamma ^ { 2 } \omega ^ { 2 } } \}$$
ここで
$$ sin \alpha = \frac {2 i \gamma \omega} { \sqrt { \left( \omega _ { 0 } ^ { 2 } - \omega \right) ^ { 2 } + 4 \gamma ^ { 2 } \omega ^ { 2 } }}$$
$$ cos \alpha = \frac {\left( \omega _ { 0 } ^ { 2 } - \omega \right) ^ { 2 }} { \sqrt { \left( \omega _ { 0 } ^ { 2 } - \omega \right) ^ { 2 } + 4 \gamma ^ { 2 } \omega ^ { 2 } }}$$
ならば合成できると考えその角度を $$ \alpha $$と定義すると
加法定理より
$$ sin(A - B) = sinA cosB - cosA sinA $$
となるので式を $$ \alpha $$ を使って表すと
$$\psi ( k ) = F \frac { \sin ( \omega t - \alpha ) } { \sqrt { \left( \omega _ { 0 } ^ { 2 } - \omega \right) ^ { 2 } + 4 \gamma ^ { 2 } \omega ^ { 2 } } }$$
$$ \alpha $$はタンジェントの形であらわし
$$\tan \alpha = \frac { 2 \gamma \omega } { \omega _ { 0 } ^ { 2 } - \omega ^ { 2 } }$$
Fortran 千本ノック 3
15本目 gotoを使う
implicit none integer::i i = 2 if (i .eq. 2) go to 10 print *,"after if" 10 print *,"at 10" print *,"end"
Fortran 千本ノック 2
11本目 行列を"行""列"の順番でつくる!
integer,dimension(8)::arr integer,dimension(2,4)::arr2 arr = (/1,2,3,4,5,6,7,8/) arr2 = transpose(reshape(arr,(/4,2/))) ! ! ko iu gyouretu ni naru ! ! 1 2 3 4 ! 5 6 7 8
12本目 行列の行にアクセス!
integer,dimension(8)::arr integer,dimension(2,4)::arr2 arr = (/1,2,3,4,5,6,7,8/) arr2 = transpose(reshape(arr,(/4,2/))) v = arr2(2,:) ! v ha -> 5 6 7 8
13本目 doループをする!
do i = 1,10 print *, "i = ",i end do
14本目 内積を計算する!
implicit none integer,dimension(2,3)::a integer,dimension(3,1)::v integer,dimension(2,1)::res integer::i,j,s a = transpose(reshape((/1,2,3,4,5,6/),(/3,2/))) v = transpose(reshape((/1,2,3/),(/1,3/))) ! ko iu jyoutai ! ! [ 1 2 3 ].[1] ! [ 4 5 6 ] [2] ! [3] do i = 1,2 s = 0 do j = 1,3 s = s + a(i, j) * v(j,1) end do res(i,1) = s end do print *,"res = ",res
electronのpackageからappxを作ってローカルに証明書でサインしてインストールしてみる
electron-packagerをインストールします。
npm install electron-packager -g
packageを作ります。
electron-packager . "Sample" --platform=win32 --arch=x64
electron-windows-storeをインストールします。
npm install -g electron-windows-store
できたpackageのパスをinput-directoryに指定してappxを作ります。
electron-windows-store --input-directory "C:\Users\shingo\Documents\workspace\electron-quick-start\Sample-win32-x64" --output-directory "C:\Users\shingo\Documents\workspace\out" --flatten true --package-version 1.0.0.0 --package-name Sample
まずDesktop App Converterを使うか聞かれるのでNoとします。
? Did you download and install the Desktop App Converter? It is *not* required to run this tool. No
次に証明書を作るか聞いてくるのでYesします。
? You need to install a development certificate in order to run your app. Would you like us to create one? Yes Welcome to the Electron-Windows-Store tool! This tool will assist you with turning your Electron app into a swanky Windows Store app. We need to know some settings. We will ask you only once and store your answers in your profile folder in a .electron-windows-store file.
ここで発行者IDとWindows Kitのbinディレクトリーを設定します。
? Please enter your publisher identity: CN=yamshing ? Please enter the location of your Windows Kit's bin folder: C:\Program Files (x86)\Windows Kits\10\bin\10.0.17134.0\x64 Creating Certficate
When asked to enter a password, please select "None".
これで開発用の証明書でサインされたappxがつくられます。
このままではappxをダブルクリックしても証明書のエラーでインストールできません。
このappxをサインした証明書をルートにインポートしないといけません。
そのためにmmcというコマンドを実行します。
C:\Windows\System32\mmc.exeを実行します。
ファイル->スナップインの追加
証明書を選択して追加
コンピューターアカウントを選択して次へ
完了します。
信用されたルート証明機関を右クリックしてインポートを実行します。
C:\Users\shingo\AppData\Roaming\electron-windows-store内に生成されたcerファイルを選択しパスワードを入れてインポートを完了します。
インストールが無事に実行されました。
もう忘れない"度からラジアン変換"の式
rad = deg * (PI / 180)
deg = rad * (180 / PI)
この2つの式をいつも忘れてしまいます。
これを忘れない覚え方は。
”欲しいものを掛ける”です。
ラジアンが欲しいならπを
度が欲しいなら180を掛ける方(分子)において
割る方はその対になるものを置くと覚えればもう忘れません。
1ラジアンが何度か知りたいなら
度がほしいから180をかける(分子に置く)と考えて
1 × ( 180/ PI) = 57.29577951308232
”欲しいものを掛ける”これで忘れないでしょう。