2014年1月24日金曜日

河川のシミュレーション!

河村先生の書籍です。
現在は絶版になっております。

大学の時に購入しました。
解析の基本的な説明の後、1次元、2次元、3次元の解析について記述されています。

偏微分方程式については移流拡散方程式、ポアソン方程式の解法を、
また一般座標系の説明があります。

河川に焦点を当てた(浅水流方程式に焦点を当てた)書籍は他にないような気がします。

サンプルプログラムもありますが、実用性は低いように思います。
また、流砂量公式については記述がありません。

ただし、勉強し始めた人にとっては有用な本の一つであることは間違いないと感じました。最近は大学レベルでも1からプログラムを書くことは少なくなっているようですし、
あくまでソフロウェアのユーザーであっても、知っておいた方が良いように思います。


個人的にはKKスキームについて記述されていないのが、ちょっと残念です。
日本人が作った数少ない移流項の解法ですからね。
(河村先生のその他の本には記述されています。河川だから省いたのかなと邪推しています)


日本の技術書は薄い本が多いように感じます。
ゼロから勉強しようにも、技術のバックグラウンドや基礎方程式について記述されているだけの本が多いです。基本的には基礎方程式は複雑なことが多く、複雑な方程式を解くには数値計算に頼らざるを得ないことが多いです。そのためには数値解析の基本的事項およびそれを実用的に使う方法まで書くには厚くすべきだと思ってます。
その点、海外の書籍は厚く、読むのが大変ですが、独学に向いています。
日本でもそのような流れにしていただきたいです。

ちなみに河村先生は多くの書籍を出されています。数値計算の基本的な所を記述した教科書になるものが多いです。私はファンなので買ってしまいます・・・。
エクセルVBAを使った解析について書かれているものもありますので、興味のある人は是非!



履歴

年明け一発目です。
せっかくなので、これまでのプログラミング履歴をまとめておこうと思います。
順番は適当です。


  • C/C++
Cは大学のときに最初に学んだ言語。その後、数値解析に目覚めて、CIP法を書いてみて、数式を展開して、思いどおりの結果が出てハマる。研究室に所属して、修論ではC++となるが、当時はあまりオブジェクト指向を理解していなかった。社会人になってからはチマチマ勉強して多少理解が進んだ。業務でも扱うこと(VC++)が多く、とりあえず、一番利用していると思う。


  • Fortran
科学技術計算をやるならFortranは外せない。もちろんゼロから書くならC/C++でも良いが、如何せん、研究室の遺産を利用しようとすると、書けなくても読めなければならなかった。まあ、C/C++に比べれば大したことはない。研究室では77しかなかったが、社会人になってから京都大学の牛島先生の本が出て、90/95を勉強した。当時は配列の動的確保やintent文が使えるなという印象だった。牛島先生の本は90/95の文法だけでなく、科学技術計算のプログラムの書き方について記述してあるのが優れていると思う。


  • python
初めて存在を知ったのは、研究室に入ってから。共有のパソコンにヘビのアイコンがあったのを記憶している。しばらく忘れていたが、社会人になってみんpyをちょくちょく読みながら少しずつ勉強した。高速な計算でなければ使いやすいと思う。数学者が作成した言語というのも好感度アップ。matplotlibによるグラフ作成や、ベクトルやコンター図も簡単にできるのが良い。また、マルチパラダイムなのも良い。特にFortranユーザーにも使いやすいと思う。海外研修時に簡単な温度応力解析のプログラムをこいつで書いた。


  • ruby
日本人が作ったとのことで、たのしいRubyを手に取ったのが始まり。pythonに比べて科学技術計算用途のmoduleは少ないと思う。ただし、オブジェクト指向の勉強としては優れていると思う。Railsは使ったことがない・・・。ごめんなさい。データ整理なら特に問題なく使える。業務で使ったことはない。ただし、日本人ならruby使って発展させた方が良い気がする。黒魔術も使えるし。


  • perl
仕事で海外研修時にO'Reillyの例のやつ(初めてのPerl)を読んでいた。出張中はWindowsしか触れなかったのでPadreを入れていたと記憶している。言語学者が作っているのであまりピンとこなかった。ただし、上記書籍は読んだ方が良いと思う。普通に面白い。業務では科学技術計算用Linuxの設定のついでにLAMPを入れた時に多少触ったくらい。python、ruby、perlについては用途が被るが好みで選択すれば良いと思う。どれが優れているとかは感じなかった。


  • xojo
real basicだったのxojoになった。勉強会も開かれているようだ。もちろん会社では一切使わない。移流方程式を解いて、図化する程度のプログラムは書いてみた。これも海外出張時に多少勉強した。日本語の情報は少ないが、英語の情報はたくさんあるし、リファレンスやサンプルはしっかりしている。ただ、サードパーティなので一抹の不安はある。Linux、Mac、Windowsの環境で使えるし、ネイティブコードを吐き出せるのは良い所。

  • VBA
いや、プログラム言語じゃない!と言われると思いますが、ごめんなさい。会社ではデータ整理やちょっとした統計解析なんかはVBAでやることが多いです。VBAが優れている点は、Excelがインストールしてあれば細かい設定は関係無しにみんな使える所です。通信関係は触ったことはないです。


  • VB.NET
メールを読み込んで添付ファイルを抽出するプログラムを業務で書いた。好んで使った訳でなく、遺産がVBだったから使ったまで。文法については「Must Inherits」とかカッコいいと思った。6.0から.NETで強烈に変化してしまったため、ユーザーは減ってるらしい。私の周り?そもそもプログラム書くことに情熱を持ってるやつなんていないっす。


  • java
javaによるCIP法の本が出てちょっとだけ勉強した。解析結果を表示しながら解析を進めるというもので、結構面白かった。ただ、Fortran的な書き方しかしてないので、javaを勉強した気はしなかった。ほんとはちゃんと勉強したい。Androidアプリも弄ることが出来そうだし。。。


  • ELisp
Emacsを使い始めると必然的に使わなきゃいけない。今だに使えるようになったとは思わないが、Emacsは楽しい。C/C++から入った私としては、文法に面食らった。何かに使うわけでなくEmacsのカスタマイズのみである。なおWindows環境でのEmacsライクなエディタにxyzzyがあるがこちらはCommon Lispでカスタマイズする。


  • AWK
読んだ本はプログラミング言語AWK。スクリプト言語はsh、sed、awk等が基本的な所にあると思う。利用としてはテキスト処理しかないが、結構簡単に書けるしパイプラインで繋いで処理していく過程は楽しい。完全な主観だが、ワンラインならはやりのスクリプトよりこっちの方が良いかもしれない。