数値解析法 (数値計算 編), 2003-06-20 質問と回答 M は宮本による回答。 h98s2024: fortranの質問ですがsqrt関数で複素数対応のcsqrt関数を使うとき、与える引数が複素数でなければならない様なのですが、与えるべき変数がrealで確保してある場合に一度complexで確保した変数に入れなおさずにcsqrtの引数に与える方法はないのでしょうか。 M: 型変換関数を使えばいいのではないでしょうか。 h00s2036: ax^2+bx+cの解を求めるプログラムで判別式D=0のとき、x1とx2が等しいと表示させたいのですが、どうすればいいでしょうか? M: 以上の質問文の日本語の説明の通りに Fortran 言語で記述すればいいのではないでしょうか。 h01s2001: コンピューターの言語は何でいろいろな種類があるんですか?統一した言語は作ることができないんですか? M: 過去には FORTRAN と COBOL を統合した PL/I や, DOD (米国防総省) が旗振りを演じた Ada が開発されましたが, 結局それに統一されること無く, 単に新しい言語がひとつ増えただけでした。言語は思想を表現するものですから, 取り扱う問題に応じてふさわしい言語が設計・改良されてきたのがコンピュータ言語の歴史です。 h01s2002: 先生が今回の講義全体においてわれわれ生徒に望んでいることは何ですか? M: シラバスに書いてあります。 h01s2003: ifの使い方についてよくわからなくifをなんども使うとエラーになってしまうので教えてほしいです。また例文によくわからないプログラムがあるのでそれについても教えてほしいです。 M: 文法書を見て, 自分の頭で考えてください。そうしなければ身につきません。 h01s2004: 数値解析でのプログラミングでは、どういったプログラミングができるんですか? M: 質問の意味がわかりません。どんな答を期待しているのでしょうか。 h01s2005: Ex3.1でbの値が負の時も正の時と同じように解と係数の関係で計算して解が出ると思うのですが、場合分けする必要はあるんですか? M: 下記 [4] 参照。 h01s2007: 授業でやったプログラムは、red hat以外でも使えるのですか? M: 下記 [5] 参照。 h01s2008: どうしてbが負の場合は誤差がでるのでしょうか? M: 下記 [4] 参照。 h01s2009: あまりこの授業でやったことが理解できてないので紹介された参考書を買ったほうがいいんですか? M: 勉強方法は人それぞれです。 h01s2011: D=0のときが、うまくいきません。 M: そうですか。症状の詳しい説明がなければ, 正しい診断・対処ができませんね。なお提出物 (メール) が要件 (質問を含むこと) を満たしていません。 h01s2012: プログラムの最初のところで変数を宣言する前に書く implicit none とはどのような意味があるのですか。 M: 下記 [1] 参照。 h01s2013: プログラミングのときに、最初のほうに打つimplicit noneとは、どういう意味なのですか? M: 下記 [1] 参照。 h01s2014: Exerciseはその日に終わった所まで送ればいいんですよね? M: どうすればいいかは授業中に説明したし, Web ページにも記載してあります。 h01s2015: この分野はどのような職業に役立つのですか?fortran内の文字を日本語で書くことはできないのですか? M: 役立つかについては下記 [6] 参照。またどんな文字が利用可能かは, 文法書に書いてあります。処理系依存の部分についてはオンラインマニュアルを見るか, テストプログラムを作って動作確認をすればいいのではないでしょうか。 h01s2016: FORTRANを理解すれば、この先世の中でどれほど利用価値があるか?センター試験で使った言語(名前忘れました)だけではだめか? M: 勉強の価値については下記 [6] 参照。センター試験で使った言語がわかっていれば Fortran の習得も容易なはずですが, 名前を忘れてしまっているようじゃあだめですね。 h01s2020: 質問の内容は、授業内容に関わることならどんなことでもいいのですか?←これが質問です。 M: 授業時間中に説明しましたし, Web ページにも記載しています。質問内容について分野の制限をした覚えはありません。質問内容は採点の対象とします。 h01s2021: D<0のとき虚数解で表すにはどうしたらよいか M: 下記 [2] 参照。 h01s2022: Exercise3-1の X の解が出てきません。おそらく虚数になったときだと思われるのですが・・・ M: そうですか。なお提出物 (メール) が要件 (質問を含むこと) を満たしていません。下記 [2] 参照。 h01s2023: 実数ではなく、虚数で解の公式を表すにはどうしたらよいのでしょうか?NANという表示が出てしまいます。それと10進法と2進法の違いにによる、コンピュータの誤差はどのくらいの大きさですか? M: ``虚数で解の公式を表す'' とはどういう意味でしょうか ? 下記 [2] のことかな。NAN については 下記 [3] 参照。記数法と誤差については下記 [7] 参照。 h01s2024: 判別式 D<0 の場合はどう表示すればよいのでしょうか? M: 下記 [2] 参照。 h01s2026: D=0 の場合は、英語でどのように表現すればよいのでしょうか? M: このように表現しなければイケナイという制限はないと思うのですが。ちなみに日本語であればどう表現するつもりなのでしょうか ? そういう意味を英語で表現すればいいのではないでしょうか。 h01s2027: exercise3-1のx1、x2の値がきちんと出ません。どうやってだすのか。 M: 症状の詳しい説明がなければ, 正しい診断・対処ができません。 h01s2028: exercise3-1が途中までしかできませんでした。まだ今日のところは質問するところはなかったのですが、プログラミングのことはあまり理解していないので、次回からはいろいろと質問をしたいと思います。 M: そうですか。なお提出物 (メール) が要件 (質問を含むこと) を満たしていません。 h01s2029: if文を2つつかった場合のelseのつかい方がよくわかりません。 M: if 文の数に関わらず, else の使い方は同じはずです。文法書を見て, 自分の頭で考えてください。 h01s2030: Dがマイナスになるということは、解がない、虚数解になるということのはずです。自分が作ったプログラムはD=0、D>0では問題なく動作しますが、D<0の時は「NAN」とでて解を出してくれません。これはエラーなのでしょうか?それとも「解なし」ということでいいのでしょうか。虚数解というものは数字で表せるものなのでしょうか。 M: ひとつめの文の意味がわかりません。解がないことと虚数解になることは同じことなのでしょうか ? NAN の意味については下記 [3] 参照。虚数の扱いについては下記 [1] 参照。 h01s2033: 課題はExerciseであって、Exampleは提出しませんよね? M: 授業中に説明しましたし, Web ページにも記載しています。 h01s2034: fortranで、自然対数はlog(x)ですが、常用対数や、その他底の異なる対数を使いたいときはどうすればよいのでしょうか。 M: 対数の底を変換するにはどうすればいいかは, 数学の教科書に書いてありませんか ? h01s2036: 今やってる授業は何の役にたつのですか? M: 下記 [6] 参照。 h01s2037: Example3.1のプログラムの中の1,2,3,16行目の最初の「c」はどういう意味ですか? M: 下記 [1] 参照。 h01s2038: Xのn乗とおくということは x**n とおいてよろしいんですか? M: 下記 [1] 参照。 h01s2039: 虚数解がうまくあらわせません M: 下記 [1] または [2] 参照。 h01s2042: ex3-1で複素数を表すときは、iを使えばよいのでしょうか。 M: 下記 [1] 参照。 h01s2043: 虚数解を出すプログラムがわかりません M: 下記 [2] 参照。 h01s2044: 数値計算において、RedHat(Unix)を使ってプログラミングするのは何故ですか?Windows内でのプログラミングとは大きな差がありますか? M: 下記 [5] 参照。 h01s2047: 今日やったexercise3.1の X の解がNANとなって出てこないのですが、なぜなんでしょうか。 M: 下記 [3] 参照。 h01s2048: 3.1の冒頭の"c"は何を意味するのですか? M: 下記 [1] 参照。 h01s2049: D<0のときのxの値がでません。それができるとexercise3-1が完成するのですが・・・・ M: そうですか。なお提出物 (メール) が要件 (質問を含むこと) を満たしていません。下記 [2] 参照。 h01s2052: Exercise3.1で、bは正という条件は特に要らないと思うのですが‥。またこの二次方程式では虚数まで計算する必要&虚数も計算できるのですか? M: 下記 [4] または [2] 参照。 h01s2057: 二次方程式の虚数解の表示法がわかりません。realを実部に、complexを虚部として、各々表示させようとしましたが、虚部を表示できませんでした。実部=(-bb) / (2.0 * aa), 虚部=sqrt(dd) / (2.0 * aa) としました。どう間違っているのかわかりません。どうすればいいのでしょうか? M: 詳しい症状の説明がなければ, 正しい診断・対処ができませんね。 h01s2059: 数値解析においてのプログラムの限界はありますか。どんな複雑な計算も可能でしょうか? M: 記号論理的に表現できる人間の思考はプログラム可能と思われます。しかし現実の計算においては, 計算機資源 (計算時間・記憶装置のサイズ) の有限性による制限はあると思われます。 h01s2060: 今やってることは今後どういうときに役立ちますか? M: 下記 [6] 参照。 h01s2064: 二次方程式の解は虚数も表示させるべきですか?それとも解はないと表示させればよいですか? M: どうする ``べき'' かとか ``○○すればよい'' という価値判断には, 基準がなければ答えられません。あなたはどうしたいのでしょうか。普通はどうするものなのでしょうか。下記 [2] 参照か ? h01s2065: 3-1、まだ途中であるので考え中であるが、解と係数の関係を用いた場合も同じ解になってしまったが、これでよいのだろうか。まだ入力漏れがあるのだろうか。わざわざ問題になっているくらいなので、解はかわるはずだと思うのだが。 M: 良し悪しの判断基準は何ですか ? どのようにかわると期待したのでしょうか ? h01s2066: 虚数は表せるんですか? M: 下記 [1] 参照。 h01s2067: exampleを実行できませんでした。教えてください! M: 詳しい症状の説明がなければ, 正しく診断・対処できませんね。なお提出物 (メール) が要件 (質問を含むこと) を満たしていません。 h01s2069: 二進数と十進数では有効数字が違いますが、十六進数ではどの程度の誤差が出るのですか?またその誤差は二進数と十進数に比べると大きいのですか? M: ``有効数字が違''う とはどういう意味ですか ? 基数と誤差については下記 [7] 参照。 h01s2075: 複素数ですべての変数を定義した場合、四則演算等は通常通りに使っても大丈夫なのですか? M: 下記 [1] 参照。 ===== * 複数の人から共通の内容の質問がありましたので以下に一括して回答します。 [1] ``implicit none'' の意味が分からない人は, 文法書を見てください (Fortran 90 拡張)。 行頭の ``c'' の意味がわからない人は, 文法書を見てください。 x の n 乗を計算する時にもちいることのできる演算子が何であるかは, 文法書を見てください。 数の表わし方がわからない人は, 文法書を見てください。 数の取り扱い方法がわからない人は, 文法書を見てください。 [2] 二次方程式の判別式 D が負の時のとりあつかいがわからない人, 虚数の計算がわからない人は, ノートに鉛筆で書くときにはどうするか考えましょう。 日本語によるその手順の説明をそのとおりに Fortran 言語で記述すればいいのではないでしょうか。 また必要な文法事項については文法書を参照すればいいのではないでしょうか。 [3] NAN は Not a number という意味で, 例えば 0/0 のような不定な場合や未定義領域で関数を参照したときなどに発生します。 処理系依存の場合もあるかも知れません。 [4] Exercise 3.1 で, なぜ単純に解の公式を用いるのではなくて解と係数の関係も併用する必要があるのか, 理由を考えましょう。 どんな時に計算誤差が生じる可能性があるでしょうか。 それを避けるためにはどうすればいいでしょうか ? 自分の頭でその論理を考えましょう。 [5] 総合情報処理センターの演習室では Windows 2000 と RedHat Linux (Unix) を Operating System (OS) として選択できます。 この数値計算法の授業では, そのうちの Unix 上でプログラムを作成しています。 その理由は (a) 数値計算そのものに集中できる, (b) 大規模な計算を行なうときには Windows など使わない, などです。 したがってこの授業では, OS に依存しない数値計算プログラムを作成しています。 [6] さてこの数値解析法の授業が何の役に立つのかと疑問に思う人がいるらしい。 役に立つかどうかで勉強する価値の有無を判断しようという発想は, 大学で勉強することの意義を理解していないと思われます。 知識というものは, 職業のいかんに関わらず, 自ら役立てようと欲する人にとっては役に立つでしょうし, 自ら役立てようと思わない人にとっては, 何の役にも立たないでしょう。 ``勉強イコール暗記・記憶'' という発想の人には, たぶん理解できないでしょう。 [7] 二進数と十進数という基数の違いと誤差の大きさについて, これらの間に関係があると考えたのはなぜなのでしょうか。 どんな関係があると予想したのでしょうか ? そしてその根拠は何でしょうか ? ぜひ教えてください。