数値解析法 (Fortran 編), 2006-05-26 質問とコメント, M は宮本によるコメント。 h03s2011: Fortran文法入門の概要においての「具体的にはどうするのか」の 「デバック」という単語があり、どのようなものなのか、またはどのような働きを するのか分かりません。あと、同じく概要の「サブルーチン」のトコロなんです けれど、「p=q+r」について上の段の行と下の段でこの文字は特に何か必要が あって書いてあるものなのでしょうか? M: debug とは bug を取り除くことです。bug とは, プログラムのなんらかのミスの ことで, コンパイルエラーや作者の意図とは異なる動作や想定外の入力に対する 想定外の動作の原因になるものです。したがって, プログラムのソースのどこを どう直せば良いかは時と場合によって異なるし, その方法も唯一の解があるわけでは ないかもしれません。すなわち, 一般論としてどうこうすれば良いと言えるものでは ないのです。 また概要の「サブルーチン」における話は, 関数副プログラムまたはサブルーチン 副プログラムにおける引数 (ひきすう) の話ですね。実引数とか仮引数とか。 ここで私が説明するより, ちゃんとした文書または文法書を見てもらった方が良い でしょう。そもそもあなたが見たのは「概要」なわけだし。 h03s2069: 現在において、fortranの優位性が低い中、経緯・蓄積、ライブラリ、 コンパイラの優位性のような事項だけで、fortranを使うメリットはあまりないように 感じてしまいましたが、どの程度あるのでしょうか。 M: それだけでも数値計算のためには充分な優位性だと思いますが, 文法が簡単なので 初心者にも習得しやすいというメリットもあるかも。そもそも現代の先端的な プログラミング・パラダイムのひとつであるオブジェクト指向なんて, 個人で ちょこっと作って計算するレベルの数値計算では必要ないし, ということは数値計算の 初心者がいきなり C++ に挑戦するメリットも小さいと思われるわけで ...... h03s2090: fotranは人間が理解しやすい計算機言語として開発されてからずっと 今までも使われてきて本当にすごいこととおもいます。でもfotranのなかでいろいろな 特別なfortran言語があり。なぜですか? M: プログラミング・パラダイムの進展や, コンピュータの進歩 (処理能力の向上) など をうけて, 改訂されてきたようです。 h04s2012: プログラミングのはばは様々だと思いますが化学の分野でも使われて いますか? M: しょせんは道具なのですから, 便利に使って活用する人もいれば, 別の代替物を 使う人もいれば, そういうものを使わないで済ませている人等々, 色々だと思います。 h04s2016: 僕の名前読めますか?やや難しいです。 M: あえて問われたので「まほ」かと思いましたが, そうですか違いましたか。なお 正解と思われるものは, メール・ヘッダの発信者情報欄にありました。 h04s2017: fortranでどんなプログラムでも作れるのですか? M: 原理的には, 実現の容易さ困難さは棚に上げれば, イエスだと思います。少なくとも 地下迷宮の探検・宝探しのアドベンチャー・ゲームが FORTRAN66 で作成された例も あります。ということで, dungeon をおすすめします !! h04s2021: 参考書はやはりあったほうがいいですか? M: そりゃあツカエル参考書なら, あった方が良いでしょうね。比較の問題として。 h04s2022: exercize2.2のところで、なぜ誤差が生じるのですか?私はcの値を 0.5にして計算したら50、0.01にして計算したら0.9988・・・と 出てきました。面白いけど、不思議な計算だと思います。 M: 十進有限小数を二進では必ずしも有限で表現できないからです。 0.5 なら 2^{-1} ですが, 0.01 ならどうなるでしょうね ? h04s2024: fortranの長所は何ですか? M: h03s2069 あたりも参照して考えてみましょう。 h04s2027: プログラムを使っての数値解析でのメリットは何ですか また、マセマティカとは違うのですか M: 結局のところ, どんな道具を使うにしても, それなりの数値計算をするのならば プログラムという要素は不可欠なのですよ。Mathematica を使うにしても, 計算すべき 数式を入力したり, パラメータの値を順次変化させつつ計算させたり, 結果を分かり やすく表示したり別の道具へ引き継いだりするために整えて出力させたりと, 人間がコンピュータに指示を与えなければなりません。意識するしないにかかわらず, また見掛けにかかわらず, そういったことが「プログラム」なのです。 h04s2028: Fortran以外にどんな数値解析ソフトがありますか? またそれらを使う ことはFortranにくらべてどのような点にメリットがありますか? M: Fortran は言語処理系です, コンパイラです。数値解析ソフトではありません。 あなたの質問は, 「日本語以外にどんな金儲けの方法がありますか ?」という質問 くらい奇妙なものです。 h04s2030: Vineに入ったままでメールの送受信をすることはできないのですか? M: もちろんできます。メリット・デメリットを考慮して, ご自由にどうぞ。 h04s2031: fortranで前回プログラムをしたのですが、そのときに使用したコンパイルを 忘れてしまいました。確かg77とか何とか…。もう一度教えてください。また、このほか にコンパイルがあれば、教えてください。そして、それぞれ違いを教えてください。 M: 大切なことや忘れては困ることを, きちんとノートに記録する習慣をつけた方が よろしいかと思われます。科学の研究でも, 実験ノートは基本中の基本ですし。 そもそもこうやって出席確認メールの質問として書いても, 答えが帰ってくるのは 数日後だし, そもそも答えてもらえる保証もないわけだし, 必要な知識を得る手段と しては, とても効率が悪いですね。それよりも, 配布された資料とか, (オンラインの) マニュアルを見るとか, 授業時間中に TA に聞くとか, となりの席の友達に聞くとか, もっともっと速効性があって正確かもしれない調べ方もたくさんありますよ。 そういう調べる能力を身につけることも, 大学で会得すべき重要な事項だと思います。 h04s2032: 自宅のパソコンにLinuxをインストールした場合、学校のパソコンと同じ ようにはじめにWindowsとLinuxとを選べるようになるんですか? M: そういう風に設定すれば, そうなることでしょう。この段階では, そうとしか 言えません。 h04s2034: unixとLunixの違いは何ですか? M: どちらもそれなりに定義されているモノ (用語) なので, それを調べてみては いかがでしょうか ? h04s2036: 先生は、金属錯体を合成して、そのスペクトルの特徴と、分子の構造の 特徴との関係について研究していたと思いますが、その研究で何かプログラミングを つくって利用したりしているのでしょうか。 M: 分子構造や電子状態について, 量子力学の第一原理から計算するプログラムとして Gaussian というものがあり, それを利用しています。これは, 既存のプログラムを 使っているだけですが。それから, 電子常磁性共鳴法により測定されたスペクトルは, そのシミュレーションを行なうことで解析し, 必要なパラメータの値を決定します。 これは自作のプログラムです。それ以外にも, ちょっとしたデータ処理のためには ちょこっとプログラムを書いたりもしてます。 h04s2038: プログラミングを行う場合、emacsとviはどちらがよく使われますか?? また、どちらがお勧めですか?? M: その問題は, 古来からの宗教論争ですね。ここでは, 適所適材とか, あるものを 使うとか言うにとどめておきます。 h04s2039: 簡単な計算(リスト1)を実行したら、割り算の小数点以下が計算できな かったが、小数点以下まで計算するプログラムはあるのですか? M: もちろん, そういう風にプログラムを作成しておけば, できます。リスト 1 に ついては, 変数の型に注意するようにと指摘してみます。 h04s2040: 初心者が使いこなせるまでには、どのくらいの期間がかかると思いますか? 身に付けるのに何かコツがありましたら教ええてください。 M: 何についての初心者かという問題もさることながら, 器用さや新しい物事の習得が 得意かどうか, 好きかどうか, 取り組みへの熱意の程度などにも個人差があると 思われます。こんな状況で, 一般論としての期間を述べることは可能だと思いますか ? h04s2042: 出席をメールの形にすると、毎回メールだけして授業に出ない生徒もいるの ではないですか? また、そうなると最終的な課題をほかの人のをコピーさせてもらう 人もいるのではないですか? M: ご心配いただきましてありがとうございます。しかし, 現在のシステムでは, ちゃんとできた人が低い点しか得られないということはないと思いますので, どうぞ ご安心下さい。 また, たとえメールだけ出して授業に出なくても, Fortran の文法を身につけて, 課題のプログラムを作れるのであれば, それはそれで OK です。他の講義と同じこと でしょ。またメールは, ヘッダー情報をみれば, どこからいつ発信されたかを, 知る ことができますよ。また課題のプログラムや説明の文章が, コピーかどうかの比較も, コンピュータのファイルなので簡単にできますよ。 h04s2043: 参考書だとお金がかかってしまうので・・・参考になるWebサイトなどあり ましたら教えてほしいです。自分で調べるのもいいのですが先生はどういったところを 見ているのか教えてほしいです。 M: 今回の場合, 網羅性, 正確度, 携帯性, 参照のしやすさなどについては, 書籍の 方が優れていると思いますが。そういうこともあって私は書籍を参照しています。 したがって, 自分で参照していて他人におすすめできる web site はありません。 h04s2044: 日本語でもプログラミングはできますか? M: そういう言語が開発されたと, 昔聞いた覚えがあります。しかし, 日本人の間に 普及していないのは, いったいどうしてなのでしょうね ? h04s2046: 出席の配点と、評価の方法を教えてください。 M: 厳密には考えてはいませんが, 50 % を上回ることはないでしょう。そして, この 質問のように, 特に新たな発想をインスパイアーすることのない質問, ありきたりで 答えが分かっているような質問, つまらない質問は, 高い評価を得ることができない でしょう。 h04s2048: Fortranは昔からある言語ですが、今ではどういった場面で使われて いますか? M: 数値計算とかその教育とかでしょうか ? h04s2054: 家でプログラムの練習をしたいのですがどうしたらよいのでしょうか? ちなみにWindowsなんですけど。 M: Cygwin という手もあるし, もちろんハードディスクの空き領域を使ったり 新規追加したりして Linux とか FreeBSD とかでもいいんじゃないですか ? h04s2057: プログラミングで、入力ミスをしたときに長々と文章が出ますが、実際、 最初の方だけで、どこが間違っているか理解できるのに、なぜ、あんなに長々と文章が 出てくるのですか? M: 確かにね。今の時代では, スクリーンエディタでソースファイルをちょこっと修正 してはコンパイラにかけて, というサイクルがほぼリアルタイムでできるからね〜。 むかーし, コンパイル・実行が, バッチ処理だった時代には, 一度の処理でなるべく 多くの結果が帰ってきた方が, 開発効率が良かったのかもしれませんねぇ。 h04s2058: 変数の型 integer, real, double precision 等の割り当てのバイト数は いくらでしょうか? M: たぶん, 処理系依存だと思います。ただし Fortran の場合には, 取り扱える数値の 大きさの範囲や精度について言語の仕様として定義されているので, 最低でもそれを 満足するバイト数でしょう。 h04s2059: 作成したプログラムをコンパイルするときに、テキストのPDFファイルでは f77を使っていたのですが、前回の授業ではg77を使っていました。今回テキストに したがってf77を使ったらうまくいかなかったんですが、なぜでしょうか。 M: 使用している総合情報処理センターのシステムには, f77 というコマンドが 用意されていないからでしょう。システムに備えられている Fortran コンパイラを 使用していただいて, 何の問題もありませんよ。 h04s2062: windowsとvenuxの違いは何ですか?簡単な計算ならwindowsの方が便利だと 思います。 M: 本当に簡単な計算なら, 暗算とかの方が, システムの起動待ち時間すら必要なくて, 便利だと思いますよ。でも私たちが最終的にやりたいのは, もっと複雑な問題に ついての込み入った計算とか, ルーチン化できない個別の問題への対応とかです。 はたまた, たとえルーチン的な計算であっても, その中身を知ることで, 効率よい 使い方や計算の限界に意識がおよぶようになることです。 h04s2063: サブルーチンはわかりましたけど、メインルーチンとはなんですか? M: サブルーチンを呼ぶところの, 親ルーチンとでも言えばいいでしょうか。 h04s2067: ファイル名は必ず「.f」を含めないと実行はできない決まりなのかどうか? ヴァインを起動したままでメールを送る方法はないのか? M: [氏名と学籍番号がありませんので, 出席の確認はできません。] コンパイラの仕様として, ソースファイルのファイル名のサフィックスが「.f」で あることを要求するようです。またメールについては, h04s2030 を参照してください。 [6/2 学籍番号が確認されました] h04s2069: プログラムは計算以外できないんですか? M: いいえ, あなたが使っているエディタやコンパイラやメールツールも, みーんな プログラムです, もちろん。もっとも「計算」という言葉の定義によっては, これらも すべて計算と言えるかもしれませんが。 h04s2070: Fortran文法入門の「配列」の場所のプログラム dimension b(20) の意味がわかりませんでした。これの意味は何なんでしょうか? M: 配列の大きさを定義している文です。詳しくは文法書を参照してください。 h04s2071: この数値解析法は四年生の実験などで必ず必要になってくるのでしょうか? また、どの分野で扱うことが多いのですか? M: 「必修」の授業ではありませんので, その点からも想像できると思いますが ? まあしょせんは道具なので, 使うかどうかは, 人それぞれですね。 h04s2073: 最新の規格であるFortran 90/95ではなく、Fortran 77の水準で説明する 海よりも深い理由とはなにか? M: 目的 (数値計算, プログラミング初習) に対して必要十分なのがこのあたりだ, というのが通り一遍な説明です。海ぐらいに深い理由としては, Fortran 90/95 では 初習者にとってプログラムの骨格とか数値計算そのものを, 理解し取り扱う以前の お約束が多すぎると思われるからです。今ここで理解すべき本質的な部分と, それ以外の周辺部分との区別がつかない初学者には, 文法が単純な Fortran 77 で 充分だと思われます。発展的なことを学びたい人は, この他に Fortran 90/95 でも 他の言語でも, 自主的に自由に学んでください。私たち教員は, それを妨げたり 禁止したりしませんから。それが大学です。 h04s2075: リスト1で割り算の計算したときに、自分で4/8を計算したときに、 0以下を出すときにはどうしたらよいのですか? M: h04s2039 を参照してください。おっとっと, 「ゼロ以下」とは負の数のこと ですか ? もしそうなら, 正の数を正の数で割っても負にならないことは, 中学校の 数学で習いませんでしたか (^_^) ? h04s2076: キーボードに早く打ち込めるコツがあれば教えてください。 M: 身体を使う技術ですから, 訓練するのが一番ではないでしょうか。自転車に乗る コツも, 言葉で伝えるような知識ではありませんし。 h04s2078: 前回の鈴木先生の授業コンパイルの方法とプログラムを実行する方法を メモし忘れてしまいわからないのですがもう一度書いてくれませんか? M: h04s2031 を参照してください。 h04s2081: プログラムを覚えさせればグラフを書かせたり計算することができますが、 ではそのプログラムをどこが理解して、与えられた仕事をプログラム道理にどうやって 実行しているのですか? M: へ ? もちろんコンピュータですが ? 他に誰 (何) がいるというのでしょうか ? h04s2084: 仮に73行目以降に書く必要がある場合、方法はあるのですか。 M: Fortran のプログラムでは, その行数に制限はないので, 73 行だろうと 2000 行 だろうと, 普通に書けば良いのではないでしょうか ? あぁっ, もしかして「桁」の話ですか ?? でももしそうだとしても, 書くだけなら いくらでも普通に書けばよろしいのではないでしょうか。ただし, 文法上は無視される お約束ですが。ということで, そういう制限の中で工夫してプログラムを作成しな ければいけないわけですね。例えば日本語しか使ってはいけない環境で英語を 使っても, 話者の意図したとおりには伝わらないという事です。 h04s2085: C言語の教科書の内容をフォートランに代用できるのか?また、C言語と フォートランは何が違うのか? M: アルゴリズムは役に立つかもしれませんね。でも言語に固有の機能は, もちろん 代替できませんね。C と Fortran との違いは, 喩えてみれば, 英語とイタリア語の 違いくらいでしょうか。 h04s2086: プログラムの中で、implicitとありますが、これは必ず必要なのも なのですか? M: implicit の意味を文法書で確認して下さい。無くても文法エラーにはならない かもしれませんが, それが無いことによりあなたが意図した通りに動作しないかも しれませんね。初めから使わないつもりなら, それでも良いのですが, 変数名に 対する余計な問題が生じるかもしれません。