数値解析法 (Fortran 編), 2002-06-14 質問と回答 M は宮本による回答。 h99s2076: 今日UNIXでNETSCAPEを使ったら教官の言ったとうりに使い物 になりませんでした それは、今後も使えないという事ですか? M: prex にインストールされている Netscape Navigator はややバージョンが古いし, 処理が重くなるために実用的ではありませんね。prex 用のニューバージョンは無い ので, 今後も改善される見通しはありません。我慢するか別の解決法をとるべし。 h00s2003: 二次方程式が分かりません? M: これは「分かりませんか ?」という疑問文なのだろうか ? h00s2008: 今日やった構文はだいだいわっかたのですが、その他の構文については 実際にやっていないので練習で作りたいのですが、自宅で練習するにどうしたら いいですか?ぜひ教えてください。 M: この講義のための資料は公開していますので, 自由に持っていってかまいません。 また巷には, Fortran 言語の入門書はいくらでもあります。これらを参照して自習 すればいいのではないでしょうか。 それとも自宅のパソコンでコンパイルしたり... という意味かな。もしそうなら, Linux や FreeBSD といった PC-Unix を入れてしまえば Unix 環境があなたのものに なりますよ。 h00s2009: 単語の意味はやっぱり自力で覚えないとだめなのでしょうか? M: 覚えるのに自力でも他力を借りてもいいですが, いずれにしても他人に代りに 覚えてもらうようなことはできないと思いますが。 h00s2014: この授業は特に物理系の人にお勧めだそうですが、化学系(分析化学) などでは、今授業でやってることを使う機会はあまりなかったりしますか? あと前回メールだしたのですがアドレスを打ち間違えて自分のとこに戻ってきました。 前回の分出席になりますか? M: 機会は与えられるのを待つばかりでなく, 自ら積極的に作り出すことも重要です。 研究内容によって, 物理系でも使わなかったり化学系でも使ったりします。そもそも そういう区分は無意味ですので, 早く卒業しましょう。 また前回のメールの件は, エラーメールをそのまま私に転送してください。発信日時 情報で前回の出席を確認します。 h00s2015: わからない所は、なかった。 M: そうですか, それはよかったですね。でもメールが要件 (何らかの質問を含むこと) を満たしていません。 h00s2018: プログラムは今、現代はどのように、進化しているのですか? emacs以外にどのようなプログラムの種類が、あるのですか? M: 一度作成されたプログラムは, 書き換えられない限り自動的に進化することは無いと 思います。プログラム言語またはプログラム作成方法については, 過去に何度かの パラダイムシフトがあったようですし, 今後も無いとは断言できません。 プログラム作成法については, 構造化プログラミングはすっかり根付いたようだし, 最近のちまたではオブジェクト指向が流行りかな。もちろん研究の最前線はもっと いろいろあるでしょう。 ところで「プログラムの種類」という言葉が何をさすのかよくわかりません。emacs は アプリケーションのひとつにすぎないのであって, その他に何があるかと言えば, いくらでもあるとしか言いようがありません。``ls /bin'' で表示されるものとか, あなたが今日作ったプログラムとか, いくらでもあります。 h00s2022: Fortran part2 の1番はじめのプログラムを作ってみたのですがエラーが でました。line 21の文番号10が定義されていないと出たのですが、はじめに6文字 空けるのではないのでしょうか? あと、今日の自分で作ってみるプログラムがわかりません。解答例は、でるのでしょう か? M: どんなエラーが出たのか分かりませんので, なんとも言いようがありません。 なお文番号は一行の二桁目から五桁目の間に書きます。実は Listing 5 の 九行目は, 四桁目と五桁目に 10 と書かれているのです。(わかりにくいですね) また *解答例* であれば, 私が示す必要はありませんね。友人に見せてもらえばいい でしょう。そのプログラムが正しいかどうかは, 実際に計算させてみたり, プログラム の論理を追いかければわかります。そのプログラムが頑丈かどうかを知るには, それ なりのテスト方法と考え方が必要です。そのプログラムが分かりやすいかどうかは, 他人の意見に耳をかたむけてみましょう。 h00s2024: 今習っていることはどういう時に活用されるんですか? M: あなたが活用しようと思ったとき。(同じ知識を身につけても, ある場面でそれを 活用しようと考える人と, そうでない人がいますね。) h00s2027: 自分が書いた文章を『無許可で』公表されるのは非常に不愉快です、 直ちに止めてください。入力させるプラグラムくらいプリントの配布をお願いします。 M: 公開することとその目的はあらかじめ明示してあります。また講義資料はファイル として公開してあります。自由に持っていって下さい。 h00s2030: 計算を行わせて、求められた数値の…例えば少数第2位までの値がほしい ときなどなど…その次のケタを四捨五入してくれたり、切り捨てたりしてくれるよう にプログラムすることは可能ですか? M: 手順を定義できる作業であれば, そのとおりにプログラムを作れるという意味なの で, コンピュータにやらせることができるでしょう。 h00s2033: どうしてこっちのコンピュータをつかうんですか M: 「こっち」とは, どっちですか ? h00s2035: 小数、整数、複素数を含む変数の型はあるのですか? M: 「含む」の意味がとれません。同時に実数でありかつ整数でありかつ複素数である ような変数という意味でしょうか。現実にそんな数ってあるのでしょうか ? h00s2045: もっと簡単にプログラムする方法とか無いのでしょうか?2次方程式の プログラムは操作が難しいです M: なにをもって「簡単」というのでしょうか ? h00s2050: 前回あて先を間違い、ちゃんと送れてないのですが、欠席になるのですか? M: エラーメールが返ったと思いますので, それをそのまま私に転送してください。 発信日時情報で前回の出席を確認します。 h00s2052: ゲームなどで動画が使われてますが、例えばスポーツのゲームでのボールの 動きなどはすべて運動方程式のなどで入力のつど計算されるのですか それは今日 やった計算の応用と考えていいのですか? M: 今日やったことの応用であることには間違いないでしょう。しかし個別の製品で どんな内部処理を行なっているかはわかりません。いちいち運動方程式を解かなくても 「それらしく」見せる手段はあるでしょう。 h00s2053: Lnuixでこの数値解析法のことは勉強できますか? M: もちろん可能です。物質理工学科の研究室では, Linux で数値計算を行なっている ところもありますよ。(うちもそうですよ ... と宣伝してみる) h00s2057: windows上でFortranを用いようとした場合、必要なアプリケーションは あるのですか?普通にワード上とかでも動くのですか? M: Fortran コンパイラはアプリケーションプログラムのひとつです。またワードも アプリケーションプログラムです。(いや, ワードは普通名詞か ;-p) Fortran コンパイラで作成した実行形式のファイルも, アプリケーションプログラム のひとつです。 さて, あなたは何を聞きたいのでしょうか ? h00s2058: FORTRANで作ることができないプログラムはどんなものはどんなものが あるんですか? M: 別の言語では作れるが Fortran では作れないという意味でしょうか。作成の困難さ や計算処理の効率の悪さを無視すれば, 原理的にはある言語で記述できるものは別の 言語でも記述が可能と思われます。 h00s2060: 数学には微分と積分がよく出てきますが、そのやり方を教えてください。 M: 高等学校の数学の時間に習ったのではないでしょうか。受験科目にもあったはず。 h00s2061: フォートランのプログラムを現在やっているわけですが、BASICのプロ グラムをやっているかのような感じがします。一体この二つのプログラムには、どこが どのように違い、どんなプログラム特性があるのかが今回の質問です。 M: その疑問に答えるには, BASIC 言語の出自を調べるのが適当と思われます。 親子関係が逆ですね。FORTRAN を元に Beginner's All-purpose Symbolic ... は 作られたそうです。 h00s2062: いつも講義ウィンドウズで画面を見ながら行ってますが、プリンタから 印刷してプリントも自分で持ってないと駄目なんでしょうか? その際、やはり プリンタの用紙は各自の負担になるんですか? M: 「印刷しなければいけない」などという制限は無いと思われます。お好きなように。 ただしプリンタ用紙は自己負担というのが演習室のルールですね。 h00s2063: emacsを起動したとき、たまにC-c C-cやC-x C-cを押しても普通にccなどと 記入されて実行されません。なぜですか? M: 例え何らかの機能が発動されなかったとしても, 少なくとも入力したままの C-c C-c や C-x C-c と表示されるはずですが。コントロール・キーをちゃんと押して いないのかもしれませんね。 h00s2064: 各自で用紙を持ってきてコピーしろと言っているが半年で授業料25万を 収めるのだから授業で使うものぐらい用意してもいいのではないかと思う。そこが 一番疑問に思った。授業中だけ使えるようにしてはだめなのか。ぜひ答えてほしい。 M: 私は紙に印刷することを強制してはいません。またセンター演習室のルールに ついては, 運営委員会などがありますのでそちらへ言ってください。 h00s2068: なるべく簡単に答えが狂わなくする方法(どんなプログラムでも)はある のですか。 M: たぶん汎用的な解決法はありません。個別の計算問題ごとに有りそうな不都合を 考えて対策をとるしかないでしょう。その意味でも, おかしな結果になったときに 原因を探しやすくするために, わかりやすいプログラムを書くことが重要です。 h00s2070: 2次不等式の解を求めるためのプログラムを作成するのに、どうすれば いいのかいまいち分からなかった。 M: 授業時間中に出した課題は「二次不等式」ではなくて「二次方程式」を解くこと ですよ。解き方は高等学校の数学の時間に習いませんでしたか ? これまではそれを 日本語または数式という言葉で記述していたのですが, 今度は Fortran という言葉で 手順を記述すれば, それがプログラムです。 h00s2072: 前回休んだので友達に聞きながら現状回復するので精一杯で、やってる ことを理解する事まで頭が回らなかった。二年の後期にもやったが、あまり理解でき なかった。次回までに理解してなんとか追いつきたい。 M: どのへんがどうして理解できなかったのでしょうか ? それを教えていただければ, 教え方を工夫できて, みんなが幸せになれますね。 ところで, メールが要件 (何らかの質問を含むこと) を満たしていません。 h00s2079: 一発で積分してくれるコマンドは存在しますか? M: 何を一発なのかよくわかりませんし, どこに於ける存在を問うているのかが不明 です。そこでここでは「有るところにはある」とか「作ればある」と答えておこう。 h00s2082: 二次方程式のプログラムのほかにプログラムを作るとき、プログラムの 作成の順序はどれでも同じなんですか? M: うしろから考えて作ってもいいですが, 普通の人間には困難ですね。 h00s2083: 配列というプログラムの具体的な使い方はどういうものなんでしょうか? M: 配列はプログラムではありません, データ構造です。ところで (メモ用紙や巻物 ではなくて) ノートの具体的な使い方はどういうものだと思いますか ? h00s2084: 「do〜do end」の間に、何行もの沢山のプログラムを入力したら、計算が くるったり、遅くなったりしたりすることはないのですか?また、配列のプログラムで 最後に「end program」のprogramは必要なものなのですか?普段からプログラムを 作るときは「intager」よりも「real」を使うように心がけたほうがいいのですか? M: いずれやりますが「do -- end do」ですね。さて, 間に入る処理の多さで計算の 結果が狂っては困りますね。もちろんたくさんプログラムを入力すれば, それだけ 処理に時間がかかると予想されますが。計算時間を根拠に計算精度が決まることは 無いのではないかな, 逆に計算精度の高低を根拠に計算時間の長短は決まるかも しれませんがね。 また, たしかに「end program」の program は無くても良いですが, end は必須です。 最後に, 常に integer よりも real が良いとは限りません。実数の方がメモリも 計算時間もたくさん必要なことが多いですが, 一方で計算機資源は有限ですから。 また金融関係では, 計算誤差が許されません。計算誤差で預金や貸借金が増減しては 困りますね。ということで, ありきたりですが, 「適所適材」ということです。 h00s5016: 条件文ifの中に入れる条件に何か制限みたいなものはあるんですか? M: 真偽値をとる論理式が入ります。 h00s5018: プログラムにおいて、if文の中にさらにif文を使って、たくさんの分岐を 樹形図風に作ることは可能なんですか? M: 不可能とする理由は見当たりません。 h00s5028: 今後、どうしても質問が浮かばないときは、どうするべきなのですか? M: いい質問です。疑問というものは本来は自然に発生するもの・他人から与えられる ものではありません。人間の知的活動から産み出されるもの, もっとわかりやすく 言えば, 各人が積極的に作るものです。「質問の作り方」こそが, 大学でマスター すべき事であるとも言えるのではないでしょうか。 h00s5051: 講義中にW杯の日本戦は気になりませんでしたか? プログラム中では アルファッベトの大文字と小文字は何で別のものなんですか? その点でエラーが でました。 M: みなさんはどうだったのでしょうか。Fortran では大文字と小文字の区別は無い はず (同じ意味になる) ですが, どこでどんなエラーが出たのでしょうか ? -- 文責: rmiya