数値解析法 (Fortran 編), 2002-06-21 質問と回答 M は宮本による回答。 h99s2076: 先日、ホームページから授業の資料をダウンロードしようとしていたら 2番目の資料のダウンロードに10分程度かかりました。しかしその他の資料に ついてのダウンロードはほんの30秒程度ですみました。この差はどうしてですか? M: 通信回線の混雑具合いの違い, サーバの混雑具合いの違いなどが考えられます。 h00s2003: end do の意味がいまち解かりません。 M: 文字通り, ``DO'' で始まる繰り返しのブロックの終りを意味します。 詳しくは文法書を参照してください。 h00s2008: 今日の1〜10までの和のプログラムを書き直して、いろいろ試してみたの ですが、うまくいきませんでした。そこで奇数和を計算するときのポイントを教えて ください。 M: どこがどううまくいかないのかわからないので, 一般的なことしか言えません。 すなわち ``コンピュータになったつもりで順を追って良く考える'' ですね。 h00s2009: doの使い方が少しわかった気がしました。doには他にもいろいろな使い方が あるんでしょうか? M: Fortran では繰り返しのためのループのところで使います。詳しくは文法書を参照 して下さい。 h00s2014: 宮本先生は今までどんなことを計算するときにFortranでプログラミングを して計算したんですか? M: やっぱり複素数をそのまま自然に扱えるのが便利ですね。ハミルトニアンは複素数の 行列要素を持つエルミート行列ですから。あと, いろいろなライブラリがあるので, それらを活用すればプログラミングの手間をかなり省けます。ということで例えば, ``Spin Hamiltonian を解いて EPR スペクトルのシミュレーションを行なう'' です。 h00s2015: 質問は、特にないです。 M: そうですか, でもメールが要件 (何らかの質問を含むこと) を満たしていません。 h00s2018: はじめ、プログラミングはどのような用途や、状態から発展して、現在に 至っているのですか?また現在は、おもにどのように使われているのですか? M: 現代的な意味での電子計算機のプログラムという意味ならば, 第二次大戦下の軍用 目的が発祥らしいです。コンピュータの歴史に関する本を読んでみましょう。 また現在の用途については, 主な用途というよりむしろあらゆる場面で使われていて, それらは全てプログラムで動作が指示されています。例えば銀行の ATM や決済処理 (この春にはみずほ銀行で大規模なトラブルがありましたね), 携帯電話のハンドセット や電話局での交換機, 家電製品では炊飯器にも使われていますね。 h00s2021: 来週の講義は部活の試合で山形に遠征するので出られません。 申し訳ありません。 M: そうですか, 試合での活躍を祈念します。でもメールが要件 (何らかの質問を含む こと) を満たしていません。 h00s2022: 最後のbj1のゲームプログラムはなんとか動かすことができたのだが ループ文の適当な数字まで足し合わせていくプログラムの作り方がわからなかった。 M: ``ループ文の適当な数字まで足し合わせていく'' って, どういう意味ですか ? h00s2024: windowsとXterminalはどう使い分けるんですか?長所 短所を是非! M: windows が Windows 98 のことなら, これは特定の私企業の製品です。その企業の 判断ひとつで, 性能や価格が決められてしまいます。現在の一般社会では利用者が 多く, 見かけは取っ付き易そうに見えます。しかし学習曲線はすぐに飽和し, 効率よく 仕事を進める方法がなかなかありません。 一方 X-terminal はただの端末で, ホストとなるコンピュータが無いと無用の長物 です。この場合のホストコンピュータは Unix マシンです。Unix は習得のための初期 コストは高いのですが, 上達すればするほど工夫のしがいがあって, 作業効率が高まり ます。 h00s2027: プログラムをコンパイルしようとすると, error 1 (error 2) と表示され ます。この意味はなんですか ? M: これだけでは何らかのエラーであるとしかわかりません。どうやってコンパイル したのでしょうか, 他には何も表示されませんでしたか ? コマンドラインでコンパイル すれば, ちゃんとエラーメッセージが表示されると思うのですが。 h00s2028: 今日のプログラムでのループの仕組みがよくわからなかったです。 どういうことですか? M: 自分がコンピュータになったつもりで, ワンステップづつ動作を考えてみましょう。 h00s2030: 今日作ったプログラムをコンパイルした(つもりなだけかもしれない)ん ですが、求める数値が出てきません。簡単なコンパイルの仕方ってないですよね? M: 具体的に何をやってどうなったかがわからないので, 求める数値が出てこない原因に ついて, なんとも言いようがありません。 ``f90 -o executablename sourcename.f'' というコンパイル自体は充分に簡単だと 思いますが, どのへんが難しいのでしょうか ? h00s2032: 6月21日出席しました。質問はありません。 M: そうですか, でもメールが要件 (何らかの質問を含むこと) を満たしていません。 h00s2033: 後ろにすわったんで字が見えにくかったです M: 前の方にくるか, 資料を手元で見るかしてください。なお, メールが要件 (何らかの 質問を含むこと) を満たしていません。 h00s2035: 質問の回答はどこに掲示されているのですか。 M: もしあなたがこれを見ているならば, まさにココがそれですね。 h00s2039: 今日やったプログラムをコンパイルして、実際に計算に使おうとして、 プログラム名を入力しても起動しません。なぜでしょう?以前やった四則演算の プログラムの場合は、コンパイルしたプログラム名shisokuを入力すると計算に使う 数値を入力するように求められるのですが...(今日やったやつは「許可が与えられて いません」とでてきます)。 M: 具体的にどうコンパイルして, どう実行させようとしたのかわからないので, プログラムが起動しない原因について, なんとも言えません。 「許可が与えられていません」と出るということは, 実行ファイルじゃないのに 実行させようとしたのかもしれません。 h00s2045: どうして資料を配布してくれないんですか?配布してくれると助かるん ですが M: 資料は PS ファイルまたは PDF ファイルとして公開しています。自由に持って いってかまいません。 h00s2050: サッカーに興味はありますか? M: 今日のブラジル対イングランドは, 良い試合だったのかな ? h00s2052: 今のプログラムはどのように発展してるんですか?そのプログラム言語は emacsと同じなんですか? M: ``今のプログラム'' がどのプログラムを指しているのか不明ですが, 一度作成 されたプログラムは, 人手により書き換えられない限り自動的に発展することは無いと 思います。 また ``プログラム言語と emacs が同じ'' という意味がわかりません。emacs は アプリケーションプログラムのひとつであって, プログラム言語ではありませんよ。 h00s2053: リスト5で9行目と10行目の間ではじめの列が違っているのですが、 何か意味があるのですか? M: ループの中身がなんなのか, 範囲がどこか, 人間が見てわかりやすいという意味が あります。 h00s2057: 先週の続きなんですが、ウィンドウズ上でFORTRANをはしらせるには どうしたらいいのですか? M: 下の [*1] を参照してください。 h00s2058: この講義で習うプログラムはどのような仕事の分野で使えますか? M: この講義は ``数値解析法'' なので, 科学技術分野での数値計算を念頭に置いて いますが, プログラミング自体にそんな制限はないので, どんな分野であれ使おうと 思えば使えると思います。 h00s2059: Foutranを用いた一番の業績は(一番役立った)何ですか? M: 分子科学の分野では Gaussian という名称の有名なプログラムがありまして, その開発者である Pople 教授は 1999 年のノーベル化学賞を受賞しました。 (Gaussian は Fortran で書かれています, 我々の研究室でも使っています) h00s2060: コンピューターに詳しくない僕でもC言語は聞いた事があるが、FORTRANと 比べてどっちが歴史があるのですか? M: FORTRAN は 1956 年ごろ開発されたのに対して, C は 1970 年ごろと思われるので, FORTRAN の方が古いようですね。 h00s2061: 今回の質問は自宅のパソコンでフォートランをするためにはどんな環境が 必要なのかということと、WINDOWS環境でもできるのかの二つです。 M: 最小限としては, 今使っているもの (エディタとコンパイラ) がある環境が必要 です。標準の Windows 環境で wordpad をエディタとして用いるとしても, コンパイラ がありませんね。下の [*1] も参照してください。 h00s2062: Do loopの構文をwhile loopの構文に書き換えられないんですが、ただdoを whileに書き換えるだけではだめなんですか? M: 下の [*2] を参照してください。 h00s2063: emacsからメールを送るにはどうすればいいんですか?あと、方法によっては インターネットもできるんですか? M: 六月七日分の質問と回答の末尾の [*1] を参照してください。 あと, ``インターネットをする'' とはどういう意味ですか ? ``道路をする'' という 言い回しと同じ次元であって, 意味がわかりません。 h00s2064: 5時30分なってから出席のメールを出すと帰れるのは6時になってしまう ので少しぐらい早く終わってもいいのではないかと思うが先生はどう思っているのか? M: 出席確認のメールは 17:30 以前に出してもかまいません。あらかじめそう言って あったはずだし, Web ページにも明示しています。(時刻を修正しました, 2002-06-29) h00s2068: 今やっているプログラムで簡単なグラフなら書くことは可能ですか。 M: 下の [*3] を参照してください。 h00s2070: プログラムを作成するときにエラーを出さないようにするにはどうすれば いいか方法があったら教えてください。 M: 残念ながら人は過ちを犯す動物です。全くエラーを出さない事は不可能に近いと 思います。それでも敢えて言うなら ``論理を良く考える'' ことでしょうか。 h00s2072: 今、授業では計算(数値解析)のためにこのプログラムを使っていますが ほかに何か使い道はあるのでしょうか? M: ``このプログラム'' とはどのプログラムのことでしょうか ? h00s2075: 今日の和のプログラム「sum1」で ``do n = 1, 10, 1'' の一番最後の1は どんな意味があるのでしょうか? M: 下の [*4] を参照してください。 h00s2079: Fortranから発展したコンピュータ言語はありますか? M: BASIC は FORTRAN のサブセットと言えるかと思います。コンピュータ言語の場合, 根底となるパラダイムが変わると, 古い言語を拡張するよりも新たに設計してしまう のが普通のようですね。その意味で現在の Fortran 90/95 は, かなり無理やり拡張し 続けてきた経緯があります。 h00s2082: リスト6をDO LOOPからWHILE LOOPに変えようとしたのですが、doをwhile に直した時に、sの意味が分からないと表示されたのですがよく意味がわかりません でした。どうすればいいのですか? M: 本当に文字通り ``sの意味が分からない'' と表示されたのですか ? それなら確に 意味がわかりませんね。下の [*2] を参照してください。 h00s2083: プログラム「sum1」で ``do n = 1, 10, 1'' の最後の1が何のためにある のかがわかりません。 M: 下の [*4] を参照してください。 h00s2084: Fortranで、プログラムの計算結果によるグラフを作りたいのですが、どの ようなプログラムを作る必要があるのですか?やはり結構、難しいのですか。 Fortranはいったい何行までプログラムを組めるのですか?無限なのですか。 M: 下の [*3] を参照してください。 また Fortran プログラムの長さについて, 言語の仕様上は制限はありませんね。 現実には有限のコンピュータ資源 (メモリやディスクの容量) と時間 (プログラマの 人生) を使ってプログラムを作ることになるので, 無限ということはないと思います。 h00s5016: 今日やったプログラミングで、何回も見直しましたが間違っている所が 見当たらないのに実行できないのはどうしてでしょうか? M: 気づかないだけで本当は間違っているところがあるのか, または実行方法が違う のでは ? h00s5018: 再来週には課題をメールに添付して送ることになると思いますが、emacsで 作成したプログラムをどのようにwindowsでのメールに添付して送ればよいのですか? くわしく手順を教えてください。 M: 本質を理解せずに, ボタンを押す手順を覚えても無意味です。六月七日分の質問と 回答の末尾の [*1] を参照してください。 h00s5028: FORTRANのコンパイラに、フリーのソフトはないのでしょうか?自宅のPC (OS:windows98)で勉強したい場合、おすすめのソフトがあったら紹介してください。 M: 下の [*1] を参照してください。 h00s5051: 変数宣言をしたAとaとは違う文字ですか? M: Fortran では大文字と小文字は区別しません (同じものとして扱う)。詳しくは 文法書を見てください。 ところで前回も同じ意味の質問をしていますね ? [*1] Windows で Fortran: どうしても Windows じゃないとダメですか ? FreeBSD や Linux などの PC-UNIX ならば, OS と共に開発環境 (エディタ, コンパイラ, デバッガなど) が全部そろって いますし, オープンソースですよ。Windows じゃなきゃヤダというなら, cygwin と いう選択肢もありえます。 [*2] DO loop を WHILE loop に直す: ただ単語の置き換えをしてもダメです。論理を考えて同じ動作になるように, 少し手を 加える必要があります。それを考えることにより, それぞれの構文を理解するのが狙い です。英語と日本語の間での翻訳と似た面があるかもしれません。 [*3] グラフを描く: グラフを描くためには画面上に点や線を書かなくちゃいけなくって, それはまた数値 計算法とは別種の壁が待ち構えています。 [*4] ``do i = 1, 10, 1'' の最後の ``, 1'' について: 最後の 1 は増分で, 例えば 2 にすれば二つづつ増えます。デフォルトは 1 なので この例は何も書かない場合と同じ意味になります。詳しくは文法書を見てください。 -- 文責: rmiya