はてなブログ移行に関して

大変勝手な理由なのですが、はてなブログに移行します。

おもに、数式やコードの変換がWordPressは甘いように感じます。無料で使える範囲でしか使ってないので、プラグインを入れることもできず、改善のしようがないです。

既存の記事ですが、プログラムからはじめるグレブナ基底は文章を更新して再投稿し、閲覧数を加味して一部記事も再投稿します。すべての投稿が完了したところで、こちらのブログを閉鎖します。

ということで、大変勝手ですが、徐々に移行します。

割り算アルゴリズム その2

割り算アルゴリズムその2

  • 単項式を消していく事で,割り算を実現
  • 多項式の割り算は,単項式を少しずつ消していく
  • (順序が重要)

——–

はじめに?

「割り算アルゴリズム」で一記事にしようとしていましたが,長くなってしまったので分割しました.この記事では,多項式の割り算を扱っていきます.

理論

準備(前提知識)

  • 単項式,多項式
  • 係数
  • 順序
  • 簡単な割り算アルゴリズム(前記事)

目標(理論)

最終的には,多項式と多項式で割り算をすることが目標です.

複雑な例への準備

もし,余りrをさらに割ることができるならば,割り算アルゴリズムはどうなるか考えます.
これは,例えば式 F = xyz を, F1 = xy + yz F2 = xyz + xy で割るときに重要となります.もしF1で割り切ってしまって,さらにF2で割れるなら,F2でも割る必要があります.

これを式にして表現してみます.

y = q1 \times x1 + r1

r1 = q2 \times x2 + r2

r2 = q3 \times x3 + r3

\vdots

  • y は,割られる式です.
  • q1,q2,\cdots は,商です.
  • x1,x2,\cdots は,割る式です.
  • r1,r2,\cdots は,余りです.

上の式では,1行目で計算した余りr1 がさらに割れるとします.
なので,余りをさらに割ります.また余りが割れるなら・・・という計算です.

とても簡単な例で同じ計算をしてみます.
y = 103,2 で割る事を考えます.

10 = 3 + 7
7 = 3 + 4
4 = 2 + 2
2 = 2 + 0

頭の悪そうな計算をしていますが,この例のように,もし余りがさらに割れるならさらに割る,ダメなら終了という流れが想像できると嬉しいです.

多項式の割り算はどうなるか(本題)

ここでようやく本題ですが,多項式と多項式で割り算することを考えます.
今までのことを使います.つまり,

  • 割るには,(次数と係数を揃えて)引いて消す操作が必要
  • 余りが出て,余りがさらに(他の式でも)割れるなら割る

つまり,多項式中の単項式を引いて消し,余りが出たら,他の単項式を引いてさらに消す.ということです.単項式を消していけば,いずれ割れなくなるはずです(※本当は停止性について考える必要があります).

では具体的な例を考えます.
F = xyzF1 = xy + yz, F2 = xyz + xy で割るとします.

説明都合上F2から割ります.すなわち,F - q1 \times F2 = r としたいです.
F = xyz, F2 = xyz + xy なので, q1 = 1 でそのままxyzが消せそうです.

F - F2 = xyz - (xyz + xy) = -xy

余りの -xy はまだ割れそうです(F1 = xy + yz).

-xy - (-1)(xy + yz) = yz

yz は割れそうにないです.ということで計算終了です.

ん?本当に計算終了なの?

F1 = xy + yz には yz が含まれるから割れる(消せる)のでは?
となります.が,消せないようです.
仮に,消したとすると,新しい式ができ,また消すことができ・・・と無限に操作できてしまいます.答えがあったとしても,答えかどうか判定もできないですし,答えに到達できるかも不明になります.

ここで,順序および単項式の大きさが重要になるはずです.あらかじめ大きさがわかっていて,大きいもので消していけば,この点が解決されるはずです(下記,自身の無い事を参照).

割り算結果が一意でない

先ほどの例ですが,実はF1から割ると,F2から割るときと結果が異なります.
F1で割ると,

F - z \times F1 = xyz - (xyz + yz^2) = -yz^2

となり,結果が異なります.-yz^2はこれ以上F1,F2では割れません.

このように一般には複数の多項式で割ると,結果が一意に定まらないです.
この結果を一意に定めるには,F1,F2がグレブナ基底である必要があります.
また,結果を一意に定める多項式の集合がグレブナ基底です.

自信の無い事(理論)

私自身,書き出したはいいものの,よく理解できてないことです.
すなわち勉強不足な点です.

なぜ大きいものから割っていくのか

前提というか,基本的に割り算のアルゴリズムでは,大きいものから割っていきます.
なぜ大きい物から割っていく必要があるのか?なのですが,正直理解できてないです.直感的には,大きい方から割る方が無駄がなさそう(計算回数が少なそう)なので,大きい方から割ることは自然にも思えますが,なぜと問われると説得力がないです.

文章を作る時に浮かんだことですが,停止性のあたりと関係ありそうです.
私が停止性をちゃんと把握できてないので,そこで理解ができていないと考えられます(要勉強).

係数がなぜ重要なのか

また,このタイプのアルゴリズムでは,おそらく,係数が重要です.
というのも,係数が固定されてないと無理やり割っても何とかなるためだと思います.
上記説明のアルゴリズムでなければ,無理やり 4x^2/3xy = 4x/3y とかみたいに計算できてしまいます.
このとき,係数に着目すると,整数から有理数に係数が変化しています.

上記の割り算アルゴリズムなら,その心配はないはずです(整数-整数=整数となるはずです).
なぜ係数を固定する必要があるのか?という点は理解が足りてないですが,問題設定上係数を固定することが多いように見られます.係数を固定しているならば,無理やり割る事ができない,というわけだと思います.


プログラム

今回はプログラムというより電卓です.足し算引き算して,理論の内容が実装できているように見えればOKという感じです.

次に、多項式での割り算,割る順序で結果が異なる例を計算しています.

多項式の割り算

// 割り算アルゴリズム2

print("コード見ながらの実行を推奨します。")$
print("もしくは、対話モードで実行を推奨します。")$

F1 = x*y + y*z$
F2 = x*y*z + x*y$
F = x*y*z$

/*
// example2
F = xyz を割る
F1 = xy + yzから割り始める

xyz - (w)*(xy + yz)
[...wは適当な値、変数(つまりwは単項式)]
w = z
とすれば、
xyz - (xyz + yz^2) = -yz^2
となって、F = xyz を消せそう

また、-yz^2をF1,F2で消せない。計算終了となる。
*/

R1 = F - z*F1;
// R1 = -y*z^2

/*
// example2
同じく、F = xyz を割る
ただし、F2 = xyz + xyから割り始める

xyz - (w)*(xyz + xy)
[...wは適当な値、変数(つまりwは単項式)]
w = 1
とすれば、
xyz - (xyz + xy) = -xy
*/

R2 = F - F2;
// R2 = -xy

/*
ここでさらに、F1 = xy + yz なので、まだ割れる
-xy - (v)*(xy + yz)
[...vは適当な値、変数(つまりvは単項式)]
v = -1
とすれば、
-xy + xy + yz = yz
となって、-xy が消せそう
*/

R3 = R2 - (-1)*F1;
// R3 = yz

end$

htmlを多項式にしてみた

動機と注意


もし,htmlが多項式になるなら,実際に作るとどうなるのか?

ということで,やってみた.

注意

今回実験的要素が多く含まれます.
さらに結果もたいしたことないので,見る価値も今一つありません.

プログラムはGitHubにあります.

一部,引用だったりコードブロックだったりしますが,引用部はhtmlがうまくコードブロックで書けなかった部分です.

——–

方針


  1. htmlを多項式にする

+ タグを変数に,文章を定数に置換
+ 1行ずつ処理
+ 同じ行の変数と定数は積として単項式に
+ 単項式の和(つまり多項式)としてhtmlを表現

"""
# 単項式にするイメージ!(Python)
# 変数

-> x1

-> x2
<i><i>  -> x3
</i></i> -> x4

# 定数
こんなhtml -> a1
あんなhtml -> a2
"""

単項式1 = 変換する関数("

こんなhtml

")
print(単項式1)
# 表示結果:x1 * a1 * x2

単項式2 = 変換する関数("<i><i>あんなhtml</i></i>")
print(単項式2)
# 表示結果:x3 * a2 * x4

多項式 = 単項式1 + 単項式2
print(多項式)
# 表示結果:x1*a1*x2 + x3*a2*x4
  1. 多項式を計算させてみる

+ 2つのhtml(多項式)でグレブナ基底を計算

  1. 計算結果をhtmlに戻してみる

——–

結果


htmlを多項式で表現

今回使用したhtmlは

<html>
<body>
<p>ここに文章</p>
<i>たとえばイタリックにしたり?</i>
<p><strong>文章を強調</strong>してみたり!</p>
</body>
</html>

と,

<html>
<body>
<p>ここに文章</p>
<p><strong>文章を強調</strong>してみたり!</p>
</body>
</html>

タグ(変数)と文章(定数)は次.

x1 = “<html>”
x2 = “<body>”
x3 = “<p>”
x4 = “<strong>”
x5 = “</html>”
x6 = “</body>”
x7 = “</p>”
x8 = “</strong>”
a1 = “ここに文章”
a2 = “<i>”
a3 = “たとえばイタリックにしたり?”
a4 = “</i>”
a5 = “文章を強調”
a6 = “してみたり!”

このとき,htmlを変換(タグを記号に置き換えるだけ)すると

x1 + x2 + x3*a1*x7 + a2*a3*a4 + x3*x4*a5*x8*a6*x7 + x6 + x5 ,
x1 + x2 + x3*a1*x7 + x3*x4*a5*x8*a6*x7 + x6 + x5

となる.

この2つの多項式でグレブナ基底を計算すると

a4*a3*a2, x1+x2+(a6*a5*x8*x4+a1)*x7*x3+x6+x5

これをhtmlに戻すと

<!– a4*a3*a2 の結果 –>
</i>たとえばイタリックにしたり?<i>
<!– x1+x2+(a6*a5*x8*x4+a1)*x7*x3+x6+x5 の結果 –>
<html>
<body>
してみたり!文章を強調</strong><strong></p><p>
ここに文章</p><p>
</body>
</html>

となる.

——–

まとめと考察?


もうすこしタグが基底っぽく機能するようなモデルにしたかった.
おそらく,一行が一つの単項式になるのが問題で,
一行が一つの多項式になると,もうすこし基底っぽいのがでてくると思われる.

結果がちゃんとhtmlになってない.
これは,順序を正しく与えてあげればそれっぽいのはできる.
ただし,入れ子構造が崩壊しているのは避けられない.
上記と同じく,一行が一つの単項式なのが原因と考えられる.

 

まとめると,今回作った方針でhtmlを多項式化しても特に意味はなさそう.
だが,説明としては使えなくもない・・・のかなぁという感想.

——–

使用したプログラム


今回は乗せると冗長だと判断したため,GitHubに掲載.

サイボウズからGoogleカレンダーに予定をインポートする

概要

サイボウズのスケジュールからGoogleカレンダーに予定をインポートします.
サイボウズからcsv形式でスケジュールを書き出せるので,それをGoogleカレンダーに読み込ませます.そのままでは読み込めないので,csvを少し変更する必要があります.
具体的には,サイボウズから書き出したcsvのヘッダーをGoogleカレンダーで使用するヘッダーに変更することで読み込みできます.

環境

サイボウズOffice10

csv形式で書き出す

  1. 右上,個人設定からスケジュールをクリック
  2. csv形式で書き出す
  3. schedule.csvがダウンロードされる

csvをGoogleカレンダー用に編集

基本的にはヘッダー部分を変更するだけでインポートできます.
使用できるヘッダーの詳細はGoogleのヘルプを参考にしてください.

今回は項目がない列を削除しました.

編集は,csvをテキストエディタで読み込むことでも作業できます.Excelでも作業できますが,うまく読み込めない場合は一度テキストエディタで確認してください.

編集例は次のようになります.

schedule.csv
Start Date,Start Time,End Date,End Time,Subject,Description,Location
2016/12/1,16:40:00,2016/12/1,21:40:00,バイト,ある程度前なら変更可能,
2016/12/3,16:40:00,2016/12/3,21:40:00,バイト,ある程度前なら変更可.,

Googleカレンダーにインポート

カレンダーの設定に移動します.

「カレンダーをインポート」があるので,そちらからファイルを選択,インポートできます.

エラー,メモなど

  • Excelでcsvを編集していたのですが,なぜかcsvがカンマ(,)区切りからスペース( )区切りに変更されており,読み込めなかったようです.カンマ区切りに直したところ読み込めました.
  • Googleカレンダーの設定で「カレンダーをインポート」を探すのが大変でした.カレンダー画面から右上歯車,設定にて全般設定に移動できます.全般設定の左上にカレンダーという項目があるので,そこからカレンダーの詳細設定に移動できます.
  • デザインは変更されることがあるので,各項目がない場合は適宜調べる必要があります.

WindowsでSage(Bash on Ubuntu on Windows)

概要

Sageは数学向けの計算ソフトウェアで,pythonライクに計算が可能です.
本来,SageはWindowsの対応をしていません.しかし,Windows10の機能である,Bash on Ubuntu on Windowsを使用することで,Windows上でもSageが使用できます.
Bash on Ubuntu on Windowsの導入方法やSageの細かい使用法については他に譲ります.

コマンド

Bash on Ubuntu on Windowsを起動し,以下のコマンドを入力する.

少々時間がかかるので,ネット環境,ノートPCではバッテリに注意してください.
ディスク容量も多め(5GBほど?未検証です.)に空けておくとよいと思います.

sudo apt-add-repository ppa:aims/sagemath
sudo apt-get update
sudo apt-get install sagemath-upstream-binary

備考など

はじめ,公式ページからUbuntu用のパッケージをDLして入れようとしたのですが,いろいろ足りないものが多いらしく,Sageが起動しませんでした.
結果として足りないパッケージを補うよりも,apt-getでSageを入れる方が早かったです.
自分は,デスクトップ,ノートPCで試しましたが両方インストールできました.

通常通り,Sageコマンドでの使用も可能ですし,Sage -nと入力すればノートブック形式での使用も可能です.

WordPressでMarkdownの設定

大した内容ではありませんが,役に立つかもしれないのでメモ.
内容は記事作成日(2016/10/30)のものですので,レイアウトや機能など変更があるかもしれません.ご了承ください.

設定方法の概要

プラグイン等は必要ありません.

  1. 設定ページを開く
  2. 「投稿」タブをクリック
  3. 「投稿とページ内でMarkdown記法を…」にチェック
  4. 設定を保存

で作業完了です.編集する際には「ビジュアル」モードでも「HTML」モードでもMarkdown記法が反映されるようです.

設定方法

「設定」をクリック(赤まる部分).

wpmarkdown1

設定ページ上に「投稿」の項目があるのでクリック(赤まる部分).
下にスクロールすると,Markdown記法に関する設定項目があるので,チェックを入れる(黄まる部分).
上にスクロールし「設定を保存」(緑まる部分).

wpmarkdown2

 

以上で設定終了です.

 

輪郭線を多項式で表現

グレブナ基底を勉強していて多項式で何ができるのかという疑問が浮かんだ.
昔,Mathematicaで初音ミクを表現するという話を聞いたことがあったので触ってみました.

Mathematicaで任意画像の輪郭を数式に変換する

メモ

 輪郭線を抽出し,そこから線を近似する方程式を生成するようです.輪郭線のみの情報から方程式を作成するので,色の情報とか質感とかは表現できていないみたいです.
この方程式はperson curvesと呼ばれるもののようですが,大した情報が得られませんでした.もう少し調べた方がよいかもしれないです.参考 person curves

Mathematicaで任意画像の輪郭を数式に変換するにも書いてありますが,GitHub
任意画像の輪郭を数式に変換してプロットする (Mathematica ver.8)のコードを使います(使えます).
説明はMathematica 8用ですが,10でも実行できました.

アイコンのように色と輪郭がはっきりとしているものに対して方程式を作成するのは容易なようです.
逆に,現実の画像で同じ処理をすると,輪郭線の抽出がうまくできず,なんだかわからない線を書く方程式ができてしまうようです.

この方法ならば,任意の物体を方程式として扱えそうですが,技術的な背景やコードの内容をもう少ししらべたほうがよさそうです.

あとは,とりあえず簡単な図形を方程式にして,グレブナ基底に突っ込んで,どうなるのか気になります.

引用

エクスプローラから直接Powershellを起動する方法

カレントフォルダを PowerShell で開く

カレントフォルダを PowerShell で開くより引用します.

概要

エクスプローラからカレントフォルダを PowerShell コンソールで素早く開くには、Alt + D ⇒ powershell + [ENTER]

ちゃんとカレントディレクトリで開けるのかな?と思っていたのですが,開けました.
右クリックとかで開けるほうが敷居は低いのですが,これでも十分に楽だと思います.
何より,特殊な設定が一切必要ないので,覚えるだけでどのPCでも使えます.

雑記

Ubuntuとかだと,フォルダから直接ターミナルが開けたりします.大変便利です.
Visual Studio Code なら,直接コマンドプロンプトが開けるみたいです.でもわざわざアプリ立ち上げて,ならば初めからPowerShell起動します.

Windowsでもエクスプローラから直接PowerShell起動できないのかなと思って調べました.
これでGitとかコマンドが使いたいときに楽できます.

リンク

参考になるリンクまとめ

松尾ぐみ

松尾 豊先生のサイト.最近本屋でもよく見かける有名な先生です.論文の書き方や研究について書いておられます.現在、松尾ぐみは休止し Deep Learning勉強会 が立ち上がっているようです.

発声練習

プロフィールがないため正確にはわからないですが,とある大学の先生のようです.
研究活動について様々な記事を書いておられます.

随時更新できたらいいなと考えています.(2016/10/29)

引用

マウスとかキーボードをPC間で共有するツールが便利だったメモ

以前からLANを使って,PC間の通信ができたら良いのになと思っていたのですが,ちょっと検索したら良いもの見つけました.

Microsoft Garage Mouse without Borders

DLはリンクから.詳しい使い方とかは,mouse without boredrsで検索すると日本語の紹介サイトが出ます.

WindowsのOSでないと使えないみたいですが,キーボードとマウスが1つずつあれば複数のPCを楽に扱えるようになります.
おそらく4台まで?共有することができるみたいです.

使用感ですが,マウスはほとんど遅延ない様子ですが,キーボードは安物のせいか,わずかに遅延があるように感じます.
この辺りは,環境によってまた違うと思われます.

このソフト,何が便利かってタブレットPCにキーボードとマウスをBluetooth使わずに接続できるんです.

しかも,わざわざ機器を購入する必要もない.使いたいときにちょこっとソフトを起動するだけ.

最近複数台のPCを行ったり来たりしてたので,とても助かります.