数値解析法 (数値計算 編), 2004-07-09 質問と回答, M は宮本による回答。 h02s2002: emacs を使っている時に文字が色が変わるのですがどういう意味があるの でしょうか? M: モードに応じてキーワードをカラー表示する機能が働いているのかもしれません。 もし Fortran mode なら (下から二行目の黒く反転しているステータス行に何か表示 されているでしょうか) 予約語やコメント部分がカラー表示されていることでしょう。 h02s2004: windows xpはなんと言うプログラム(例えばviやemaxなど...)からできて いるんですか? M: OS も基本ソフト (下手な用語だ) の一つですから, プログラムです。どういう風に できているのかは, 私企業の製品ですから, 一般には公開されていません。中味の わからない Black Box を使っていて, 平気ですか ?? h02s2007: なぜプログラムは6列目から始めるのですか?(*,*)と(*, *)の違いは? M: Fortran の文法で, そう決まっているから。詳しくは, 後半も含めて, 文法書を 参照してください。 h02s2009: この授業はLinuxを使ってプログラミングを行っていますが、windowsでは このようなプログラミングはできないのですか? M: 「このような」っていうのが, どこまで指しているのか謎ですが, 多分できること でしょう。 h02s2010: VineLinux上で作成したファイルがWindows上でもタッチできるようになって いるのはなぜでしょうか? Windows側から見るとファイルのある場所はNTFSにフォーマ ットされていますが、Linuxはこのフォーマットに書き込めるんでしょうか? それと、Windows上でうまくCygwinが動いてくれないのですが、どうしてでしょうか? M: 弘大の総合情報処理センターのシステムがそういう風にできているから。NTFS で あろうが UFS であろうが, 仕様が公開されていれば, プログラムにより読み書きは可能 でしょう。実際にはファイルサーバが受け持っている機能なので, 演習室の個々の パソコンは, OS の如何に関わらず, サーバと通信可能であれば OK だと思われます。 それと, Windows 上でうまく Cygwin が動かない件については, この一行の情報だけ からでは何とも言えません。すなおに PC-Unix にすれば ? h02s2014: モンテカルロ法によるプログラム中において、なぜ乱数を導入するのですか? M: 乱数を用いることを, モンテカルロ法と呼ぶから。 h02s2015: この授業で学んだことを化学では例としてどんなことに役に立ちますか。 M: ○○を明らかにするためにはどんな実験をしたらいいかを考えることは, プログラム 作成と通じるものがあります。実験失敗の時の対策を考えることは, プログラムのバグ 取りと通じるものがあります。要するに「論理的に考える」ということ。 普段と違う方面から攻めてみました。 h02s2016: fortranの77と90の具体的な違いは何ですか? M: Fortran 90/95 では, 「構造化プログラミング」の概念がかなり導入されました。 詳細は解説書などを参照してください。 h02s2018: プログラムを作る前にまずプログラムが理解できないのですが、勉強する しかありませんか? M: もし勉強せずに理解する方法があれば, 教わりたいくらいです。 h02s2019: 宮本先生は特別プログラムを作成するとき以外、普段もLinuxを使ってるん ですか? Windowsは使わないんですか?使用頻度は? M: 普段は FreeBSD を使っています。この Web ページもテキストも, そこで作成しま した。Windows を使うのは, メールに添付された Word のファイルを見る時かな。 h02s2020: モンテカルロ法によるπの計算に於いて、πを求める以前に、πの値を 知っていなければこのプログラムで最適な乱数種s、全事象数nの最適値を決定する ことはできないと考えられます。 ということは、このプログラム自体が、プログラム作成方法を学ぶ術にはなるとは 言え、数値解析を行うプログラムとしては意味のないもののように思えます。 このプログラムでしたら、エクセルで各n,sをあてて、既知のπに近しい事象を探せば いいだけだと思います。 この、モンテカルロ法によるπの計算のプログラムの優位性はいったい何なのでしょうか? M: もし「最適な乱数の種」が存在したら, もうそれは乱数ではないでしょう。 モンテカルロ法による (πの) 推定値と真の値との誤差は, 全事象数の関数として 既知です。全事象数は発生させた乱数の数と比例関係にあり, すなわち計算時間と 比例関係にあります。逆に言えば, 推定値の精度を上げたいときに, どの程度の計算 時間を費やせば良いかが既知であることになります。 Listing 22 の手法は, モンテカルロ法のデモンストレーションみたいなものです。 モンテカルロ法による数値積分は Listing 23 の様なもので, 説明にも書きましたが, 多重積分なほど優位性が出てきます。台形法やシンプソン法などでは, 積分変数の数 だけ多重のループにしなくちゃいけませんが, モンテカルロ法では一重ループで済む。 もちろん多次元空間に於ける任意の位置を乱数で決めるわけですが。 h02s2021: LinuxはWeb上で自分のパソコンにダウンロードして使うことができるので しょうか。あるいは、買ってそれをインストールしなければいけないのでしょうか。 M: Linux はいわゆるフリーソフトウェアです。この free は自由という意味です。 使用を制限されることもなければ, 無料で配る自由, パッケージとして販売したり 使い方を教えて対価を得る自由, すらあります。唯一の制限事項は, 他人のそういう 自由を妨害することくらいでしょうか。 h02s2024: 電卓の中にも、授業で自分たちが作っているようなプログラムが入っていて 計算をしているのですか?それとも全く違う方法で計算をしているのですか? M: 私企業の製品の中味がどうなっているのか, 一般には公開されていないのでわかり ません。例えば電卓の統計計算機能で, あなたの期待した手順による計算が行なわれて いるという保証はありません。もちろん全くのデタラメな答えを返すようでは, 機能 不全のそしりを免れませんから, もっともらしい値が返ってくるようにはなっている でしょうがね。 h02s2028: 今期の授業は来週で終わりですか、それとも最終週まであるんですか? M: 学生へのサービスとして「授業はなるべく休まない」という考え方があるようです。 h02s2029: かなりこの授業に自信がないのですが、正直評価がどうなるか恐ろしいです M: そうですか。しかしメールが必要事項 (質問) を含んでいませんね。 h02s2032: モンテカルロ法でπを求めるというのは、確率論でもあり、πを知っていな ければ値が近付いているかどうかもわからないというものなのだということがわかりま した。一見無意味にも思えますが、確率論でπを求めようとした先人たちの努力を汲み 取って、これに限らずさまざまな問題を解くというプロセスを学びとるものだと解釈 しました。 宮本先生がこの課題で我々に求めているものとは問題を解くプロセスや努力だと思うの ですが、本当のところはどうなのでしょうか。 (「こんなのやっても無意味だよ」という人に言い返したいのはヤマヤマなのですが、 論破能力がないです。) M: 前半については h02s2020 への回答を参照してください。後半については, あたらず とは言え遠からずですね。「自分の頭で論理的に考えること。考えたことを他人に わかりやすく伝えること」です。 h02s2036: 先生はよく「文法書を参照してください」と回答されていますが、やはり FORTRANの初心者には文法書が必須なのでしょうか。 M: 外国語の初心者に, その言語の文法書・辞書が必須なごとく。 あるいは, 私の回答が完璧とは限らないとか, ここで詳細を語るのは効率が悪いとか。 自分で調べる癖をつけ, 一人で問題解決できる能力を身につけてもらうようにという 教育的配慮とかね。 h02s2039: プログラムによってはどうしても誤差が生じるときがあると思うんですが、 今扱ってるfortranでは、何桁までは計算できるというような限界はあるのですか? M: 有限の計算機資源 (メモリ, 計算時間) を用いての計算ですから, 一般に無限の 精度が期待できないのはあたりまえじゃないでしょうか。定数や変数の精度に ついては, Fortran 言語の規格として決まっています。詳細は文法書を見てね。 h02s2040: 提出物についていろいろ辛口でコメントしていますが、その辛口の内容を ちゃんと直して再提出しなければ、提出したことにしてもらえないのでしょうか? 僕はまだ何も提出していませんが、辛口で指摘されればきちんと完璧に直して再提出 できる自信がありません。(;_;) M: 例えどんなに貧しい内容であっても, 提出は提出です。内容に応じて評価される だけです。早めに出してコメントをもらえば, より良い内容に改訂する (すなわち良い 評価を得る) 機会が与えられるということです。その機会を生かすも殺すも, あなたの 自由です。二十歳すぎの大人なのだから, (きっと今年の流行語)「自己責任」ですね。 h02s2042: fortranのプログラムではすべて英語で表記しています。 write(*,*) " Input number:x, y "のように… これを日本語表記にしてみようと おもって write(*,*) " xとyの値を入力してください。" とやると日本語表記が 消えてしまいます。なんででしょうか? M: もしかしたら漢字コードのせいかもしれません。jis, euc, shift-jis のいずれを 用いましたか ? それは LANG などの環境変数の設定などと合ってますか ? h02s2045: fortranは、コンピュータ言語の中では、記号に英語などで意味付けされて いて僕たち側に視点を置かれて作られたプログラム言語だと思いました。fortranは 初級的な位置にあるのですか。ほかの言語との関連性などはあるのですか? M: あなたの言う「初級」を定義してください。 Fortran, COBOL, Algol, ... は, 「高級言語」と言われています。対する「低級言語」 は, アセンブリ言語とか機械語という意味ですが。BASIC という言語名は, Beginner's All-purpose Symbolic Instruction Code の頭文字を取ってならべた (ことになって いる) 命名から, 初心者向けだと言えるかもしれません。これは Fortran を元に簡略化 して作成されました。また Fortran は, 米国 IBM が 1956 年に開発した, 最も初期 からあるコンピュータ言語の一つです。昔からあるってことは, 現在よりも遥かに能力 の低いコンピュータでも処理が可能な程度の言語だとも言えるでしょう (その後 66, 77, 90/95 と改訂されてきましたが)。 さてこれらの情報などから, あなたはどう判断しますか ? h02s2048: list23のモンテカルロ法による一変数関数の数値積分のところで積分を してると思うのですが、どこが積分を表しているのかがいまいちわからないのですが、 さしつかえなければどこからどこまでが積分をあらわいているのか教えてください M: Listing 23 の前に書いてある説明で, わかりませんか ? そもそも普通の意味の 「積分」とか「区分求積」が, わからないとか ? もし n=1 の場合には, 求めたい 面積をどのように近似したと言えるか, わかりますか ? h02s2050: よく入力ミスをしたり変なコマンド入力をしてしまったりすると 「アボード」と表示されるのですがどういう意味ですか。 M: 「Abort」の意味を辞書で調べてください。中途半端な和訳もコマリモノですね。 h02s2051: プログラミング言語の中で使える変数の桁数が最も多いものは桁数をどこ まで扱えるのですか? M: 言語の仕様ですか ? それとも特定のアルゴリズム・アプリケーションプログラムの 話ですか ? 円周率を数百万桁計算したという話を聞いたことありませんか ? h02s2052: 最近数値解析法がまったく分かりません。どうすればいいでしょうか? M: (1) 分かるようになりたい, (2) ならなくてもいい; どちらを選択しますか ? h02s2053: いつからパソコンを始めましたか? M: 「自動車を始める」という言い方に違和感ありませんか ? h02s2054: この授業でソースファイルとともに出すレポートはどんなソフトで書いて、 どんな形式で保存するといいのでしょうか? M: plane text で充分だと思いますが, どーーーしても Word で書きたいのなら, 仕方ないですねぇ。 h02s2055: プログラムを作っていると頭が痛くなることがあります。そんなときは 休憩をとる以外になにかいい対処方法はないのでしょうか? M: 「頭が痛くなる」とは比喩的な意味ですか, それとも生理的な意味ですか ? もしも 後者ならば, テレビアニメの「パカパカ」が児童に悪影響を与えたように, ディスプレイを長時間見つめることが原因かもしれません。医者に相談されることを おすすめします。(保険管理センターで受け付けてくれるかな ?) h02s2057: プログラムの算術式の中に単精度や倍精度などが混ざっているときどちらが 採用されんるんですか。 M: 正確なことは文法書を参照してください。演算子の優先順位やカッコ以外は, おおむね数式は前から順に計算され, その時に精度の高いものに合わせられます。 したがって「A / B * C」 と「(A * C) / B」 とは等価に見えますが, もし A と B が 整数ならば, 前者では商の小数点以下が切り捨てられてから C との積を計算します。 したがって, A と B とが整数で C が実数 (以上) の時には, この二つは異なる結果を 与えることになります。注意しましょう。 h02s2059: linaxを自宅のパソコンにインストールしたいのですが、最新のバージョンが わかりません。どれが新しいのでしょうか。 M: そんなあなたに FreeBSD 4.10 Release ! h02s2062: 乱数というものがよくわかりません。これをよく使っていますが一体何なの でしょうか。ただ単に適当な数ということですか。 M: 「乱数」という言葉の意味が知りたければ, 辞典で調べてはいかがでしょうか。 h02s2064: Exercise3.3です。よろしいでしょうか? M: 何が「よい」のでしょうか。ダメと言ったらどうするつもりなのでしょうね。 h02s2065: Fortran77とFortran90で、今実際に多く使われるのはどっちですか? また、この二つのプログラムの作り方には、どのような違いがありますか? M: 前者について, 数えたことないのでわかりません。後者について, 特別違いがある とは思えません。どちらも「ソースプログラムを書く」→「コンパイルする」だと 思いますが。 h02s2067: (6,*) は(*,*)とどう違いますか。 M: 実用上の意味は, 同じと言えます。前者では出力先が 6 番の装置であることを, プログラム中で明示しています。それが何であるかは OS の管理するところです。 たいていは標準出力装置 (すなわち画面) ですが, OS 上で「6 番は ○○ という名前の ファイル」と指定して Fortran プログラムを実行することも可能です。 標準出力装置を画面からファイルに切り替えることも, OS の機能として可能です (redirect と言う)。 後者の場合には出力先はデフォルト出力装置です。ほとんどの場合は 6 番がデフォルト の出力装置番号ですが, 実際に何番の装置なのかは用いている言語処理系 (そのマシン のコンパイラやライブラリ) が決めることだと思います。 この意味に於いて, 二つは差があります。 h02s2068: この前の質問の続きですが、二次方程式の複素解を求めるアルゴリズムは 分かりましたが、プログラムを実行して、計算結果を表示した時、複素数解(iを 含んだ)形で表示されません。どのようにプログラムを組めばよいでしょうか。 教えて下さい。 M: 計算結果そのままでは気に入らないのなら, やりたいことは何なのでしょうか ? 手持ちの材料を, 目的に応じて加工して表示すれば良いのではないでしょうか ? と 書かれた二行を見て気付くかと思いますが, 要するに「手持ちの材料でやりたいことを するにはどうすれば良いか考える」だけです。 h02s2069: 以前、条件によって動的に配列の要素数を変化させたいと思い、if文の中で 変数宣言を行ったのですがコンパイルの時点でエラーが出ました。そこで質問なのです が、Fortranでのコーディングに関して、変数宣言の位置に制限があるのでしょうか? M: 「ある」というのが答えですが, 何がどういう順序かという詳細は, Fortran の 文法書を参照してください。 h02s2071: linuxのプログラムを理解する上で、何か参考書とかが読みたいのですが、 お勧めの本とかありますか?もちろん自分で探してくださいと言われればそれまで ですが・・・。何かあったらでいいんで教えてください。 M: 「linuxのプログラム」とは何を意味していますか ? 以前にだれかの問いに答えた ような気もしますが ... 「あなたが本当に知りたいことは何なのか ?」 h02s2074: なんのためにlinaxを使いなぜ必要なのかという先生の授業はないので しょうか? 他人の質問などを公開することによって知識を増やす機会が与えられて いるのだから先生の考えを聞いて、知識を増やす機会があってもいいと思うのですが。 M: (メールの発信時刻が 18:01:29 ですね) 私というたった一人の偏った意見だけでは なく, もっと多数の人の意見を聞いた方が良いと思いますが。そのような「なぜ Linux が良いのか」についての意見は, Web 上にたくさんたくさんあると思われます。 h02s2083: 最近,視力の減退が著しいのですが,なにか視力を保つアドバイスはあり ますか? おそらくパソコンなど眼の使いすぎや実験等細かい作業が多くなったことが 関係あるように思えます.今後、技術者や科学者になるうえで健康が犠牲になるのは しかたないことなのでしょうか? M: しかたなくないと思います。何とかしたいのが本気であるならば, ちゃんとした 医師に相談することをおすすめします。まずは保険管理センターかな。 h00s2071: WINDOWS上で動作するFORTRANのコンパイラってあるのでしょうか? M: (メールの発信時刻が 18:01:06 ですね) もちろんあります。Intel とか Portland Group などが代表的でしょうか。もちろん Cygwin で g77 という選択肢もある。