Windowsサービスとファイルパス

最近はWindowsサービス(以下WS)にを少し触っている.

WSの開発についてやWSをコンソールでデバッグする方法についての詳しい内容がを載せている先人がいたため,

ameblo.jp

参考にしつつ,コードを組んでいたが…

ほとんどの内容はコンソールと大差ないと考えていたら
ファイルパスがコンソール時のデバッグと動作が異なっていた.

始めは相対パスを使っていたが,WSとコンソールではもちろん動作するディレクトリが違うため,動作は異なる.

また,

Environment.GetFolderPath(Environment.SpecialFolder.Personal)

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

を使ったときに,ファイルパスが
C:\Windows\system32になってしまうため,気を付ける必要がある.

今日気づいたこと

ブログはたまに書こうと思いつつもいつも後回しにしてしまい,書かなくなってしまう…

これからは定期的に書くことを意識しようと思う.

今日気づいたことは,JSONの表記の仕方について.

JavaScriptでは,'クォーテーション'と"ダブルクォーテーション"の違いが(多分)ないから
JSONも同様だろうと思い,適当にKeyを"ダブルクォーテーション"で,Valueを'クォーテーション'
で表記したため,痛い目にあった…

Google DriveJSONを置き,GASから呼び出そうと思い,
画像と同じように
http://drive.google.com/uc?export=view&id=
の後にJSONのIDを入れれば簡単に呼び出せるだろうと高を括っていたら,
JSONの表記を知らなかったために気づくまでにかなりの時間を要した.
(画像同様に直リンクはきちんと取得可能)

JSON 文字列をデコードする

JSONは"ダブルクォーテーション"で書きましょう.

JSONGoogle Driveに置いたことで,コードに直書きの残念な状態にならず
GASのバージョン管理を更新しなくていいため,楽になった.

夜のfoopについて

foopはラボメンの長野君が卒業研究で用いる水耕栽培を行う機械だ.

目に見えて植物が成長している様子を研究で用いている本人が一番楽しみにしているようだ.


基礎実験から始めて,3日目からLEDが点き始めたため,24時間光を当て続けているのかと思っていたが,

f:id:kyoshitomi:20170620234417j:plain

夜の23時ごろにLEDが消えて,foop内の植物にも夜が訪れるようだった.

FE -合格証書-

今日,FEの合格証書が届いた.

資格を取ることが初めてだったため, 見た目が思ったよりしっかりしていたので驚いた.

郵送された封筒には二つ折厳禁の印と厚紙が入っていた.

ネットでは一応合否を見ていたものの,実際に書類が届いたことでようやく安心できた.

Linear Algebra Chap2.6

Elimination = Factorization: A=LU

今回は自分が発表する範囲でLU分解法についてだった.

工夫点

  • iPadApple Pencilを使い,発表の流れを簡単に載せたスライドを事前に作成し,その後さらに書き込む形式を取り入れてみた.
    • ホワイトボードと異なり,書いているときに体で隠れない
    • ホワイトボードと比べて事前資料の上に書き込むため,筆記量が少なくて済む

反省点

  • iPadApple Pencilの利用及び事前にスライドの用意
    • PowerPointアプリにバグがあった
    • PowerPointアプリの仕様を十分に把握できずに書きづらかった
  • 今回の発表ではThe Cost of Eliminationの範囲を省いてしまったが,重要度が高く,より詳しく調べておくべきだった.

考察

The Cost of Elimination まとめ

教科書には

Elimination on A requires about \frac{1}{3} n^3 multiplications

と書いており,O(n^3)で普通にガウス消去法を行うときと変わらず,
AがFull matrixであるとき,あまりLU分解法の利点が掴めない.

LU分解法はBand matrixのとき,band widthが小さいときに特に計算量が小さくなり,
計算量がO(n)になるという利点がある.

これは,教科書にも記載されているが,ゼミ中に永原教授にも指摘していただいた.

AがFull matrixであっても当てはまる利点として複数の方程式を解く際に,Ax=bのうちAは変化せず,bのみが変化するような場合,LUはAのみに依存するため,一度分解してしまえば,その後の計算量は分解したLUを用いてO(n^2)で済む.

以下のサイトに明示的に書いてあるのをゼミ後に見つけたので記載しておく.


d.hatena.ne.jp

Challenge Problems

No.24

The square upper left submatrices  A_k of A

という記載があり,これについて調べてみると首座小行列という言葉があることが分かった.

ほとんどは行列式として使うことが多いようで,以下のように定義が書いてあった.

  • 主小行列式(principal minor) 主小行列(principal submatrix)
    • Aの(主)対角線上にある小行列式→同じ番号の行列を選択/排除
    • 番号は連番でなくてもよい
  • 首座小行列式(leading principal minor)
    • 主小行列式の内a_{11}から始まる
    • a_{kk}までを選択する

参考にしたサイトも一緒に載せておく.

主小行列式の定義 [数学についてのwebノート]

また,永原教授の書籍を物色させていただいたので,ページ数などをまとめておく.

斎藤正彦(1966-1990)『線型代数入門』p156 東京大学出版会

佐武一郎(1958-1993)『線型代数学』 p163 裳華房

A_kが正則である必要があるということはブロック行列を用いると簡単に証明できることを教えてもらった.


A = LU: 
\left[
\begin{array}{c:c}
A_k & ? \\ \hdashline
? & ?
\end{array}
\right]
 =
\left[
\begin{array}{c:c}
L_k & 0 \\ \hdashline
? & ?
\end{array}
\right]
\left[
\begin{array}{c:c}
U_k & ? \\ \hdashline
0 & ?
\end{array}
\right]
 = 
\left[
\begin{array}{c:c}
L_kU_k & ? \\ \hdashline
? & ?
\end{array}
\right]

No.25

教科書ではMATLABのようなソフトで解くとあったため,
自分はpythonを用いて解くことにした.

import numpy as np
import scipy.linalg as sl

K = sl.toeplitz([ 2,-1, 0, 0, 0, 0])

T = sl.lu(K)
L = T[1]
print(sl.inv(L))

結果は以下のようになった.

K =
[[ 2 -1  0  0  0  0]
 [-1  2 -1  0  0  0]
 [ 0 -1  2 -1  0  0]
 [ 0  0 -1  2 -1  0]
 [ 0  0  0 -1  2 -1]
 [ 0  0  0  0 -1  2]]
L =
[[ 1.     0.     0.     0.     0.     0.   ]
 [-0.5    1.     0.     0.     0.     0.   ]
 [ 0.    -0.667  1.     0.     0.     0.   ]
 [ 0.     0.    -0.75   1.     0.     0.   ]
 [ 0.     0.     0.    -0.8    1.     0.   ]
 [ 0.     0.     0.     0.    -0.833  1.   ]]
U =
[[ 2.    -1.     0.     0.     0.     0.   ]
 [ 0.     1.5   -1.     0.     0.     0.   ]
 [ 0.     0.     1.333 -1.     0.     0.   ]
 [ 0.     0.     0.     1.25  -1.     0.   ]
 [ 0.     0.     0.     0.     1.2   -1.   ]
 [ 0.     0.     0.     0.     0.     1.167]]
inv(L) =
[[ 1.     0.     0.     0.    -0.    -0.   ]
 [ 0.5    1.     0.     0.    -0.    -0.   ]
 [ 0.333  0.667  1.     0.    -0.    -0.   ]
 [ 0.25   0.5    0.75   1.    -0.    -0.   ]
 [ 0.2    0.4    0.6    0.8    1.    -0.   ]
 [ 0.167  0.333  0.5    0.667  0.833  1.   ]]

永原教授からはnice patternとは以下のように書き下せることだと教えていただいたため,記述しておく.


\hat{l_{ij}} =
\left\{
\begin{array}{cc}
i/j, & (i\geq j) \\
0, & others
\end{array}
\right.

No.26

この問題もpythonで解いた.

print(7*sl.inv(K))
print(np.matmul(K,  7*sl.inv(K)))

結果は以下のようになった.

K =
[[ 2 -1  0  0  0  0]
 [-1  2 -1  0  0  0]
 [ 0 -1  2 -1  0  0]
 [ 0  0 -1  2 -1  0]
 [ 0  0  0 -1  2 -1]
 [ 0  0  0  0 -1  2]]
7*inv(K) =
[[  6.   5.   4.   3.   2.   1.]
 [  5.  10.   8.   6.   4.   2.]
 [  4.   8.  12.   9.   6.   3.]
 [  3.   6.   9.  12.   8.   4.]
 [  2.   4.   6.   8.  10.   5.]
 [  1.   2.   3.   4.   5.   6.]]
K * 7*inv(K) =
[[ 7.  0.  0.  0.  0.  0.]
 [-0.  7. -0.  0.  0.  0.]
 [ 0.  0.  7.  0. -0. -0.]
 [-0. -0.  0.  7.  0.  0.]
 [ 0.  0.  0.  0.  7.  0.]
 [ 0.  0.  0.  0.  0.  7.]]

7K^{-1}wonderfulな表記をラボメンの徳重君に教えてもらったため,記述しておく.


7K^{-1} =
\left\{
\begin{array}{cc}
i(7-i), & (i\geq j) \\
j(7-i), & others
\end{array}
\right.

感想

教科書にLc=bとUx=cの計算量がO(n^2)になることが記載されていたが,Aが変化しない複数の方程式を解くという考えがなく,
AがFull matrixのときの利点を自分だけではあまり理解できなかったため,The Cost of Eliminationを省く結果となってしまった.

発表の荒が出てしまったところを反省材料として次の発表に活かしたい.

『数学は完全に合っていないといけない』

最近の活動

個人的な活動

現在,研究室の在室管理をWPFを用いて表示させるプログラムを組んでいる.

この他,メンバー同士で簡単に在室しているかどうかを確認する方法が課題だった.

一昨日,たまたま友人からslackにStatusなるものがあるということを聞いた.(今更感があるけど…)

slackは研究室のメンバー同士でゼミの内容などを伝え合うなどの目的で使用している.

昨日の午前中にslackのStatusを在室管理に利用しようと思い,即興で組んでみた.

f:id:kyoshitomi:20170601142407p:plain

今回も先人がいて,参考にさせてもらった.

qiita.com

qiita.com

アイコンなんかを自作してもいいかもしれない

最近の活動

個人的な最近の活動

研究室に入った時から,ほかの研究室がしているようなマグネットで在室管理を行う形式に疑問を持っていた.

そこで,趣味でやっていたWPFを用いて簡単な在室管理プログラムを3月頃から作成している.


誰もが面倒臭がらない形式にしようと思い,Wi-Fiに個人のスマートフォンが繋がっている際に在室中というように表示される仕組みにした.また,ゼミの時間にはゼミ中と表示される.

世界には同じことを考えている先人がいたが,実装内容がなかったため,その辺は適当に自前で組んだ.

qiita.com

f:id:kyoshitomi:20170522195326p:plain

見た目はこんな感じで,左側は在室管理の表で右側は研究室の予定を取得して表示している.

問題がまだまだ山積していて実用にはもう少しかかりそう…

現状の問題

  • iPhoneだと反応が悪い
    • スタンバイ状態では30分に30秒間しか反応しない
    • 充電中だと5分に一度は反応する
  • 見た目がダサい
  • 余白がもったいない+ほかに表示したいものがあっても表示領域が足りない