- ベストアンサー
Gauss掃出し法のベンチマークテスト
- Gauss掃出し法のベンチマークテストを行う際に注意すべきこととは?
- 32bitCPU×2のマシンと解釈しているように見えますが、これは正しいのか?
- Gauss掃出し法のベンチマークテストに関するマニュアルや情報源はあるか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
すみません。私が勘違いしておりました。 Gauss掃出し法はいまでも盛んにやられています。 現在、盛んに計算させているようですが、 パラメーターを色々変えてやっているとき 計算不能のエラーを出してストップすることありませんか? このときは、誤差を出して計算不能になっているのです。 このため、私は、出てきた答えが真値かどうか、わからないと 言ったのですが、これは言いすぎですね。すみません。
その他の回答 (2)
- Water_5
- ベストアンサー率17% (56/314)
「連立1次方程式のGauss掃出し法」は今ははやりません。 何故なら未知数20個の場合、20連立方程式になります。 これを掃き出し法でやると、計算が複雑になるのはともかくとして、誤差の問題が出てきます。 出てきた答えが、誤差のため真値からかけ離れた値が 出てきます。未知数の個数に比例して誤差が大きくなると言う 論文もあったような気がします。これでは使いづらいですね。 今現在、主流なのは偏微分方程式を近似的に解くやり方です。 これだと、出てきた答えを元の連立方程式に代入してやれば 真値かどうか確認でき、殆ど真値であることが確認されております。
補足
頭が古いせいか、連立1次方程式と偏微分方程式の関連が想像できなかったのですが、次のような事でしょうか?。 (1)任意の連立1次方程式について、対応する偏微分方程式を指定する方法がある. (2)逆に偏微分方程式を数値的に解く場合、昔は系を(最も単純には)局所線形化して連立1次方程式に引き直し、近似解を得てましたが、今では別の方法がみつかり、そうしなくて良くなった. あなたの仰る方法を紹介している文献やサイトがあれば、初耳なので教えて下さい。
- Water_5
- ベストアンサー率17% (56/314)
、64bitCPU×1,とは具体的にどんなCPUですか? AMDのAthlone64ですか? IntelのCore i7等は32bitCPUをサポートした64bitCPUと 言うことになります。 それ故、32bit版コンパイルしても使えるし、64bitコンパイル しても走ります。正しい結果が出ます。 Intelが両方使えるようにデザインしてあるのです。 32bitCPU×2のマシンと解釈しているかどうかはわかりません。 64bitレジスターのうち、左半分の32bitレジスターを使っていることはわかりますが、そのとき右半分の32bitレジスターも 使っているかどうかがわかりません。 もしそうなら、DualCPUもどき、DualCoreもどきになって 処理速度は2倍になりますね。 ベンチマークテストをやり確認してみては?
補足
回答ありがとうございます。 CPUはIntelで、じつはQuad Coreです。「Core i7」などはどこで調べればわかるでしょうか?。 >もしそうなら、DualCPUもどき、DualCoreもどきになって処理速度は2倍になりますね。 結果から判断してというのは、実際にベンチマークテストをやってみた結論です。 32bitを対象としてプログラムをコンパイルし、32bitDualCoreのCPU×2(Intelかどうか現状ではわかりません)で同じ計算をやらせてみると、2倍は速くなりませんが、3割程度速くなるものの、計算時間の結果は不安定になります(時々、2倍程度時間がかかったりする)。この結果は、同じインストールを64bitQuadCoreCPU×1で実行させた場合と、ほぼ同じでした。 アルゴリズムの検証なので、それでは困るわけです。64bitを対象としてプログラムをコンパイルし、Intel64bitQuadCoreCPU×1でやらせると結果は安定するので、とりあえず困ってはいないのですが、要するにそうなる原因の確認が欲しい、というところです。
お礼
ご回答ありがとうございます。こんな回答の付きそうにない質問を無視しないで頂いて、嬉しかったです。 これから同じ質問を、「[技術者向け]コンピューター」の板に投げるために、これで締め切らせて頂きます。 やっぱり「蛇の道は蛇」・・・なんでしょうね(^^;)。
補足
返信が遅れて申し訳ありません。 >誤差は未知数の数に比例する・・・ それは確かにそうですね。通常規模の係数行列範囲内(1000~5000)でも、倍精度実数の有効桁数約16桁の内、6桁くらいは誤差で食われる事は覚悟しないといけないなぁ~(^^;)と、経験的には思っています。整数に換算すれば100万オーダーですから、微妙な比較をやってる時は、頭が痛くなります(^^;)。 >計算不能のエラーを出してストップすることありませんか? とは、「Division by zero」もしくは「Over flow」エラーの事でしょうか?。 上記対策として普通は、Scalingを前提に行方向Pivot選択を行って対処しますが、Scalingと行方向Pivot選択をやっていれば、係数行列が特異でない限り実用的には、しぶとくほとんど真値を出してくれると思っています。というか、Scalingと行方向Pivot選択をやって初めて、誤差で食われる桁数が6桁程度に収まる気がしてます。 係数行列が特異な場合は、いずれにしろ、望みはありませんよね?(^^;)。