絶対に忘れない和積の公式の覚え方

和積の公式はこんなです。

$$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 の問題です

必要な基礎知識
フーリエ変換
tの関数に$$e ^ { -ikt} $$をかけてtについて積分したもの

$$\hat { f } ( k ) = \int _ { - \infty } ^ { \infty } f ( t ) e ^ { - i k t } d t$$

フーリエ逆変換
フーリエ変換ででたfから元のfを求められる

$$ { f } ( k ) = \frac {1} {2 \pi} \int _ { - \infty } ^ { \infty } \hat {f }( t ) e ^ { i k t } d t$$

フーリエ変換と微分
微分された関数をフーリエ変換するにはその関数のフーリエ変換にikの微分の回数乗をかける

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

デルタ関数をかけて積分するとf(x)の積分がf(0)になる

$$\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 千本ノック 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を実行します。

ファイル->スナップインの追加

f:id:yamshing:20180930172156j:plain

証明書を選択して追加

f:id:yamshing:20180930172219j:plain

コンピューターアカウントを選択して次へ

f:id:yamshing:20180930172234j:plain

f:id:yamshing:20180930172250j:plain

完了します。

信用されたルート証明機関を右クリックしてインポートを実行します。

f:id:yamshing:20180930172305j:plain

f:id:yamshing:20180930172320j:plain

C:\Users\shingo\AppData\Roaming\electron-windows-store内に生成されたcerファイルを選択しパスワードを入れてインポートを完了します。

f:id:yamshing:20180930172341j:plain

f:id:yamshing:20180930172354j:plain

f:id:yamshing:20180930172409j:plain

インストールが無事に実行されました。

 

もう忘れない"度からラジアン変換"の式

rad = deg * (PI / 180)

deg = rad * (180 / PI)

この2つの式をいつも忘れてしまいます。

これを忘れない覚え方は。

”欲しいものを掛ける”です。

ラジアンが欲しいならπを

度が欲しいなら180を掛ける方(分子)において

割る方はその対になるものを置くと覚えればもう忘れません。

1ラジアンが何度か知りたいなら

度がほしいから180をかける(分子に置く)と考えて

1 × ( 180/ PI) =  57.29577951308232

”欲しいものを掛ける”これで忘れないでしょう。