くだすれFORTRAN(超初心者用)その2at TECH
くだすれFORTRAN(超初心者用)その2 - 暇つぶし2ch283:デフォルトの名無しさん
07/02/13 22:15:46
彼が何をしたいかわからない俺は馬鹿

284:254
07/02/13 22:36:55
>>283

バカですんません。
とりあえず、やりたいことというのは、

①定められた仕事回数の分の仕事(x-y)をdo loopで行う。
②x-yを実行する度に、仕事回数zの数を増やす

※x-yがマイナスに達した時、xの値を初期設定の値に戻す。仕事回数zに+1する代わりに、
その後、missの項目に+1する。

③仕事回数が規定に達したらそこでプログラム終了。

何故、こんな意味のわからないプログラムを組むのかというと高校の卒業課題で使うためです。
これによってある計算をしなければならないので…(詳細はここでは書けませんが)

とりあえず、x-yの計算結果と、missの回数すら出力できてないので、僕は非常に混乱しています…
バカでほんとうにすいませんorz

285:デフォルトの名無しさん
07/02/13 23:50:05
>>284
卒業課題って今年度の?
今の状態で行き当たりばったりにプログラム書くより、教科書なり参考書なりをよく読んで
もう一度基本的な文法を覚えなおした方がいいよ。

それからパソコン持ってるなら家でも予習復習できるように処理系の1つも入れておけ。
Windowsで学校の課題程度ならこれくらいで十分
URLリンク(www.coastal-env.k.u-tokyo.ac.jp)
他は本スレ参照のこと
スレリンク(tech板:2番)

286:デフォルトの名無しさん
07/02/14 21:38:36
構造格子上の3次元の温度データから等数値面をつくり、
その面に沿って面積分を行いたいのですが、うまくいきません。
 そもそも曲面の求め方が悪いのか(勾配から法線ベクトルを出し格子内
で面を張っているだけ)チェック用に完全な球を作り、
面積分を行っても球の表面積と桁が違うような結果になってしまいます。
 曲面の作成と面積分のやり方、あるいはfortranのサンプルプログラム等
に関してご存知でしたら教えてもらえませんか?

287:デフォルトの名無しさん
07/02/15 21:46:19
倍精度複素数型 cKappa には,
純虚数 か 実数 かの何れかが格納されています.

つまり,cKappaを2乗すると必ず実数になるのですが,
この値を倍精度実数型 dE に代入したいときは,

dE = cKappa * cKappa

で問題ないのでしょうか?

288:デフォルトの名無しさん
07/02/17 01:12:06
初心者でもぅさっぱり分かりません。
VS2005を入れてSilverfrostのftn95をインストールしてVSでftn95を選択。
一番簡単な
PROGRAM MainProgram
write(*,*) 'TEST'
END
を打ちデバッガ実行するとLINKエラーになります。このLINKエラーって何でしょうか?


289:デフォルトの名無しさん
07/02/17 01:21:03
288です。失礼
------ Build started: Project: FortranApplication2, Configuration: Debug .NET ------
Building project FortranApplication2...
Updating References...
Linking...
LINK : error - File not found: C:\Documents and Settings\.dbk
こんなエラーです。

290:デフォルトの名無しさん
07/02/17 01:50:41
>>288
VS2002だが、うまく行っている。
エラーメッセージを見る限り、ファイルそのものが見つかっていないような。
まず単独でビルドしてみたら?


Building project FortranApplication1...
Updating References...
Compiling file: FreeFormat1.f95
Linking...
Assembly file Debug\NET\FortranApplication1.exe for .NET 1.1 produced
Build log saved at: "file://C:\Documents and Settings\All Users\Documents\FORTRAN\FortranApplication1\Debug\NET\buildlog.txt"
FortranApplication1 build succeeded.


291:デフォルトの名無しさん
07/02/18 01:07:44
>>まず単独でビルドしてみたら?
時間がなく、余り調べていないのですが、自分はVSが初心者です。
コマンドプロンプトからはexeを生成し、実行まで出来るのですが、VSだと・・・orz
上記の「単独でビルド」とは何の作業をさすのでしょうか?

292:デフォルトの名無しさん
07/02/18 14:19:54
>>291
エラーメッセージから見ると、ソースファイルをプロジェクトに登録していないように見えるんだが。
New で作ったならそういう事は起きないが既存ソースなら登録がうまく言ってないのかも?

293:デフォルトの名無しさん
07/02/25 14:25:10
s = a**b

の計算が必要なときは

s = exp(b*log(a))

と書いた方が計算が速いと聞いたのですが,本当でしょうか?

294:デフォルトの名無しさん
07/02/25 17:37:12
>>293
自分でベンチマーク作って確かめろw

どっちにしろ一般のべき乗はexp log で計算しているはずなので、
8087のようにハードウェア的に実装されたexpを利用したかしないかの違いだろう。


295:293
07/02/27 10:33:43
>>294
うちのPCではどうやら後者の方が2割程度早いようです.
コンパイラはIntel Visual Fortran 9.1です.

それでこれからは全てexp logで計算しようと思ったのですが,
問題が発生しました.

次のような,モジュールで変数を共有する仕様の
プログラムを書いたのですが,コメントしているように,
共有用モジュールの変数を介して値を渡した場合と
直接値を代入した場合で結果が異なってしまいます.

ちなみにb**bで計算した場合はどちらも同じ結果を出力します.

b=0の場合を除いて演算してもいいのですが,
NaNになる原因が分からないので何とも怖くて使えません.

何かアドバイスあったらお願いします..



296:293:プログラムリスト
07/02/27 10:34:24
module commons
implicit none
real(8) a(1:10)
end module commons

program main
use commons
implicit none
a(1)=0.d0
call sub
end program main

subroutine sub
use commons
implicit none
real(8) b

!こちらを使うと出力は NaN
b=a(1)

!こちらを使うと出力は 1
b=0.d0

write(6,*) exp(b*log(b))
return
end subroutine sub

297:デフォルトの名無しさん
07/02/27 21:19:52
>>295
組み込み関数 LOG(X) はXが実数の場合、Xは正(X>0)でなければならない。

IVFでは -∞ を返しているが、b * log(b) = 0 * -∞ = NaN となるので、
exp(b * log(b)) = exp(NaN) = NaN となる。

b=0.d0 の時に 1 と出力されるのは、コンパイル時に bの値が既知の定数(=0)なので
最適化によりプログラム中で b*log(b) が計算されず、直接 exp0.0D0) を求めてるため。
最適化なし(-Od)でコンパイルすると両方とも NaN になる。

298:293
07/02/27 21:35:35
>>297
おおー!確かにそうなります!

実にすっきりしました.
どうもありがとうございます.

299:293
07/02/27 21:39:28
途中で書き込んでしまいました.

あまりに訳が分からないので
さっきVinu Linuxをわざわざインストールしてgfortranでも
同じことをしたんですが,こちらは b=0.d0 と書いても b=a(1) で渡しても
NaNとなりました.

今まで最適化で問題が発生したことが無かったこともあって,
原因がコンパイラの最適化にあったとは全然気がつきませんでした.

300:デフォルトの名無しさん
07/02/27 23:39:40
Xが0以下の実数の場合、LOG(X) の結果は処理系依存になるので
実行時エラーを出してプログラムを止める処理系もある。

301:デフォルトの名無しさん
07/02/28 00:44:46
最近の処理系はIEEE準拠になって途中で実行時エラーで止まることが少なくなってありがたい。

せっかくIF文で例外を排除しているのに、コンパイラが最適化して勝手に投機的実行をして、
挙句に0割とかで実行時エラーを起こしてとまるとか、ウンコのようなことが昔はよくあったwwww



302:デフォルトの名無しさん
07/02/28 04:01:39
学校で今週までの課題で
『n元連立一次方程式をガウス・ザイデル法を利用して解くプログラムを作成し、テストを行え』
という課題がだされたのですが、全くわかりません(;_;)
頑張って本を読んでみたのですが理解できなくて(;_;)
最終手段として、ここに来ました(>_<)
どなたか、ご教授下されば幸いです(;O;)
初めての書き込みなので粗相があったらすみませんm(__)m
ちなみに学校で使っているのはフォートラン77です。

303:デフォルトの名無しさん
07/02/28 12:05:08
またガウス・ザイデル法かw

こんなの教科書にも載りまくりだろう。

誰かFAQにでも入れておけ。



最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch