数値解析法 (数値計算 編), 2003-07-04 質問と回答 M は宮本による回答。 h00s2036: FortranはLinuxでしか使えないんでしょうか?例えばwindowsではどうなんですか? M: その質問は既出です。 h01s2001: emacsをマスターすればどんな難解な式でも計算できるものを作れるんですか? 式以外にもプログラムは可能なんですか? 自宅でred hotはできるんですか? M: ひとつ目について, (初心者向けの回答) emacs はエディターであって, 文書ファイルを作成することが目的です。式を計算するものではありません。(上級な回答) emacs には機能をプログラムできる Lisp 言語が組み込まれているので, これを使えば何らかの計算はできるかも。 二つ目について, ``式'' の定義に依存すると思います。数式の他に論理式というのもあるし。 三つ目について, ``red hot'' とは何でしょうか ? 何かの香辛料かな ;-p h01s2002: 先生にとって有意義なものとは何ですか? M: 知性が刺激されるものは, そのひとつです。 h01s2003: writeの後についてある(*、*)の意味をおしえてほしいです。又、ex3.4にでてきた(5、*)は前者のとどう違うのかも教えてほしいです。 M: 文法書を見てください。 h01s2004: EMACSを使って、波動方程式やハミルトンヤコビの方程式がとけるのですか? M: 上の 2001 のひとつ目を参照してください。 h01s2005: 3.1で D<0の時の答えの書き方がわかりません M: 紙に鉛筆で書くときに, あなたはどうしますか ? h01s2007: exercise3-1で、b=0の計算だけうまく解が出てきません、何か特別な式がいるのですか? M: どううまく出てこないのか, この記述だけでは全くわかりません。症状が分からなければ正しい診断はできません。論理的には b=0 のときどうするのでしょうか ? h01s2009: レポートに添付するファイルの説明はどのような事を書けばいいんですか? M: ``こう書けばよい (これを写せばよい)'' という回答を期待しているのでしょうか ? それって自分で考えることでしょ ? h01s2011: 自分たちがわからないところを黒板を使って説明してくれないんでしょうか? M: 学生さんたちが手を動かす時間 (コンピュータをいじる時間) をなるべく減らさないように努めることにしました。 h01s2012: 情報処理センターではfortran77が使用されていますが、一般的にはfortran77とfortran90ではどちらが多く使われていますか。 M: こういう事が話題になる時点で, 充分に ``一般'' じゃありません ;-p h01s2013: exercise3.3でn,aを読み込ませる時、プログラムでendで区切った後、もう一度n,aを読み込ませなければならないのですか? 一度で、済ます方法がわかりません。 M: ``プログラムでendで区切'' るということの意味がわかりません。とはいえ一度で済ませたければ, そう Fortran 語で書けばいいだけでは ? h01s2015: 学校のパソコンではレッドハットを使って授業をしていますが、これよりも使いやすいOSはあるのですか?先生が使った中ででもよいです。 M: ここで言う ``使いやすさ'' は look & feel の問題と思われますが, それはデスクトップ環境に依存する話であって OS 本体とは独立です。 h01s2016: 打ち込んだプログラムを実行したら間違いがあって数字が果てしなく続いてしまいました。止め方が分からなくターミナルを閉じるしかなかったんですがターミナルを閉じないで止める方法はありますか? M: そのターミナルで コントロール-C とキー入力するとか, 別のターミナルで当該のプロセス番号を調べて ``kill -KILL 番号'' する。 h01s2020: キーボードで文字を打った瞬間にemacsが閉じてセグメントエラーと表示されました。これは何故でしょうか?文字を打つことがプログラムの不正な処理につながっているのでしょうか?また、セグメントエラーが起こらないようにする対策等はありますか? M: もしかして私が予想もしないようなキーを押していませんか ? そういえばむかし ``Hit any key'' に対して電源のボタンとかリセットボタンを押したという笑い話があったなぁ。 h01s2021: Exercise3-2はなぜ提出しなくてもよいのですか? M: ほとんと工夫の余地がなくて自明だから。 h01s2022: 今回、課題提出状況を見たのですが、誰も完璧にできている人はいなかったので、そのことに対するヒントや解き方などはでてこないのでしょうか? M: 解き方を考えるのは課題のうちでしょう。またヒントって言っても, いまさら二次方程式の取り扱い (高校の基礎解析レベル ?) について講義してほしいという意味なのでしょうか ? h01s2023: コンピュータは、入力されたプログラムを実行するものですが、Fortranを用いて計算以外のプログラムも実行できるのですか? また、Fortranの文法表現は完成されていてこれ以上増えることはないんですか? M: ``計算'' の意味次第。記号論理的な話も計算に含むならば, 計算しかできないと言うかも。また過去の経緯を見れば, 現在の Fortran も今後拡張される可能性はありますね。 h01s2024: 常微分方程式のルンゲークッタ法できざみ幅を1/2にすると誤差が1/16になる計算経過はどんなかんじか? M: 質問の意図がわかりません。自分でやってみれば良いのではないでしょうか ? または, 収束状況を調べるという課題に含まれるとも言うかもしれない。 h01s2025: 6/20の出席メールは、アドレスが間違っていたため届いてませんでした。今回もほとんど課題が進まませんでした。しかし、いろいろ試みましたが、理解できず今後も早く進みそうにありません。エクササイズを参考にしたくてもできず、困っています。どうすればいいでしょうか? M: 6/20 のメールについては AL-Mail ならば送信簿に残っていると思われますので, そのまま私宛に転送してみてください。 ``何が分からないのか'' を「漠然と全体が」ではなくて「じっくりと具体的に詳細に」考えてみましょう。そうすれば対処の手がかりが見えてくるはずです。 h01s2026: 遅れがちなので頑張ります。 M: そうですか。でも提出物 (電子メール) が要件 (質問を含むこと) を満足していません。 h01s2027: オイラー法より、ルンゲークッタ法のほうがプログラミングがややこしいのはどうしてか。 M: 異なったアルゴリズムに基づく計算方法だから, 当然プログラムも異なってしかるべきでしょう。精度を出すために, それなりに複雑な手順を踏むということかな。 h01s2028: Exercise3-4についてですが、ルンゲ・クッタ法の場合は1-x*xではなく、1-y*yではないでしょうか?1-x*xと直してプログラムを実行すると収束する値がマイナスになってしまい、オイラー法で行ったときと明らかに違う結果が出てしまうのですが。 M: 正しい答えはいくらになればいいのでしょうか ? h01s2029: Exercise3.4ではそれぞれの方法について、別々に2つプログラミングを作って比べればいいんですか? M: 何をどうすれば良いレポートになるかを考えるのも課題のうちなのではないでしょうか ? テストの穴埋め問題じゃあるまいし。 h01s2030: 自分はfortran言語はこの授業で初めて扱いました。数値計算などに関して特に優れているようですね。 ところで、linuxやunixを使いこなしたとして、どのようなことに応用できますか?「はこだて未来大学」では情報アーキテクチュアということをするそうですが、こういうのもlinuxなどで書かれたりするのでしょうか? M: 道具は ``どう使うか'' が大事なのでは ? 「はこだて未来大学...」については当事者に訪ねてみればよろしいのではないでしょうか。 h01s2033: 提出物のソースファイルは、各Exで一ついうわけではないのですか? M: 上記 2029 を参照してください。 h01s2034: fortranにおいて、コメント文が日本語などの漢字で書き表されている場合、その計算に要する演算時間は長くなるのですか。 英語なら1文字が1byteでも、日本語や中国語などの漢字は1文字に2byte使うので記憶スペースが大きくなり、演算するのに時間がかかりそうな気はするけど、実行文ではないからそんな事はないのでしょうか。 M: コメント文の取り扱いは文法書に記載の通りです。ただしマルチバイト文字の一部分のバイトの値が Fortran で扱える文字の範囲を逸脱している場合についての取り扱いは, コンパイラの実装依存かな。 h01s2036: プログラムのどこがまちがっているかわからない場合どうすればいいでしょうか。 M: コンピュータの気持ちになって, 予断を持たずに, ひとつづつ, 細かく, じっくりと考える。 h01s2037: Exercise3.1の問題で、b=0の場合分けをしてみたらx1,x2の値がなぜか表示されません。どんな問題が考えられるでしょうか? M: これだけの記述からでは, 「プログラムがおかしいんでしょ ?」としか反応しようがありません。 h01s2038: 二次方程式の解を求めるにあたって、先週提出したものとテキストにあるものを、つなげたいのですがなかなかうまくいきません。最後にある end ifのところから テキストにある判別式の文章を利用してつなげるには、20行目からつなげていけば、うまくいくでしょうか? M: なにをどうしたいのかさっぱり分かりませんね。したがって「うまくつなげば, うまくいくかもしれない」という当たり障りのないことしか言えません。 h01s2039: 先生にとって完璧なレポートはどういうのですか? M: 必要な事柄が全て書いてあって, 論旨の筋がしっかりと通っていて, 読みやすく分かりやすい文章であれば, かなりイイセンですね。さらにプラスアルファな付加価値 (独自性) があれば満点以上です。なんだ論文とおんなじじゃん。 h01s2042: 今プログラムを打ち込んでる段階なので、今回の質問はまだありません。 M: そうですか。でも提出物 (電子メール) が要件 (質問を含むこと) を満足していません。 h01s2043: プログラムを行うのにlinaxを使うのはなせですか。windowsではだめなのですか? M: ``linax'' は ``linux'' の typo だと思われます。で, その質問は既出です。 h01s2044: 現代のコンピューター社会において、僕たちができること(手伝えること)はあるでしょうか? M: もしなんにもなかったら, その人の存在価値ってなんだろう ? h01s2047: windows上でred.hatのようなプログラムはできないのでしょうか? M: cygwin とか vmware とかのことでしょうか ? h01s2048: b=0の時、Xの値が出てこないのですが、なぜですか? M: 上記 2007 を参照してください。 h01s2049: 前回までの課題提出状況で、先生は全員の課題を批判していましたが、先生にとって完全な提出物とはどのようなものですか? M: ``全員の課題'' など批判していませんが ? もしあるものが批判を受けたのならば, それは改善の余地があるということですね。進化の袋小路に入り込んだり, 他人に無視されたということではありませんね。完成度を高めるために手伝ってくれる人がいるなんてスバラシイことだと思いませんか。 h01s2052: Exercise3.5の設問で 0から無限大まで積分すると書いてますが、∞の関数は関数として存在しますか?(多分ないと思いますが。)その場合 ∞=9999‥ と実数で強引にあらわしてよいものでしょうか? M: Fortran では無限大をあらわす関数はありませんが, 計算結果が無限大になると Inf とか表示される場合があります。実際の数値計算で無限大をどのように取り扱うかは, 当該の問題にとって何を無限大と見なすかに依存しており, 一般解はなさそうです。 h01s2056: Dがlittleの場合、その時のxの値はあらかじめrealで提示するんでしょうか?それともcomplexを使うのでしょうか?自分なりにどちらでやってもうまくいきませんでした。 M: 日本語に不自由しているようですね。質問の意味が良く分かりません。あなたはどうしたいのですか ? 紙の上に鉛筆で書くときはどうしますか ? h01s2057: complexを用いた数を表示しようとした時、(NAN,0)か(NAN,NAN)と、表示できないと返されるのですが、complexは表示できないのですか? 出来るのなら何か具体例はありませんでしょうか? M: 表示されたものの意味を理解していれば, complex を表示できるか否かは分かるでしょう。また文法書を見れば, この文脈以前に自明かも。 h01s2059: WINDOWSにできてUNIXにできないこと、またはUNIXにできてWINDOWSにできないことはありますか?あるならばその例などもお願いします。 M: OS の性能の比較に関するマイクロソフト社製じゃない文書を探して読めばいかがでしょうか。書籍よりも Web ページの方がいっぱいあるかも。ただし玉石混合なので見極める目が必要ですが。 h01s2060: なぜウィンドウズじゃなくてレッドハットをやってるんですか? M: その質問は既出です。 h01s2064: (5,*)だと(*,*)とどのような違いがありますか? M: 文法書を見てください。 h01s2065: 3-4について。今オイラーとルンゲ・クッタの比較をしている。オイラーで1刻みにすると答えは0、1、1に収束した。ルンゲ・クッタは制度よく細かく0、1、1のに束していた。 が、刻みを細かくした場合に、ルンゲ・クッタはそれに使い値を示したが、オイラーに関しては、解は一端上昇した後に下降して負の値にまでいき、収束点がわからなくなっってしまった。こうなった事にはどんなことが考えられますか。改善法のアドバイスほしいです。 M: まず日本語の訓練が必要と思われます。 h01s2066: EX3.3でaのn乗は、nやaは自分で入力するようにプログラムしてa**n=のプログラムをつかって求めるといいんですか M: どうすればいいかを考えるのも課題のうちではないでしょうか。 h01s2067: プログラムを組めない式は存在しますか?あるなら具体例と理由を教えて下さい。 M: なさそうな気がします。 h01s2069: フォートランを使って量子力学などに応用することはできますか? たとえばシュレディンガー方程式を解いたりとかです。あと行列力学にはどうですか? M: 字義どおりの質問であればナンセンスです。Fortran は言語ですから「日本語を使って量子力学などに応用することはできますか ?」と書き直した質問の意味を考えてみましょう。何をききたかったのでしょうね。 h01s2075: LINUXで、日本語の文章を作ることは出来ないのですか? M: 文章を作るのは, あなたの頭だと思われますが ? それともプログラムによる自動生成を考えているのでしょうか。それならアプリケーションプログラムの仕事であって, プラットホームが文章を作るわけじゃありませんね。