2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

くだすれFORTRAN(超初心者用)その6

1 :デフォルトの名無しさん:2012/08/16(木) 20:58:00.31 .net
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
FORTRAN使いが優しくコメントを返しますが、
お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。

●注意事項
・質問する前にGoogle等の検索サイトで検索しましょう。
・回答者にわかりやすい様に、質問内容はできる限り詳しく書きましょう。
・エラーの場合は起きた状況、環境(OS・コンパイラ・バージョン)、エラーメッセージも詳しく書きましょう。

●前スレ
くだすれFORTRAN(超初心者用)その5
http://toro.2ch.net/test/read.cgi/tech/1269704830/

●過去スレ
くだすれFORTRAN(超初心者用)その4
http://pc12.2ch.net/test/read.cgi/tech/1232789521/
くだすれFORTRAN(超初心者用)その3
http://pc11.2ch.net/test/read.cgi/tech/1196384126/
くだすれFORTRAN(超初心者用)その2
http://pc11.2ch.net/test/read.cgi/tech/1164121236/
くだすれFORTRAN(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1138063703/

878 :デフォルトの名無しさん:2015/12/25(金) 14:17:27.29 ID:H3s+gts8.net
今二分法のプログラム書いているんだけど、うまく収束しなくて困ってるのでここで質問させてください

ある区間[a, b] の間に解があるとして、f(xsol) =0となる点を見つけようとしてます。

関数f(x) は数値計算によってしか求められない(xの多項式では記述できない)とします。

x -> xsol に近づいていると思うのですがどうしても0 に漸近しません。 収束条件は 10^{-1}程度の荒いものでも収束しません。

考えられる原因の1つとして情報桁落ちかな?と思いましたが回避する方法はあるでしょうか?

ある程度計算を進めると、区間[x1, x2]において、その中点 (x1+x2)/2の値が一定となってしまいます。

879 :デフォルトの名無しさん:2015/12/25(金) 14:24:09.90 ID:H3s+gts8.net
>>878
後出しで申し訳有りません。

変数は全て倍精度で設定しております。

880 :デフォルトの名無しさん:2015/12/25(金) 16:39:31.63 ID:em+Cn0F1.net
>>878

real(16)
と宣言して、8倍精度にしたらどうなりますか。

881 :デフォルトの名無しさん:2015/12/25(金) 16:47:13.93 ID:VJyAJ/uW.net
>>874
>>877
返信おくれてすいません。
勉強になりました。一つ出力でpureな時はファンクションを使うようにします。

882 :デフォルトの名無しさん:2015/12/25(金) 19:21:54.92 ID:H3s+gts8.net
>>880
今4倍精度に宣言して計算終わったところです!
一定になるところは変わりましたが、計算を進めるとやはり中点が一定になります。。。

883 :デフォルトの名無しさん:2015/12/25(金) 19:22:26.63 ID:H3s+gts8.net
>>882
すみません、16倍精度の間違えです

884 :デフォルトの名無しさん:2015/12/26(土) 01:22:24.79 ID:ybGnykyB.net
>>880,861
ちょーーー!!
8倍精度とか16倍精度と違うから! 
普通はバイト数だから8で倍精度、16で4倍精度。
まぁ数値はベンダー依存で規定されていないから、あんたらのコンパイラが
8倍精度や16倍精度なのかもしれないがさw

そもそも二分法の場合必ず半分になるんだから、まともなら x1=x2 にならないはずがない.
ならないとすればプログラムが間違っているか、関数値の正負が x1 と x2 の間で
複数回反転しているかのどっちかだろ。つまり与えた区間の初期値が間違っている。

まずグラフを書かせろよ。
適当に数値いれて手で方眼紙にプロットしろ。話はそれからだ。

885 :デフォルトの名無しさん:2015/12/27(日) 14:58:58.66 ID:j4SegU7G.net
>>878
関数f(x)がもともと収束しない形である可能性はないのか?

886 :デフォルトの名無しさん:2015/12/27(日) 19:35:54.52 ID:yJZ4hzCz.net
>>884
すんません、完璧勘違いしてました!
やはり4倍精度で正しかったですm(_ _)m
勉強になりましたm(_ _)m

>そもそも二分法の場合必ず半分になるんだから、まともなら x1=x2 にならないはずがない.
>ならないとすればプログラムが間違っているか、関数値の正負が x1 と x2 の間で
>複数回反転しているかのどっちかだろ。つまり与えた区間の初期値が間違っている。

初期値問題ですか。。。。


>まずグラフを書かせろよ。
>適当に数値いれて手で方眼紙にプロットしろ。話はそれからだ。

グラフなんですが、f(x)が非線形なので数値計算のみでしかもとまらないです。

887 :デフォルトの名無しさん:2015/12/27(日) 23:19:57.50 ID:XJXVRFXp.net
>>886
沢山の点で計算してEXCEL等でプロットすればいいのでは。

888 :デフォルトの名無しさん:2015/12/28(月) 02:36:39.69 ID:lnQX/VRo.net
>>886
まずは4次のルングクッタでグラフ描いてみてはどうだ?

889 :デフォルトの名無しさん:2016/01/09(土) 11:18:03.65 ID:i1gHiPMA.net
implicit な〜ん(笑)

890 :デフォルトの名無しさん:2016/01/18(月) 02:16:26.16 ID:trNoq0XT.net
fortranだと変数がからかどうか判定できないんだっけ?
空だと 0.00が代入されんのかな

891 :デフォルトの名無しさん:2016/01/18(月) 11:50:39.45 ID:jWMk835pU
>>890
普通の変数は判定できない。ポインターなら組み込み関数associated()で可能。
>空だと 0.00が代入されんのかな
空=未初期化のことなら変数の値は不定。
局所変数の初期値ならコンパイラオプションで指定できるコンパイラもある。
gfortranなら-finit-local-zeroオプションとか。

892 :デフォルトの名無しさん:2016/01/18(月) 15:21:34.93 ID:1WswQHMD.net
空ってなんだ? 初期化されていないということか?
Fortranでは初期化されていない変数の値は不定だぞ。ごみが入っている。
0.0は初期か忘れに気づきにくいから、むちゃくちゃな値が入っていたほうが親切。

allocatableがallloctaeされているかいないかならallocated関数かな。

893 :デフォルトの名無しさん:2016/01/19(火) 00:06:44.55 ID:yHbL6fBI.net
>>892
e-307くらいが入る

894 :デフォルトの名無しさん:2016/01/19(火) 01:44:03.17 ID:3ZSQATy/.net
>>892
allocatable で配列宣言してないとそれ使えないよね?

例えば、

program main
implicit none
double precision:: a, stat

do
read(20,*,iostat=stat) a
if(stat<0)exit
enddo
rnd program main

fort.20 ファイルの中身が空(null)だとしたら変数aにはゴミが入るわけよね?
変数aに何の数値も代入されていないと自動的に確認するためにはどんなコーディングが必要だろう、この場合。

895 :デフォルトの名無しさん:2016/01/19(火) 06:58:03.23 ID:MMA3M4fE.net
Fortranのレベルでどうこうではなく、Undefined Behavior Sanitizerでも使えばいいんじゃないの

896 :デフォルトの名無しさん:2016/01/19(火) 09:26:07.32 ID:3ZSQATy/.net
>>895
それはオプションかな?
今回の問題とはちょいと違うのだ

897 :デフォルトの名無しさん:2016/01/20(水) 00:17:10.04 ID:0BkO9wkB.net
いまさらfortranで機械学習とかディープラーニングライブラリ作って公開する猛者いませんか?
いたら面白いのになあ

898 :デフォルトの名無しさん:2016/01/22(金) 21:17:23.35 ID:SxQo3Wt7.net
iMacだがLAPACKのコンパイルが上手くいかない。MacBookAirの時は上手く言ったのだが誰か教えてくれないか?

899 :デフォルトの名無しさん:2016/01/22(金) 22:42:37.27 ID:rL4grHGE.net
>>894
Fortran2003 ならスカラーの allocatable もある。

I/O では無理だが、例えば Function からの代入ならば、希望のことはできる。
スカラーへの allocatable 変数が返り値の Function からの自動再割り付けで、
右辺の関数の返り値が空なら、左辺の allocatable スカラーが allocate されないし、
値をもっていれば NULL だろうとallocate されるので allocataed 関数を使えば判別できると思う。

900 :デフォルトの名無しさん:2016/02/05(金) 09:02:45.47 ID:wvmc5Sx8.net
Fortranって何を使ってデバッグするんでしょうか

901 :デフォルトの名無しさん:2016/02/08(月) 00:08:26.47 ID:wknTPR3t.net
>>900
dddとかやん?

902 :デフォルトの名無しさん:2016/02/10(水) 08:13:25.94 ID:ZRcL4yE9.net
>>901
便利そうですね
ありがとうございます

903 :デフォルトの名無しさん:2016/02/12(金) 04:12:40.41 ID:vptI0fCP.net
数値計算するときの刻み幅の決め方が難しすぎるなぁ
等幅だとものすごい配列使うからメモリがオーバーフローするしなんかいい方法ないすかね?
てか、刻み幅に関する詳しい本とかないのかなぁ

904 :デフォルトの名無しさん:2016/02/12(金) 08:22:40.80 ID:1ZkcdkFj.net
>>903
森口繁一先生の
『計算数学夜話』
に、「刻み幅の自動選択」
という話が掲載されていたはずです。
変化がなだらかな区間は刻み幅を広く、
変化が急な区間は刻み幅を狭くするのを
自動化するという話です。

905 :デフォルトの名無しさん:2016/02/14(日) 06:02:56.78 ID:5/5WMEda.net
>>904
ありがとうー
うー、でも手に入らないぽいなー((((;゚Д゚)))))))

906 :デフォルトの名無しさん:2016/02/15(月) 02:04:22.84 ID:sHvN+vmN.net
桁の大きなものと桁の小さなものが混じった数値計算をするとき、規格化するのは常識だと思うんだが。
ある変数の取りうる範囲が極端に振れる場合(例えば、1d-20 < x < 1d8) だとどうすりゃいいんやろか。

907 :デフォルトの名無しさん:2016/02/17(水) 11:45:41.36 ID:8sdmbRj5.net
対数を取れw

908 :デフォルトの名無しさん:2016/02/17(水) 12:17:59.53 ID:IDaBzq+u.net
>>907
それ教授や先輩にも言われたんですかまったく意味わかりませんでした。
刻み幅で対数????といった感じです。

logx(i+1)-logx(i)=刻み幅 ということですか?

909 :デフォルトの名無しさん:2016/02/17(水) 12:40:39.87 ID:5aqj+faD.net
logかました状態だと値の範囲が狭くなるというだけじゃ?

910 :デフォルトの名無しさん:2016/02/17(水) 18:55:07.86 ID:NfIkV94M.net
そもそも問題がわからないから答えようがないな。
たとえば被積分関数が 1d-20 から 1d8 まで振れる場合は小さい値はどうでもいいし。

911 :デフォルトの名無しさん:2016/04/25(月) 20:15:29.39 ID:ABiBIEuQ.net
一次元ポアソン方程式

d^2φ/dx^2=cos(x) (0≦x<2π)

を解くプログラミングがわかりません。差分法を使えばいいというのはなんとなくわかったのですが、差分法がいまいちよくわかっていないです。

どなたかご教授ねがえないでしょうか。

912 :デフォルトの名無しさん:2016/04/25(月) 21:42:21.21 ID:0jtmrtsy.net
ネットでも本でもいいから微分方程式の数値解法について調べること。
いろんな計算方法があるし、特定の言語にこだわる必要もない。

そういえば数値計算のスレって今ないよね。

913 :デフォルトの名無しさん:2016/04/25(月) 21:53:17.04 ID:2LxfGMmK.net
>>911
そもそもその式は解析的に解ける。

914 :デフォルトの名無しさん:2016/04/25(月) 21:53:33.26 ID:2LxfGMmK.net
>>912
欲しいなそんなスレ

915 :デフォルトの名無しさん:2016/05/01(日) 14:42:40.23 ID:tKi6j9CT.net
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています

言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?

Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al

ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw


The Covenant Project
概要

Covenantは、純粋P2Pのファイル共有ソフトです

目的

インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します

特徴

Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)

接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません


916 :デフォルトの名無しさん:2016/05/01(日) 18:07:45.37 ID:XA7YY+e1.net
言語はなんでも大丈夫ってレベルじゃねーぞ

917 :デフォルトの名無しさん:2016/05/17(火) 20:55:20.04 ID:MgCDmrcL.net
Fortran2015の調子はどうだい?

918 :デフォルトの名無しさん:2016/05/21(土) 18:12:16.63 ID:h3OgqWhP.net
ChromebookでFortranって動かせる?

919 :デフォルトの名無しさん:2016/07/18(月) 20:31:12.72 ID:apSB7g7B.net
全く分かりません
答え教えて下さい
http://i.imgur.com/BB9ERMu.jpg
http://i.imgur.com/SgRmlY6.jpg

920 :デフォルトの名無しさん:2016/07/19(火) 14:21:12.91 ID:qfWdnT3p.net
>>919
逝ってよし

921 :デフォルトの名無しさん:2016/07/19(火) 20:22:44.55 ID:555Vvc50.net
>>919
>>920
この流れいいなw

922 :デフォルトの名無しさん:2016/07/19(火) 22:17:37.41 ID:WRFubhA/.net
>>920
オマエモナー

923 :デフォルトの名無しさん:2016/07/19(火) 22:18:11.36 ID:WRFubhA/.net
>>919
自己解決しますた

924 :デフォルトの名無しさん:2016/07/28(木) 19:47:05.10 ID:nObYn5cT.net
0度〜90度まで30度間隔で正弦と余弦を出力する。但し書式は整数5桁、関数値は10桁で小数点以下6桁とする。

下記でコンパイラしても上手くいかないのですがどこをどのようにすれば宜しいでしょうか?
http://i.imgur.com/xwAoCXH.jpg

925 :デフォルトの名無しさん:2016/07/28(木) 22:14:51.73 ID:E8ct0ihN.net
古風な書き方だな
大学の講義か何かで習ってるの?

k が正しく表示されない点については、フォーマット文の f2.0 を i5 に書き換えたらどう?

どの段階でどのように失敗するのか書いてくれるとチェックしやすい
あと、プログラムをコピペしてくれるとこちらが入力する手間が省ける

926 :デフォルトの名無しさん:2016/07/29(金) 07:39:07.85 ID:1zITvd9X.net
>925
確かにFortran IVみたいな書き方ですね。
フォーマット文を

100 format ( i5,2f10.6)

に替えたら

  k    sin     cos
0 0.000000 1.000000
30 0.500000 0.996812
60 0.866025 0.987268
90 1.000000 0.971430

と結果がでます。
それにしても,
pi = acos(-1.0)

DOループの前に出すのがいいのじゃないですか。

927 :デフォルトの名無しさん:2016/07/30(土) 00:26:12.77 ID:CH8BIOrU.net
>>925
>>926
ありがとうございました!
i5に変えたら成功しました!

928 :デフォルトの名無しさん:2016/07/30(土) 00:26:31.27 ID:CH8BIOrU.net
>>925
大学ですね

929 :デフォルトの名無しさん:2016/07/30(土) 01:16:36.18 ID:CH8BIOrU.net
重力のみが作用する振り子の運動を解析するプログラムを完成させよ。
real L
data g, L / 9.8, 1.0 /
write (*,*) ’ Δt (sec) =’
read (*,*) dt
*initial
2 write (*,*) ’ θ0 (radian) =’
read (*,*) s0
s =❔
v =❔
t =❔
vL=v
* repeat
1 a= ❔
v =❔
w=❔
s =❔
t =❔
write (*,’(3f8.4)’)
if (vL.gt.0.0.and.v.lt.0.0) go to 2
vL=v
go to 1
end
知り合いとやってるのですが出来る気配がありません。
❔部分に何が入るか教えて下さい。
Δ、θは置き換えますよね?

930 :デフォルトの名無しさん:2016/07/30(土) 01:17:58.34 ID:CH8BIOrU.net
http://i.imgur.com/JFN9XSU.jpg

931 :デフォルトの名無しさん:2016/07/30(土) 18:19:30.33 ID:MnenPn8v.net
>>929
回線切って氏ね

932 :デフォルトの名無しさん:2016/07/31(日) 23:35:51.92 ID:TkjN2Ici.net
>>929
単振り子で色々調べてますが全く分かりません。
誰か出来る方いましたらお願いします。

933 :デフォルトの名無しさん:2016/08/01(月) 00:02:16.74 ID:018Zh5sQ.net
たぶん運動方程式をたててオイラー法で解くだけでしょ
どの段階で躓いているか分からないと答えようがない

934 :デフォルトの名無しさん:2016/08/01(月) 01:25:45.70 ID:qXp6EaAl.net
宿題全部やってちょうだい感が出てるから、やってくれる人は少なそう

935 :デフォルトの名無しさん:2016/08/01(月) 12:05:07.12 ID:tW3kuaWv.net
エセ左翼の目的は、わざと突っ込みどころが多い主張をすることで自分たちへ注意を向けさせ、
カルトへ向かう非難の矛先を逸らすこと。
国益に反することを言ったり、主張が食い違うもの同士の対立を煽ろうとするので放置し難いが、
主義思想についての洗脳を受けているわけではなく、フリをしているだけなので、
言い負かされてもダメージを負った様子もなく、論点をすり替えられるかスルーされる。
まともに相手をしてはならない。

サヨに対する危機意識が強すぎると、普段は常識的に振舞っている
(又は、サヨから不当に叩かれている)政治家などがズレたことをやろうとした時でも、
許容したり擁護してしまいがちになるので注意が必要。

936 :デフォルトの名無しさん:2016/08/01(月) 22:50:33.91 ID:qgzcRfyo.net
時間、速度、角度を出力するつもりでやったのですがコンパイルした時の値が違います
おそらく運動方程式が間違っているのだと思いますが(t,s辺りが違い気がする)どこがどう違うか教えて下さい
real L
data g, L / 9.8, 1.0 /
write (*,*) ’ Δt (sec) =’
read (*,*) dt
*initial
2 write (*,*) ’ θ0 (radian) =’
read (*,*) s0
s =s0
v =0
t =0
vL=v
* repeat
1 a= −g*sin(s)
v =a*t
w=v/L
s =s0+v*t/L
t =t+dt
write(*,*)’t,v,s’
write (*,’(3f8.4)’)t,v,s
if (vL.gt.0.0.and.v.lt.0.0) go to 2
vL=v
go to 1
end

937 :デフォルトの名無しさん:2016/08/02(火) 00:16:36.76 ID:lf/Rfa1x.net
>936
プログラムの問題ではなくて,数式の問題なんだから,物理板で質問した
ほうがいいのじゃないの。

938 :デフォルトの名無しさん:2016/08/02(火) 01:31:13.87 ID:pyAOnFQt.net
>>936
それFortran以前に運動方程式が全然違う。
v=Lω
dθ/dt = ω
として

dθ^2/dt^2 = -(g/L)sinθ
という微分方程式をルンゲクッタ法で解く。

解析力学、振り子とかで検索したら
ttp://homepage1.nifty.com/gfk/furiko.htm
出てくるだろ、ちゃんと調べろ。
それ以前に理学部とかだったら勉強不足だぞ。

939 :デフォルトの名無しさん:2016/08/02(火) 16:12:24.48 ID:+RnVB/b2.net
どなたか「=>」の意味を教えてください
大なりイコールのような条件式ではなく、記号が逆になっている方です。
具体的には、
DO I =1,NCNEST_NUM
D=>NCNEST_DATA(I)
G=>NCNEST_GRIDS(I)
CALL ASSIGN2BLOCK(D,G)
END DO
のようになっています。データの書き込み系だと睨んでいます。
よろしくお願いします。

940 :デフォルトの名無しさん:2016/08/02(火) 16:20:52.36 ID:e4r/z1Wx.net
>>939
ポインタの指示先を指定している
http://www.nag-j.co.jp/fortran/FI_Pointer.html

941 :デフォルトの名無しさん:2016/08/02(火) 16:23:27.42 ID:W78wvcm1.net


942 :デフォルトの名無しさん:2016/08/02(火) 16:50:17.87 ID:+RnVB/b2.net
>940
すばやい反応ありがとうございます。
「FORTRAN =>」で検索しても出てこなかったので、非常にありがたいです。

943 :デフォルトの名無しさん:2016/08/05(金) 23:42:07.06 ID:y4inqjRe.net
coarrayをwindows7,gfortranで
gfortran coarray.f90 -fcoarray=lib -lcaf_mpi
と打つと、
cannot find -lcaf-mpi
とでてコンパイルできん

https://gcc.gnu.org/wiki/CoarrayLib
を参考にMPICH2の拡張子msiのやつ(ちょいバージョン古い)を管理者権限でインストールしてPATHも通している
mpiexecも出来てるから、インストールに失敗してはいない
助けてくださいお願いします

944 :デフォルトの名無しさん:2016/08/07(日) 15:55:29.04 ID:2PwL22wv.net
caf-mpi.a もしくは caf-mpi.so はたしかにあるの?
バージョン番号付いたやつにリンクしてる?
ってWindowsか、、、Windowsの場合 .lib だったりするのかな

945 :921:2016/08/07(日) 19:58:54.32 ID:6Zl4UqYG.net
今のところwindowsだと無理っぽいね
mpif90がないからlcaf_mpi.aも取れない
おとなしく仮想化使います

946 :デフォルトの名無しさん:2016/09/06(火) 22:18:19.77 ID:VT4c30Iu.net
大気の温度構造を求めるために、4次のrunnge-kutta 法で数値計算しているんですが、ある値に収束するまで繰り返し計算させているせいか精度がどうしても出ません。
動かす範囲が大きいため、刻み幅のとり方が非常に難しく難儀してます。

例えば、積分範囲が 3.0d9 から3.0d6 まで計算しなきゃいけないのですが、ところどころに物理状態が変わるいわゆる境界があるので一律に刻み幅を設定するわけにもいきません。

色々書籍見てみたんですけど、刻み幅のとり方って
h = -1とか撮ってみても恐ろしく時間がかかるため現実的じゃありません。

なにか妙案はないでしょうか?
もしくは推薦図書あれば嬉しいです。
ちなみに今あるのは「数値計算術 」森口繁一 です。

947 :デフォルトの名無しさん:2016/09/07(水) 10:09:47.11 ID:ihxbaE2x.net
>>946
藪下信『計算物理(I)』(地人書館、1982)には、
「ルンゲ・クッタ法は弱不安定であることが知られている。ずなわち、ステップ幅hをあまり大きくとり過ぎると
、微分方程式の解と、それに対応する数値解とが、定性的に異なった振舞いをする。ただそれは
弱不安定性なので、hを小さくとることによって、安定にすることができる。理論的に詳しいことは、
ここでは説明しないが、結果だけをまとめて書いておこう。
(1) 一般の従属変数yに対する式
dy.dx=ay+b, (a<0)
に於て、ルンゲ・クッタ法が安定であるための条件は
|ha|<2.7
となることである。
(2) n個の従属変数(y1, y2, ,,,,,,,yn)に対する微分方程式
dy・cx=A;y+b
を考える。ただし、Aはn×nの行列である。Aの固有値の中の負のものがあるとき、
Aの固有値のうち絶対値が最大ものをλとする。
安定性の条件は、
|hλ|<2.7
となることである。」
とあります。参考になるでしょうか。
森口繁一先生の本で、「刻み幅」を自動的に変更するという手法について書かれた本が
あったと思います。『計算数学夜話(?)』とかいう本かもしれません。

948 :デフォルトの名無しさん:2016/12/03(土) 20:32:29.57 ID:HN6NcG00.net
>>946
最適解を求める方法は、刻み値の変更方法を含めて
UP応用数学選書7 最小二乗法による実験データ解析 プログラムSALS
https://www.utp.or.jp/bd/978-4-13-064067-1.html
にくわしい。大学系の図書館ならおいてあるはず。

境界値があって、連続計算できない場合に
最小二乗法だと、不安定になりやすいので、収束が悪いけど、絶対値法
残差二乗和の極小値ではなく、残差絶対値和の極小値を求めると、収束まで2-3倍の回数を計算しなければならないけど、安定しやすい。
残差が増加したときに、一旦計算を打ち切って、解を出力する。
出力した解を初期値として、刻み幅を1/10位(2進数の関係で1/8か1/16)に減らして、再度計算する。

収束で、計算機Eの1024倍ぐらいまでが積分を求めた時の1桁の精度になる(こっちの経験値、問題と演算系によっては大幅に変わる)ので
Y=F(X)の、Xを少しずらした時の値を計算して、このくらいずれる値を見つけておいてくれ。
左(0)から近づけた場合と右(∞)から近づけた場合に、不連続点の付近で、制度が大きく変わる。
こっちが取り扱った問題では、右からは1程度、左からは1E-12程度、計算機Eの影響を受ける。
こんな場合には、最小二乗法・絶対値法ともに使えない。OR https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%9A%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%BA%E3%83%BB%E3%83%AA%E3%82%B5%E3%83%BC%E3%83%81 を使う。
一次方程式の場合には、計算方法が規定されているが、
他の場合には、
適当な初期値を使って計算して、少しずらした値を計算して、極小値を初期値にして再度計算、
の繰り返しになる。不連続点は計算しない。
「少しずらした値」は1/1024を使って、その後1/2づつ減らした。
収束はかなり悪い。3000-5000回の繰り返し演算が必要だった。
計算機Eによる影響は、この方法で求めた。

なお、温度の変化を追いかける計算ではないので、参考にならないかもしれない。

949 :デフォルトの名無しさん:2017/03/24(金) 22:05:30.22 ID:rSyKPFXl.net
どなたかご存知の方いらっしゃいますでしょうか?
コンパイラのバグではなく何らかの仕様なのかと思うのですが分かりませんでした。
●質問
実数型の変数をwrite文で桁数を指定して出力させる時、
桁数以下の値は四捨五入されて出力すると思うのですが、
下記プログラム例のように”切り捨て”られる(と思われる)場合があります。
なぜこのような処理がされるかご存じであれば教えて頂きたいです。
●プログラム
PROGRAM TEST
IMPLICIT NONE
REAL*8 VAL1
  VAL1=0.125D0
  WRITE(6,'(D13.2)')VAL1
END PROGRAM
●結果
0.12D+00
●問題点
・0.125の小数点第3位を四捨五入すると0.13となるが結果は0.12となってしまう
●確認したこと
・変数VAL1の桁を増やして確認すると0.12500000000・・・と続く
・0.125は2進数で正確に表す事ができる
・下記のように2進数で正確に表せない数値だと四捨五入が理解できる
 入力値 VAL1=0.555D0
 結果 0.56D0
 結果(桁を増やす)0.555000000000000048849813083507D+00
・2進数で正確に表せる数値でも正しく四捨五入されるものもある
 入力値 VAL1=0.375D0
 結果 0.38D0
 その他 0.0625D0も正しく四捨五入される ⇒ 0.63D-1 と出力される
・Fortranコンパイラは、Compacfortranやredhatのgfortran、IntelFortranを試したがいずれも同じ結果だった
・単純な数値なので32bitや64bit環境の問題では無いと思います
・.f90でのみ試しています

950 :デフォルトの名無しさん:2017/03/24(金) 23:03:11.52 ID:L8cPMEns.net
丸めモードについて読むこと
IEEE754のNEARESTなら正しい動作
http://www.ibm.com/support/knowledgecenter/ja/SSGH4D_12.1.0/com.ibm.xlf121.aix.doc/language_ref/write.html

951 :デフォルトの名無しさん:2017/03/25(土) 04:11:14.28 ID:ESyR2hOs.net
どうもありがとうございます。
ROUNDで丸め誤差を色々定義出来るのですね。
来週試してみます。

952 :デフォルトの名無しさん:2017/12/10(日) 04:57:11.71 ID:cAgVc7bQ.net
fortranにはなんで引用仕様宣言なるものがあるんですか?
関数の引数等を関数の定義からコンパイラ勝手に読み取れば良いと思うんですが、moduleでできて手続きだとわざわざ自前で書かなきゃいけない理由って何かあるんですか?

953 :デフォルトの名無しさん:2018/02/26(月) 23:36:28.70 ID:TZ3KPlNh.net
普段形状引き継ぎ配列を使っているのですが、blasやlapackを使ってarray-temporariesをつけてコンパイルすると、コンパイル時にarray-temporariesのワーニングが出ます。
blasでは形状引き継ぎ配列を使っていないしモジュール内にあるわけでもないので当然と言えば当然なのですが、こういう時にどうするのが良いのか分からず困っています。ベストプラクティスのようなものはあるのでしょうか?

954 :デフォルトの名無しさん:2018/04/29(日) 22:24:59.24 ID:tKjITkqe.net
永い時を経て多分自己解決出来ました
Contiguous なんていうオプションがあるのですね

955 :デフォルトの名無しさん:2018/05/12(土) 20:03:53.83 ID:F3K2afGN.net
このスレ人おんの?

956 :デフォルトの名無しさん:2018/05/13(日) 14:08:02.04 ID:44h/7/Ui.net
一応

957 :デフォルトの名無しさん:2018/05/13(日) 14:33:38.53 ID:NXXuYZ+p.net
おおー。人おった!

958 :デフォルトの名無しさん:2018/05/23(水) 19:23:38.59 ID:Au5e7VGg.net
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

SAWKX

959 :デフォルトの名無しさん:2018/05/24(木) 10:43:20.36 ID:cPlRxlDn.net
SAWKX

960 :デフォルトの名無しさん:2018/07/04(水) 22:53:55.75 ID:gFgZc5FG.net
DG2

961 :デフォルトの名無しさん:2018/07/06(金) 12:32:29.62 ID:uTPDH9XV.net
DG2

962 :デフォルトの名無しさん:2018/10/01(月) 21:14:37.76 ID:/InadKmT.net
FORTRAN案件が一部に有るな
鉄道ダイヤシステムだが

963 :デフォルトの名無しさん:2018/12/10(月) 01:43:09.35 ID:Y2cLB9FR.net
何故文関数、
f(x) = 1. / x
のような記法が非推奨と言われるのでしょうか?(nag等のサイトより)
他の言語のlambda式などと比べて、Fortranでは非常に簡潔に簡易な関数を定義できるものだなあ、
と感心していたのですが…

964 :デフォルトの名無しさん:2018/12/10(月) 02:41:51.30 ID:O61+1QOk.net
>>963
書き易さより読み易さが優先
気象庁の標準コーディングルールより
文関数
 文関数は引用仕様が暗黙的であり、デバッグがしずらくなる。また、文関数 自体や文関数定義が後続する文関数を引用してはならないなどの制限がある。 内部関数として書いた方がよい。
http://www.mri-jma.go.jp/Project/mrinpd/coderule.html

関数、変数は明示的な宣言をしてから使うのが今風
個人で読み返さないプログラムなら何やっても正常動作すれば良いよ

965 :デフォルトの名無しさん:2018/12/10(月) 13:01:17.07 ID:Y2cLB9FR.net
>>964
ありがとう、正直大きなプログラム書かないので実感が湧かないけど、そういうものか

966 :デフォルトの名無しさん:2019/01/13(日) 22:58:00.85 ID:6mqjNodn.net
中学校の技術の教科書に載ってるってバズってるな

967 :デフォルトの名無しさん:2019/01/16(水) 19:01:22.83 ID:xonbbP95.net
2018も出たことだし若い血も入ってくる
乗ってるな

968 :デフォルトの名無しさん:2019/01/24(木) 20:16:05.77 ID:oJ91kE1a.net
本当に初歩的でかつ自分勝手で申し訳ないのですが、fortran90でn次正方行列の逆行列を求めるプログラムを教えていただけませんか?

969 :デフォルトの名無しさん:2019/01/24(木) 20:26:04.65 ID:/BXejuIU.net
それは数値計算の永遠の課題で万能の処方箋は無い
勉強の為ならWikipediaでも見ながら愚直にガウスの掃き出し法でも実装してみたら

970 :デフォルトの名無しさん:2019/01/24(木) 20:38:47.14 ID:/BXejuIU.net
求めたいだけなら大体の環境でmklが一番いいライブラリ
有名なので比較的読みやすいのはLINPACKだけど77仕様
モダンで簡単な実装ならあちこちのブログに載ってるからググれ

971 :デフォルトの名無しさん:2019/01/24(木) 20:44:04.96 ID:/BXejuIU.net
一応貼っとく
http://www.netlib.org/linpack/
お好みのシチュ用のソースが読める
インデクスと要素毎演算でDOは殆ど排除できるはず

972 :デフォルトの名無しさん:2019/01/25(金) 11:23:51.25 ID:nTExwXep.net
>>968
宿題は宿題スレへ

973 :デフォルトの名無しさん:2019/01/25(金) 11:43:59.45 ID:e9L7JHld.net
スレ索してみたけどFortranスレもしかしてここしか無くね

ぜひLINPACK読んで逆行列の疑問書いてくれ
布教のチャンス

974 :デフォルトの名無しさん:2019/01/25(金) 12:51:00.49 ID:A2tc5P4M.net
Lapackでええやん

975 :デフォルトの名無しさん:2019/01/25(金) 13:01:21.60 ID:e9L7JHld.net
LAPACKは使うけどコードは最適化されてて汚い

976 :デフォルトの名無しさん:2019/01/25(金) 21:25:43.75 ID:5qMgZ1Mp.net
Matrix Computationsに載ってるよ。

977 :デフォルトの名無しさん:2019/01/26(土) 02:23:28.24 ID:Z89DHn3T.net
質問です。
ファイル名 *.f90 とは別に、プログラム名 program * がありますが、この二つが同じ名前だと、何らかの不具合・不便に繋がったりするのでしょうか。
私は、修正前後を比較するためにバージョン違いを作るような場合を除き、基本的に両者を同じ名前にしているのですが……

978 :デフォルトの名無しさん:2019/01/26(土) 11:12:15.29 ID:yVAkGzul.net
むしろ同じにしといた方が無難

総レス数 1024
362 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★