lyxの設定

mactex2015にImageMagickが含まれてなかったので、画像を取り込むことができなかった。
El CapitanでのLyXの画像挿入 – Konno Log
やったこと、
lyxとmactexをアンインストール
homebrewでImageMagickとghostscriptをインストール (ghostscriptは先に入れとくと良いらしい。)
mactexのインストール
先にmactex2014をインストールして、その後、mactex2015をインストールした。
こうしないと、なぜかLyxの数式ツールバーが有効にならない。(/etc/paths.d/TeXが2014と2015で異なるから?)

mactex2014をインストール
Lyxのインストール
削除 /usr/local/texlive
削除 /Library/TeX (~/Library ではない)
残す /etc/paths.d/TeX
mactex2015をインストール

【2014年版】『MacTex 2013』と『Sublime Text 2』でpLaTeX環境をつくる - Moxbit

これで画像を取り込む問題は解決した。

その他参考
El Capitan / SierraでTeX環境をゼロから構築する方法 - Qiita
LyX の layout ファイルの作り方 – Konno Log
MacでLyxの日本語環境を整える手順 - Qiita
http://pt-diary.tumblr.com/post/107214765605/20150105-mactex

2月12日の北大でのセミナー

2月12日に北海道大学Mathematical Modeling倶楽部(HMMC)で「変分原理による対称性、エントロピー増大則、良設定問題を考慮した散逸系モデルの定式化」を話します。

http://www-mmc.es.hokudai.ac.jp/els/seminar.html

第52回
2016年2月12日(金)
16:30〜18:00 北海道大学電子科学研究所 中央キャンパス総合研究棟2号館5階講義室 深川 宏樹氏
九州大学大学院工学研究院)
変分原理による対称性、エントロピー増大則、良設定問題を考慮した散逸系モデルの定式化

第51回
2016年2月12日(金)
14:30〜16:00 北海道大学電子科学研究所 中央キャンパス総合研究棟2号館5階講義室 新居 俊作氏
九州大学大学院理学研究院)
変分原理、対称性、熱力学概説 (深川氏の講演の準備)。

タイトル
「変分原理による対称性、エントロピー増大則、良設定問題を考慮した散逸系モデルの定式化」

要旨:
散逸系の
方程式を定める方法として変分原理による定式化を提案する。一般に散逸による系の履歴依存性は非ホロノミック拘束条件として与えられる。変分原理を用いれば、散逸系の運動方程式は作用汎関数を非ホロノミック拘束条件の下で停留値を与える条件として得られる。つまり、作用汎関数被積分関数であるラグランジアンと散逸を表す非ホロノミック拘束条件が分かれば、散逸系の運動方程式が導出できる。

ラグランジアンは運動エネルギーと内部エネルギーの差で与えられる。一方、非ホロノミック拘束条件は複雑な系だと分からないことが多い。そこで我々は非ホロノミック拘束条件を課した変分原理に次の3つを満たすことを要求した。

1 物理系は対称性とそれに関連する保存則を持つ。(ネーターの定理)
2 物理系は散逸があるときにエントロピーを生成する。
3 物理系は良設定問題である。つまり解が存在する。

これにより、ラグランジアンが与えられた時に非ホロノミック拘束条件のクラスが決まり、散逸系の運動方程式が得られる。我々はこの定式化を界面のある粘性流体、二成分流体、液晶に適用し、これらの運動方程式を得た。

本講演では、主に理論を紹介し、最後に現在我々が行っている数値計算について議論したい。

参考文献

Hiroki Fukagawa, Chun Liu, and Takeshi Tsuji. A variational formulation for dissipative fluids with interfaces in an inhomogeneous temperature field.
arXiv:1411.6760

Ubuntu 15.10のメモ

sshの設定
$ sudo apt-get update
$ sudo apt-get install openssh-server
$ service ssh status


sambaの設定
https://www.howtoforge.com/tutorial/samba-server-ubuntu/
に従った。一度、これで設定するとnautilusからでも共有設定ができるようになる。最初からGUIでやろうとするとハマる。


CUDAの設定
http://qiita.com/bohemian916/items/a48e6496b04bbbf09fb3
に従った。15.04のパッケージファイルでも問題ない模様。
sampleを動かそうとしたが、GCCのバージョンが5.2だと動かない。4.9にする必要があり。むうー。
この作業でドライバーはNVIDIAのものになる。Nouveauを無効にする必要はなかった。



VPNの設定
HAMACHIとHaguichiを使う。
http://netbuffalo.doorblog.jp/archives/3391925.html


その他
team viewer


Haskell platformのインストール
sudo apt-get install haskell-platform


Ubuntu のデスクトップ環境のフォルダ名を日本語から英語にする
http://qiita.com/matoken/items/1e43b4f446060f64afa1


HDDの追加
http://sicklylife.at-ninja.jp/memo/ubuntu1510/hdd_format.html

変分原理による非一様温度場中の界面のある散逸流体の定式化

セミナーやります。>現象数理セミナー

第86回現象数理セミナー
日時:11月19日(木)15:30-17:00
場所: C512室(九州大学伊都キャンパス・ウエスト1号館)
(終了後に地下鉄沿線にて懇親会を開催します)

講演者:深川宏樹 九州大学大学院工学研究院機械工学部門

タイトル:変分原理による非一様温度場中の界面のある散逸流体の定式化

要旨:

非一様温度場中にある二成分流体、液晶などの複雑な内部構造を持つ界面のある散逸流体の運動方程式を知るのは難しい。我々はこの問題を解決すべく、変分原理による定式化を提案した。

一般に、散逸による系の履歴依存性は非ホロノミック拘束条件として与えられる。変分原理を用いれば、散逸系の運動方程式は作用汎関数を非ホロノミック拘束条件の下で停留値を与える必要条件として得られる。つまり、作用汎関数被積分関数であるラグランジアン密度と散逸を表す非ホロノミック拘束条件が分かれば、流体の運動方程式が導出できる。

ラグランジアン密度は運動エネルギー密度と内部エネルギー密度の差で与えられる。一方、非ホロノミック拘束条件は複雑な系だと分からないことが多い。そこで我々は非ホロノミック拘束条件を課した変分原理に次の2つを満たすことを要求した。

1 物理系は対称性とそれに関連する保存則を持つ。(ネーターの定理)

2 物理系は良設定問題である。つまり解が存在する。

これにより、ラグランジアン密度が与えられた時に非ホロノミック拘束条件のクラスが決まり、散逸系の運動方程式が得られる。我々はこの定式化を界面のある粘性流体、二成分流体、液晶に適用し、これらの運動方程式を得た。

本講演では、主に理論を紹介し、最後に数値計算について議論したい。

参考文献

Hiroki Fukagawa, Chun Liu, and Takeshi Tsuji. A variational formulation for dissipative fluids with interfaces in an inhomogeneous temperature field.

arXiv:1411.6760

Haskellで正格評価でループを回すには?

Haskellでは再帰的に定義された関数は遅延評価で計算される。
この遅延評価はHaskellの売りの一つであるが、これが時には仇となる。

たとえば、優雅な実装例で知られる次のフィボナッチ数の実装は遅く、メモリの消費量も多い。

fib n = fibs !! n
fibs = 1:1:zipWith (+) fib (tail fib)

これは、値が評価されるまで計算が待機してメモリが保持されつづけられることが原因だ。
これを解決するには、遅延評価ではなく正格評価で計算すれば良い。
Haskellの神話 - あどけない話
ではzipWithを正格化したzipWith’を定義して、計算を早くする例が提示されていた。

再帰でループを表現するのは、haskellならではの優雅な実装方法だけども、基本は遅延評価なので今あげた問題がついて回る。

例えば、C言語

old=init

for (i=1; i<100; i++) {
old = new;
new = func(old);
}

みたいな計算をhaskellでやりたい場合はどうしたら良いだろうか?

例えば、
func x = 2*x
とする。

再帰関数を使った場合は、

func x = 2*x
iter n = iters !! n
iters = 1:map (*2) (iters)

といったところだろうか?

これは遅延評価され、funcが重たい計算やメモリを使う計算になるとnの増大とともに計算速度、それ以上にメモリの面で不利になる。
そこで考えたのが、次のような正格評価での計算だ。

import Data.List
func x i = 2*x
iter n = foldl' (func) 1 [0..n]

これなら、遅延評価によるメモリ消費の増大も計算速度の低下もなくなる。

この話とは直接関係ないのだが、「再帰をよく理解したら、なるべく再帰を使ってはいけません。」はなるほどと思った。Haskell勉強したては、再帰すげーってなってたけど、強すぎる力だったんだね。
プログラム言語の進歩は言語の力を弱めて行く方向にあると思う。


Haskellの文法(再帰編) - あどけない話

変な話なのですが、再帰をよく理解したら、なるべく再帰を使ってはいけません。上記の例を見ると再帰が goto 文のように思えた人がいるかもしれませんが、その直観はあたっています。再帰はいろんなことが実現できるので、読み手には理解しずらいのです。

熟達した Haskeller は、以下のような力の階層を理解しています。

再帰
foldr、foldl など
filter、take など
上が力が強く、下へ行くほど力が弱くなります。力が強いと何でもできてしまうので、コードの意図が不明瞭となり、また間違いが入り込みやすくなります。力が弱いとできることは限られるのでコードの意図は明確となり、間違いが入りにくくなります。

「目的に合う一番力の弱い手段を使う」のがよいプログラムを書くための大原則です。

英辞郎のデータをubunntuで使う

辞書ツールはgolddictにした。

次を参考にした。
英辞郎(第五版)をstardictに変換する方法:iPad/iPhoneで英辞郎を使おう:iPadイングリッシュ:iPad/iPhoneによる英会話独学術
aaa555 no Zakki (Daily Memo)
aaa555 no Zakki (Daily Memo)

実際の手順は、

Windows上での作業

1)『英辞郎 第五版』をインストール。
2)インストールした「PDIC Unicode for EIJIRO V」を起動し、「File」>「辞書設定<詳細>」>「辞書設定」ダイアログで以下の4個のファイル
・EIJI-118.dic
・WAEI-118.dic
・RYAKU118.dic
・REIJI118.dic
を表示し、「辞書の変換」を選択し「辞書変換の設定」ダイアログを表示させる。「変換先ファイル形式」に「PDIC1行テキスト形式」選択する。
3)文字コード変換 「Unicode」から「UTF-8」に変換。
文字コード変換ツール for .NET 2.0」
http://www.vector.co.jp/soft/winnt/util/se372195.html
を使う。



ubuntuでの作業

4)以下の2つのスクリプトを使って変換する。

#!/usr/bin/perl

use strict;
use warnings;
use utf8;
use Encode;

my $infile = $ARGV[0];

if(!$infile) {
die "Usage: $0 [infile]\n";
}

my $file;
my %W;

open($file, $infile) || die "$!\n";

while(<$file>) {
my $line = decode('cp932', $_);

if($line =~ /^(.+)? : /) {
my $key = $1;

#$key =~ s/\{.+\}//;
#$key =~ s/\s+$//;

# 優先的に最初に持ってくるようにkeyにスペースを追加
$key =~ s/\{/ \{/;

$_ =~ s/\r//;

$W{$key} = $_;
}
}

close($file);

foreach (sort keys %W) {
print $W{$_};
}

use strict;
use utf8;
use Encode;


my ($key, $value, $word, $class, $prevword, $in) = ('', '', '', '', '');
my %desc;
my %classvalue = (
'語源' => 23,
'名' => 22,
'代' => 21,
'動' => 20,
'自他動' => 19,
'他動' => 18,
'自動' => 17,
'形' => 16,
'副' => 15,
'助動' => 14,
'前' => 13,
'助' => 12,
'接続' => 11,
'接頭' => 10,
'接尾' => 9,
'間' => 8,
'句動' => 7,
'句他動' => 6,
'句自動' => 5,
'略' => 4,
'人名' => 3,
'地名' => 2,
'組織' => 1
);


while (<>) {
chomp;
$in = decode('cp932', $_);
if ( ($key, $value) = ($in =~ m/^■(.+) : (.+)$/) ) {
if ( $key =~ m/^([^\{]*[^\{\s])\s+\{([^\}]+)\}$/ ) {
($word, $class) = ($1, $2);
}
else {
($word, $class) = ($key, '-');
}

$value =~ s/\\/\\\\/g;
$value =~ s/■・/\\n /g;
$value =~ s/■/\\n/g;
$value =~ s/([a-zA-Z]+)・/$1?/g;


# $value =~ s/{[ぁ-?/()・_ー ]+}//g; # to remove (most of) FURIGANAs
# $value =~ s/【@】([^、【]+、)+//; # to remove KANA pronunciations


if ( $word !~ m/[。、]/ ) { # to remove sentences, i.e. non-words, in order to avoid StarDict crashing
if ( ($word ne $prevword) && ($prevword ne '') ) {
flush($prevword, %desc);
undef %desc;
}
$desc{$class} = $value;
$prevword = $word;
}
}
else {
print STDERR encode('cp932', "irregular line[$.]: $in\n");
}
($key, $value, $word, $class) = ('', '', '', '');
}
flush($prevword, %desc);


sub flush {
my ($word, %desc) = @_;
my ($key);

print encode('utf8', "$word\t");
if ( $desc{'-'} ) {
print encode('utf8', "$desc{'-'}\\n");
delete $desc{'-'};
}
foreach $key (sort byclass keys %desc) {
print encode('utf8', "?$key?$desc{$key}\\n");
}
print "\n";
}


sub byclass {
my ($as, $ac, $am) = ( $a =~ m/^(?:([0-9]+)\-)?([^\-\s]+)(?:\-([0-9]+))?/ );
my ($bs, $bc, $bm) = ( $b =~ m/^(?:([0-9]+)\-)?([^\-\s]+)(?:\-([0-9]+))?/ );
my @diffs = ($as - $bs, $ac - $bc, $classvalue{$bc} - $classvalue{$ac}, $ac cmp $bc, $am - $bm);
my $diff;


foreach $diff (@diffs) {
if ($diff != 0) {
return $diff;
}
}
return 0;
}


5)全てのファイルについて、以下の2種類の文字置換を行う。vimを使った。
・「///」をタブコード「¥t」(半角¥とt)に変換
:%s;///;\t;g

・「¥」(半角¥)を「¥n」(半角¥とn)に変換 ←いらないかも
:%s;/;\n;g


6)stardict-editor コマンドを実行し、 .tab ファイルを指定して [Compile] をクリックする。
7)できたファイルをgoldendictを立ち上げ、編集>辞書でファイルをインポートする。