1/18 パターン認識(2)


試験について


前回の感想,質問より

Q.
maxrow(b,0)
nil
となってしまったのですが、なぜでしょうか。
A.
掲示板に書かれたmaxrowの定義
 def maxrow(a,k)
   max_i=k
   for i in (k+1)..(a.length()-1)
     if abs(a[max_i][k]) < abs(a[i][k])
       max_i=i
     end
   end
   max_i
 end
が正しく読み込まれた状態だとすると,ありそうにないですね. ファイルの他の場所などで,間違ったmaxrowの定義が置かれていて,そちらを読んでいるという可能性が考えられます.
Q.
再帰版アラインメント のソースをじーっと眺めて考えたんですが、 二つの文字列
 xxxa
 xxb
が与えられたら、
 ???a
 ??b-

 ???a-
 ????b

 ???a
 ???b
の3通りを試して、最適なものを選ぶ、という考え方で良いのでしょうか?(???は右から順に決まってく)良いんですよね。
A.
おそらく理解はあっていると思います.ただし,下の文字列の最後にギャップを入れるつもりの,
 ???a
 ??b-
は,実際には,
 ????a
 ??b--
のように,更にギャップを入れる可能性もあるので,
 ???a
 ???-
のように書いた方がより正確でしょう.上の文字列の最後にギャップを入れる例も同様です.
Q.
CFIVEの有効期限切れですが、webpageですべてやろうとすると認証とか色々大変そうです。再入力の手間を惜しんでいるようではまだまだだとは思いますが、 図書館のcad端末のように、一発で認証のうえサイトにはいってくれる機能があるとよいのですが…?
A.
今年の3月から導入される新教育用計算機システムの端末からは,SSO(single sign-on)という仕組みにより,CFIVEにパスワード無しで入れるようになる予定なので,この点は改善される可能性があります.
Q.
最終的には、rankが方程式の数よりも低い場合でも計算できるプログラムを作りたい。
A.
rankが方程式の数よりも低い場合は以下のケースが考えられます.
  1. rankが変数の数と同じ
  2. rankが変数の数よりも小さい
1の場合は,通常のGauss-Jordan法で最後に,すべての係数が0の行が出るのでそれを無視するだけになります.2の場合は,解は一意に定まらずいくつかの方程式が残ります.
Q.
計算誤差を完全になくす方法はあるのでしょうか
A.
数を有理数で表現すると四則演算の範囲では誤差なく計算できますが,指数 対数などの超越関数を使えないのでは,使える分野は限られてしまいますね. また,情報の講義でやった二分法などの解法はアルゴリズムそのものが,決 められた大きさ以下の誤差を含む可能性のある解を求めるものになっている ので,結果には誤差が含まれてしまいます.
Q.
アラインメントにおいて、不一致のスコアが−1でギャップのスコアが−2となっていましたが、これはどのように 決めているんですか? 例えば、DNAの組成などの場合は不一致による損害の方が大きいと思うので(個人的な意見です.)、実用面とあってい ないような気がしました。
A.
教科書の例題のスコアはあくまでも例として用いているだけで,実際のDNAのアラインメントに使っているものとは違うと思います.
Q.
変数の後ろに丸括弧を見かけることが多々あります(例えばアラインメントのg()など。) あの丸括弧には意味があるのでしょうか?
A.
引数の数が0の関数は定数として用いることができるというのは,講義の最初の方でやりました.Rubyではこのようなケースで()を省略できるのですが,教科書ではこの場合も()をつけるように統一しています.

補足


投票システム

vote.rbをダウンロードして,ホームディレクトリに保存してください.ドックからターミナルを起動して,
ruby vote.rb 選択肢番号
のように使います.

今日の練習,投票

関連リンク


教科書の補足


今日の課題