• ベストアンサー

プログラムの発散

お忙しいところすみません. 現在,私は大学院生で,研究でfortranを 使用しています. 解析のためにプログラムを組んでいるのですが発散がおき,なかなか研究が進みません. 理論的に間違えているのか,プログラムの組み方が悪いのか,わからずに困っています. これが解決すれば研究が進むのですが・・・ そこでみなさんに質問です.このような経験をされ,見事解決された方いましたらその体験談をお聞かせ願いたいのですが. 暇な時に回答していただいて結構です.

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

No.5のお礼に対する解答。 私の言う特殊状態というのは、計算を続けていくと定常状態に達し、さらにそのまま計算を続行すると特殊な状態に到達する、という意味でした。 今回のご返事によって、計算の続行ではなく、初期条件を変えて再計算するものと考え直すことにしました。 ご質問のプログラムは、「相性のいい」初期データを与えれば収束して定常状態に達し、「相性の悪い」初期データを与えると定常状態にならず、振動してしまう性質があるようですね。 予想通りの値で定常状態に達する事例があるということは、計算式のプログラム化については問題ないないでしょうが、この実験には他に隠れた問題…"観測点"という言葉で推測できるのですが、「境界値問題」が含まれていませんか? これは、式を適用する際のパラメタ(初期値)に制限があり、それを超えるような条件を与えるときは結果が保証されないというものです。微分方程式を解く場合などでは、境界値問題に目を向ける必要があります。 いま少しプログラミング作業から離れて、「境界値問題」のキーワードで実験を見直してみるか、発散,収束に関係なくもっと観測点を増やし、解の傾向を分析されてみてはいかがでしょうか?

daitasuki
質問者

お礼

お礼が遅れてしまいすみません. 度々,回答していただきありがとうございます. プログラムのミスとかそのような問題ではないようですので,境界値問題をキーワードに発散の原因を調べていきたい思います. 見ず知らずの私に対してここまで検討していただき本当にありがとうございました.

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

回答No.5

No.3です。 「定常状態を過ぎると発散」ということは、初期条件を変えるからですか? 「初期条件から出発→定常状態→特殊状態」という遷移の仕方であれば計算の方針は合っていると思います。 特殊状態に達するまでに何回の加減算,乗除算をやっているか見当がつきますか? その回数は回答者側にとって参考になるので、できれば開示してください。 その他、余りにも大きな数と小さな数同士の加減算は、桁落ちどころか情報落ちという現象が発生して、加減算をしていないのと同じ事態になりますので、プログラムを工夫する必要がでてきます。私の推測ですが、目的の値が振動したりしていませんか? 発散なら、きれいに発散しているのですか?

daitasuki
質問者

お礼

2度も回答ありがとうございます. 媒質の値の設定により発散が起こらなかったりします.特殊状態というのは発散が起こる状態のことでしょうか.特殊状態に達するまでに何回の加減算,乗除算をやっているかは,式やその式に使う係数の数が多く,また係数にも加減算,乗除算を行っているので回数を数えるのがちょっと大変で今すぐはわかりません.すみません.発散の状況はある観測点において,値が収束せずに他の観測点よりも大きな値で振動してしまうという状況です.一応定常状態になるということは,理論的な考えはあっているけれども,プログラムの組み方が悪いということでしょうか.毎日プログラムをいじっていますが未だ解決せずです・・・(泣)

全文を見る
すると、全ての回答が全文表示されます。
  • tatsumi01
  • ベストアンサー率30% (976/3185)
回答No.4

発散の意味をはっきりさせた方が良いと思いますが。 データ解析を行うプログラムだとしますと、解析的に答えが出るような擬似的なデータを作り、そのプログラムによる解析結果と理論計算とを比較すれば、プログラムが間違っていればすぐ判ります。 プログラムが正しくて、実測データの解析結果が予測と違うなら、理論(モデル)が間違っているのでしょう。

daitasuki
質問者

お礼

回答ありがとうございます. 電磁界解析プログラムで,簡単なモデルを考え,その理論値と比較したりしています.定常状態直後でその理論値と比較した所,一致しました.ただ,定常状態を過ぎてしばらく経ったあたりから発散が起きてしまうのです.発散の状況はある観測点において,値が収束せずに他の観測点よりも大きな値で振動してしまうという状況です.毎日プログラムをいじっていますが未だ解決せずです・・・(泣)

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

> 発散がおき, ・べき級数計算のプログラムで、収斂するはずが発散した。 ・装置を用いてデータ収集したところ、理論的には収斂するはずが、  発散(または振動)した。 どちらとも取れます。 前者なら計算誤差の累積、後者なら雑音(ノイズ)や分解性能を疑ってかかりましょう。

daitasuki
質問者

お礼

回答ありがとうございます. 電磁界解析プログラムで,簡単なモデルを考え,その理論的と比較したりしています.定常状態直後でその理論値と比較した所,一致しました.ただ,定常状態を過ぎてしばらく経ったあたりから発散が起きてしまうのです.モデルの値を変えると発散したりしなかったりします.やはり計算誤差の累積の為なのでしょうか・・・

全文を見る
すると、全ての回答が全文表示されます。
  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

> 発散がおき, ・数値計算のプログラムでアルゴリズム的には収束して欲しいのに発散した。 ・考えが発散し、集中できず、研究がはかどらない。 どちらとも取れます。 前者っぽいですが、どちらでしょう? 前者なら、 ・モデルを単純化して実験し、理論値との比較から問題を切り分け、プログラムのバグを絞り込む。 ・手計算やExcelなんかによる計算結果と比較、検討。 とか。 後者なら、大学の保健センターなんかが身近ですし、経験豊富で頼りになると思います。

daitasuki
質問者

お礼

回答ありがとうございます. 「・数値計算のプログラムでアルゴリズム的には収束して欲しいのに発散した。 ・考えが発散し、集中できず、研究がはかどらない。 どちらとも取れます。 前者っぽいですが、どちらでしょう?」 ・数値計算のプログラムでアルゴリズム的には収束して欲しいのに発散した。の方です. 電磁界解析プログラムで,簡単なモデルを考え,その理論的と比較したりしています.定常状態直後でその理論値と比較した所,一致しました.ただ,定常状態を過ぎてしばらく経ったあたりから発散が起きてしまうのです.今もプログラムとにらめっこしています.

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

寝ること・・それにつきるのかもしれません。 今現在も、突然昼寝するかと思ったら、起きて、こつこつプログラムを組んでいたりもします。 #いいかえれば、夢の中で仕様を組み立てているということです。

daitasuki
質問者

お礼

回答ありがとうございます. 夢の中で仕様を組み立てられるなんてすごいですね!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 大学院入試の面接について

    大学院入試の面接で聞かれることについて経験者の方の体験談を聞きたいです。自分は金属の塑性についてのシミュレーション解析をやっていて、将来は自動車か航空系の研究職につきたいと思っています。 専門的な話はかなり突っ込まれるものなのでしょうか?

  • FORTRANプログラムについてお聞きします。

    仕事で1970年代にFORTRAN77で作られた技術計算(発電所の熱精算)プログラムを使っています。(私はプログラムは使っていても、作ったことのない、ほとんど素人です) このプログラムの規模として、総ステップ数が約60kステップ有ります。 このたび、このプログラムをMATLABに移植することになりました。 移植の理由は、FORTRANそのものが古い言語で、機能拡張などのメンテナンスを依頼しているソフト会社には、FORTRANの分かるエンジニアがいなくなったこと、だそうです。 (MATLAB使用は会社の指示です) そこでお聞きしたいのは以下の点です。 1.FORTRANとは、そんなに古い言語になってしまったのか? 2.MATLABはある精度内で収束するように繰り返し計算するようなプログラムに向いているのか? 3.MATLABのネット記事のほとんどが大学関係者ばかり。企業では使われていないのか?だとしたら、その理由は? 4.MATLABの利点と欠点を述べた記事などがあったら紹介して下さい。 宜しくお願いします。

  • bit単位でのデータ読み込みプログラム

    現在、気象庁のradarAMeDAS解析雨量データの抽出プログラムを作っています。 radarAMeDAS解析雨量データはランレングス圧縮技術を使用しています。 メタデータはバイト単位のバイナリ形式で読み込みは簡単なのですが、データ部(雨量値)はbit単位での読み取りが必要で、どのようにbit単位で読む込むのか分からず困っています。 どなたかbit単位での読み取りが出来るプログラムの作成方法をご存知の方はいませんか? ちなみに当方は現在fortranでのプログラミングした出来ないため、出来ればfortranでの方法をご教授願えれば幸いです。

  • SPICEについて

    現在学生で、回路シュミレータを使った研究を行ってます。 実際SPICEに組み込まれているプログラムなどが詳しく載っている参考書、またそれらのソースなどはインターネットで公開されているのでしょうか? どのようにしてプログラムで回路方程式を修正接点法などから素子値のパラーメータ等で解析してるのかを知りたいのですが・・・。 図書館などで調べたのですが、見つからなかったので参考になものやアドバイス等ありましたらお願いします。 研究室ではFORTRANを使っています。

  • 流速を大きくすると計算が発散してしまうのを解決するには?

    翼周りの流れを解析するために非圧縮粘性流体の2次元定常流れの数値計算をやっているのですが、初期条件の流速を大きくとると発散してしまいます。 SIMPLE解法を用いています。 現実にあわせるために流速を大きくとることができなくて 困っているのですが、どういったことをすればこれは解決するのでしょうか? ・計算格子(メッシュ)を細かくとる。 ・翼のよどみ点が発生するような急激な変化のおきる点の メッシュを細かくする。 ・計算格子に入れる領域を大きくする(叉は小さくする) などが自分では考えられるのですが、経験者の方なにか いい解決方法があったら教えていただけませんでしょうか?よろしくお願いします。 この質問で説明が足りない点があれば、随時補足しますので。

  • 院浪について

    某二流大学の理系の学生です。いきなりですが院浪する可能性大です。そこで質問があります。 1、院浪した人の体験談があれば聞きたいです。 2、またどのような生活をしていましたか? 3、理論物理学か複雑系の研究がしたいのですが研究室ありませんか? 4、院浪するのと大学浪人するのではどっちが不利有利とかいうのはありますか? もちろん全部お答えいただかなくとも結構ですのでどうかご教授お願いします。

  • Do文で副プログラムの増やす【Fortran】

    Fortranを使用してます。 DO文で副プログラムをループさせて増やしたいのですが、どうすればいいか分りません。 具体的には、副プログラムの「SUBROUTINE」文+サブルーチン名 であるサブルーチン名の後にループを使って番号を付けたいのですが・・・ 簡易なイメージとして以下のソースでtest0、test1、test2、・・・・・test10となるようなサブルーチン名にしたいのです。 do x=0,10 SUBROUTINE test+x y=x+10 retun end end do Fortran初心者ですが、解決したいので難しい解説でも大丈夫です。 分る方は宜しくお願いいたします。

  • 数値計算ができるようになりたいのですが…

    現在、大学院修士課程1年です。 将来はアカデミックな研究者を目指しています。 今行っている研究で、非線形方程式(多変数)の解を数値計算を用いて得たいと考えています。 今まで数値計算はやったことがないのでこれから勉強をはじめるところなのですが、少し悩んでいます。 今は数値計算に便利なMATLABのような市販ソフトがあることが分かっており、勉強すれば短時間で実際に研究につかうことができそうです。 しかし、やはり研究者を目指すなら、そのようなソフトに頼らず、しっかりと数値計算の理論を理解したうえで、FORTRANなどで自らプログラムを書くべきなのでしょうか。 良いアドバイスがありましたらよろしくお願いします。

  • aiu高校生国際交流プログラムについて

    こんにちは。 私はこの冬にこのプログラムに応募しようと思っています。 しかし公式HPだけではプログラムについて詳しく知ることができず、とても不安です。 もし実際に行かれた経験のある方や少しでも知識をお持ちの方がいらっしゃれば、体験談、申込書の書き方、面接の受け方などなんでも良いので教えて下さい。 よろしくお願いします。

  • FORTRANについて

    今、大学の研究室でFORTRANの勉強をしています。そこで、院生から問題を出されました。それは、 テキストファイルから数字を読み込み、それらをFORTRANの中で計算し、その答えをまたテキストファイルに出力する、というプログラムです。 計算するところまではできたのですが、どうしてもテキストファイルに出力するプログラムがわかりません。 出力の仕方だけでも教えてください。教科書にもなく、図書館でも古い時代のものばかりで。しかも、僕は学校の関係でFORTRANを全く知りません。