できることはむちゃくちゃ多いのだが、なかなかうまい使い方がわからないのも事実。それが大きな悩みかなとおもった。その手間をかけても数式処理ならかなり意味のあるサービスだけど、Googleに聞けばわかるようなことだったらそうも意味は無いかと。他専攻の学生向けの機械工学の授業で、力学のシミュレーションをする課題が出た。ルンゲクッタ法でもって微分方程式を数値的に解いてこいと言う内容。ルンゲクッタ法の詳しい説明についてはWikipediaを参照のこと。いう微分方程式を数値的に解く方法が書いてある。連立させることで2階の微分方程式が解くことが出来る。いうわけでかなり有用な方法である。解析的に解ける微分方程式なら解析的に解けばしまいだが、なかなかそうもいかないからシミュレーションするのだと言っていた。今回の課題にも関係あるのだが、単振動する系に抵抗が加わる時、その抵抗が速度に比例するものなら、解析的に解くことができることはよく知られている。速度の2乗に比例する抵抗だったらどうなるのとなると、これは難しい。いうか解けるのか?物体の位置によって抵抗の大きさが変わってくるとかいう問題はとても解析的に解ける気はしない。実は今回の課題では最終的に位置によって抵抗の大きさが変わる系の解析を行うことになっていた。いうわけでルンゲクッタ法で微分方程式を解くプログラムを書いてみた。C++で書けばよいそうなので、とりあえずさっと書いてみた。テンプレートメタプログラミング使いまくって何連立でも解けるようにしようかとも思ったけど、それはめんどくさいのでとりあえずは2連立に限って解くことが出来るプログラムをさっと書いてみた。抵抗が速度に比例する場合について解いてみて、解析的に得られた解と比較してみた。するとだいたい一致していた。条件によっては完全に重なって見えないぐらい。有名な方法だけのことはある。式をいろいろ変えてみたらすぐに問題は解けた。いちいちコンパイルし直すのはめんどくさかったけど、まぁこれはしゃあないね。シミュレーションのツールとかないんですかね。「大学ではFORTRANでシミュレーションのプログラムを書くのだ」とか言ってたけど、そういうもんなんですかね。FORTRANにしてもCにしても結局自作するもんなんですかね。電子回路ならSPICEという有名なシミュレーションツールがあるけど。一般的に使えるツールがないのかな。阪急というと大阪では梅田でしか乗れないイメージがある。近鉄なら鶴橋~難波で、京阪なら京橋~淀屋橋・中之島でいろいろな路線と接している。阪神はもともと梅田・野田ぐらいだったが、なんば線ができて西九条~難波も乗り換えに便利に使えるようになった。阪急は十三で3線束ねられたあと、梅田まで他路線との乗り換え駅はない。京都線についてはそれは正しくないらしい。電車に乗れば堺筋線で大阪の都心に行くことが出来る。意外と使い勝手のよいルートらしく、京都線に限ってはこれはかなり有用らしい。堺筋線は大阪の地下鉄の中でもあまりぱっとしない路線だよね。西に御堂筋線・東に谷町線があって、特に御堂筋線は近いから、駅と駅が地下道でつながってるとか珍しくない。乗り換えができるが、まぁこのへんは御堂筋線にも言えること。北端で阪急と直通していて、南端の天下茶屋での南海との乗り換えは他にない便利さらしい。堺筋線の改札出たらすぐに南海の駅があるようで。そんな特徴を生かして、堺筋線は南海と阪急京都線や京阪を連絡するのに利用されているらしい。御堂筋線で難波まで行ってというのもありだが、難波での乗り換えはややめんどくさいし、阪急からだと梅田の乗り換えもややめんどくさい。京阪からだと京橋~新今宮で環状線に乗るのもいいし、そっちの方が安いけど天王寺で乗り換えとか長時間待たされることもしばしば。考えると堺筋線を使うというのは確かに賢い。近鉄からだと南海は難波で歩いて乗り換えれば済むのであまり考えたことはなかったが、なるほどなと思った。南海に乗って行けるところというと和歌山とか高野山とかありそうだが、やっぱり関空ですかね。これまで僕も何回か南海に乗ったことあるけど、関空に行くのと堺に行くのにしか使ってないから一番重要そう。関空へはJRでも行けるが、南海に比べてJRはかなり高い。JRだと天王寺~関空で1030円するところ、南海だと890円で済む。JRは分割するとやや安くなるが、まぁ微妙な話。特急乗るぞとなれば、はるかの特急料金は自由席で730円に対して、ラピートの特急料金は指定で500円。いうわけで大阪と関空を移動するなら南海の方が断然安くて済む。やって運賃が安いと示されると、けど南海は遅いんでしょと思ってしまうけど、実はJRも速くなくて、所要時間は同じぐらいというのが事実。途中の停車駅の数が全然違うからはるかの方が速いけど、いまははるかは1時間に1本が基本だからその速さも生かせるか微妙。乗り換えの回数など考えるとJRの方がよい面もあるのは確かだが、なにかと関空アクセスに南海を使うのはいいアイデア。これを京都から堺筋線経由で使うことを考えてみる。京都~関空を全区間JRで行く時の1830円とか、リムジンバスの京都駅~関空の2500円に比べると、かなり安くて京都の都心に直接行き来できるという点で優れている。所要時間もJRで関空快速・新快速を使う場合に比べてそう悪いとも言えない。10分ぐらい余分にかかるだけだし。新快速の化け物じみたスピードを考えればこの程度で済むのはなかなか健闘していると言えるかな。南海-堺筋線-阪急ルートでの関空アクセスのための割引きっぷが売られるようになった。(南海電車)なぜか方向によって名前が違う。関空行きは阪急で、京都行きは関空でしか売ってない。さっきの1550円相当の区間が1200円で利用できる。ラピートが+300円で利用できるなどかなりお得感がある。あとおもしろいのは阪急の有効区間が天六から390円区間なので、嵐山とか河原町以外からも使える。こんな有用なルートがあったとはなぁ、とこのきっぷが発売されるニュースを聞いて驚いたもの。休日昼間は河原町発着の準急が堺筋線に乗り入れることになった。いっても京都に行くのに使えるかと言われると微妙で、準急は遅いから特急に乗り換えんとやってられん。いうのに、これを京都まで乗り換え無しで行けると宣伝していることにはかなり違和感を感じた。乗り換えがよくわからない人にはいいのかもしれんけど、それでも休日昼間だけだからなぁ。昼間ガラガラの堺筋線が減便されたのは妥当だと思うけど。そのための方便なら別にいいかなとも思うが。CommentCの制御構造もPerlに見習おう今日も組み込みの講座へ。今日からマイコンのプログラミングというわけで、ディジタル入出力について一通り。プログラムを自分でいじいじして遊んでる人もいたが、まずはサンプルのプログラムを写すところからはじまる。そのプログラムに紛らわしいものもあった。for(j=0;j<250;j++);}こんなコードだが、写す時にセミコロンを正しく付けないと全くうまくいかない。つまづいているひと多数。あまりにしょうもないミスなのでちょっと言えばわかってくれるけど。for(j=0;j<250;j++){}}となるかな。}内がなにもしないという文なので、;だけ書いていると。これを正しく理解している人はどれぐらいるのだろうかという疑問がある。ここでPerlは明快だなと思うわけである。Perlには後置ifとかあるけど、そういうのは使わないとすればそうなる。ifに相当するものはelsifという特別のキーワードを持っている。解釈されてるからいいんだけど、Perlではこれができんから。}を省略できるおかげでうれしいこともある。+1;こういうことはよくやるよね。1行でまとめて書けばコンパクトで読みやすくていい。ifの対象になるのは後の1文だけ。書く方が無難なのかも知れない。初心者向けの講座なのでこういう部分でも丁寧に書いておいた方が正しい理解が得られるんじゃないかなと思った。書くのは正しいけどどうかとも思うのよね。普通はこんなループ作らんから、一体なにをしてるのかなと思ってしまう。書いておけば、なにもすることがないんだなと明快だ。欠かさないように心がけていこうとおもった。ところでCで書くようなforってPerlとかRubyではあんまり書かんよな。}}と数値についてやるときは範囲演算子を使うのが普通。配列についてやるなら、Perl・RubyだけでなくC#でもforeachを使えば出来る。Cではforeachのような機能はない。書くわけだけど、ここでiとjが出てくると1つ目のforでjが出てきたり、2つ目のforでiが出てきたりというミスをしやすい。意図してやっているならそれでもいいんだけど、こんな風に数字を数えるのならそれではいけない。んもんかねとは思うけどCではどうにもならん話。C++ではどうなんだろ。algorithmと組み合わせて使うぐらいしか使い道ないよな。今のところは注意して書くしかないってことか。CommentソフトウエアもハードウエアもCで書ければいいな今日聞いた研究に関する発表で興味深い話があった。この発表はハードウエアのC言語設計についての論文紹介だったのだが、なかなか夢が広がる話だった。最近では論理回路の設計の主流というのはVerilogとかVHDLとかHDLを使って記述して設計する、RTL設計が主流。実際僕もこれで画像処理を行う回路を作った。具体的にNANDとかNORとかそういうのを考えるんじゃないというのがポイントで、ゲートレベル設計よりも抽象度が高いとされている。回路の動きをポコポコ書いて行くだけなので複雑な回路でもうまく書くことが出来る。ここで作ったソースを論理合成すると実際の回路にすることができる。して複雑な振る舞いをする回路でもうまく作れる。いうわけだけど、どんな回路を作ろうかなと頭の中にないと設計できないのは言うまでもないこと。そのどんな回路を作ろうかなとか、これはソフトウエアでやろうと決める段階の設計をシステムレベル設計というらしい。そこでそのシステムを記述するのにCのような言語を使って、それでそこからソフトウエアとハードウエアを作っていこうと。いうことをやりたいねというのが、このハードウエアのC言語設計って話。それでなにがうれしいのか、その発表で行ってたことと、後に質問で聞いたことによれば、ソフトウエアとハードウエアを統合して考えられるから、システムレベルでの見直しがしやすくなるとのこと。紹介されていた論文ではハードウエアとソフトウエアの切り分けをいじるということをやっていたのだけど、まさにそういうことに向くものらしい。いえ、今のところは夢のような話というのが事実だそうで。いうのも、このようにCのような言語で書いたものをうまく回路に落とすことができないらしい。実用的にはVerilogやVHDLのようにRTLの記述ができる言語が欠かせないのが実情だそうで。真に使えるものなのかなという疑問はある。そこらへんは明らかにされてなかったのでなんとも。このネタに食いついていたのが、画像処理の研究室の人。自分たちがソフトウエアでやっている処理には時間がかかるけど、これを同じようにCで書いて、ハードウエア化できて高速化できるなんて夢のような話じゃないかと。もっともなことで、アルゴリズムを書いて、ちょこちょこいじったらソフトウエアもハードウエアもできてしまう。それが目標ではあるわけだろう。彼の研究はなにをやろうとしているのか。実はよくわかってないのだけど、少し期待しておこう。Comment数学のTAで教えたいこと今日は数学のTAに行ってた。クラスにより2つに教室を分けてやっていたのだが、電気工学科の学生がいる方の教室でやってた。うちの高専は1~3年は数学の授業が2つある。それで、それぞれ個別にTAの課題が出ていて、TAに参加するかどうかも各科目独立に決まるらしい。あと課題も担当教員によって違うなどなにかとめんどくさい。一方の科目は担当教員が同じなので課題は同じだったが。課題は問題集のこの範囲として出されることが多いが、ある担当教員は自分でプリントを作って持って来た。問題集の問題は事前に調べてくることが出来るが、プリントの詳しい内容はなかなか。いうわけでこれは1年生にとっても初見で解くことになるし、僕たちにとっても初見で教える必要がある。1問目から厄介な問題だった。x3+x2+ax+bをx2+2x-1で割った時の余りが5x+2であった。