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/

838 :デフォルトの名無しさん:2015/07/12(日) 01:14:54.68 ID:yuQPCUFW.net
連レスすみません。
バージョンは5.1.0です。

839 :デフォルトの名無しさん:2015/07/12(日) 01:54:09.24 ID:z4R5SLxl.net
>>836
subroutineの内部で宣言するなら書き方が違うはず
引数で宣言するより別の行で宣言した方が見やすくない?
とりあえず自分はこんな感じで書く
https://ideone.com/HCzWB6

840 :デフォルトの名無しさん:2015/07/15(水) 01:28:37.71 ID:yskKzL3L.net
>>839
リンク先のように書いたらうまくいきました。
自分のプログラムの他の部分も確認したところ、配列の書き方が全て間違っていました(配列A(1:N)をA(N)などと書いていました)。
ありがとうございました。

841 :デフォルトの名無しさん:2015/07/28(火) 11:53:11.24 ID:J4RVztBC.net
教えてください。
サブルーチンに渡された配列引数2つが同一かどうか
(値が同じかどうかではなくて、値を格納するアドレスが同じかどうか)
を確認するすべはありますでしょうか…?

ポインタとか使えるのでしょうかね?よく分かっていません。

842 :デフォルトの名無しさん:2015/07/28(火) 12:08:17.55 ID:J4RVztBC.net
自己解決してしまいました…

program test
implicit none
real(8)::a,b
a=1
b=2
call sub(a,b)
call sub(a,a)
end program

subroutine sub(a,b)
real(8),target::a,b
real(8),pointer::p1,p2
write(*,*) '=====',a,b
p1=>a
p2=>b
if(p1.eq.p2)then
write(*,*) 'identical'
else
write(*,*) 'independent'
end if
end subroutine

843 :デフォルトの名無しさん:2015/07/28(火) 12:26:18.89 ID:J4RVztBC.net
いや、すみません間違ってました。値を比較してるだけみたいです。
どうしたらいいんだ。
(日記みたいになってしまってですまんです)

844 :デフォルトの名無しさん:2015/07/28(火) 16:14:57.20 ID:ll5MB+YbM
>>841
試した事がないので自信がないが、組み込み関数associated()を使えばできるかも知れない。
2つの配列引数をpointerで受けてそれぞれを同一targetと比較するとか。
ただ、アドレスが同じか確認するだけなら問題はないと思うが、
一般に1つのルーチンの異なる2つ以上の仮引数で同一実引数を受けるのはあまり行儀が良くないと思う。
上記の方法も配列仮引数ポインターにintent(in)属性を付けた方が良いかも。

845 :デフォルトの名無しさん:2015/07/29(水) 09:56:48.14 ID:2BaiQKnz.net
最近出た『FORTRANハンドブック』
買ったほうがいいかな?

846 :デフォルトの名無しさん:2015/07/29(水) 15:03:19.81 ID:PIi6Yh3/.net
>>843
コンパイラは何?

847 :デフォルトの名無しさん:2015/07/29(水) 23:16:07.78 ID:USyoWCFT.net
ifortです。associated(pointer,target) で行けそうなんですが、
targetの変数にopitional属性がついていて… ><という状況です

848 :デフォルトの名無しさん:2015/07/30(木) 00:48:36.88 ID:5OMMXfec.net
gfortranならlocでアドレス取得できるの確認した
なんか独自拡張みたいだが、ifortにもあるよね

849 :844:2015/07/30(木) 09:50:55.75 ID:NE82NWKL1
>>847
仮引数のoptional属性は省略可能であることを表しているので今回は関係ないです。
仕様書をよく読まずにレスしてしまったけれど、第二仮引数targetはポインターでも良い様です。
中途半端な助言をして申し訳ない。
サンプルコードを貼っておくので、参考にして下さい。

環境: msys2/mingw-w64 gfortran ver5.2
gfortran -pedantic -std=f2008 same_target.f90 -o same_target.exe
注意点
(1)非ポインターの実引数をポインター仮引数に渡せるのはFortran2008以降。intent(in)は必須。
(2)仮引数は形状引き継ぎ配列、または大きさ引き継ぎ配列でなければならない。

program same_target
implicit none
integer, dimension(10), target :: a, b
a = 0
b = 1
print *, "a compares with a."
print *, is_same_array(a, a)
print *, "a compares with b."
print *, is_same_array(a, b)
contains
function is_same_array(a1, a2)
implicit none
logical :: is_same_array
integer, dimension(:), pointer, intent(in) :: a1
integer, dimension(:), pointer, intent(in) :: a2
is_same_array = associated(a1, a2)
end function is_same_array
end program same_target

850 :デフォルトの名無しさん:2015/08/02(日) 15:34:23.65 ID:Gc5k9GMO.net
module内のcontainsのところに書いているfunctionをincというフォルダのsample.f90にまるごと持って行き、
include 'incl/sample.f90'
としたのですが、moduleに書いていた時はは参照できていた変数が
定義されていない参照 となりコンパイルできません。
functionまるごともっていくとかやったらいけないものなのでしょうか?

851 :デフォルトの名無しさん:2015/08/02(日) 16:04:00.19 ID:WYMEG2sEn
>>850
なぜinclude行を使おうと思ったのかとか、フォルダの名前はincなのかinclなのかはさておき、
include行はどこに書いているの?移動した関数を定義していた場所?それとも別?
あと変数はどこで宣言されているの?

852 :デフォルトの名無しさん:2015/08/02(日) 17:13:03.49 ID:5pC+KESf.net
>>850
内部関数を別ファイルにするなら注意が必要
includeを書く位置によるけどエラーになるなら外部関数扱いになっている
内部関数はメインプログラムの変数も参照できる
外部関数の扱いになるとメインの変数、他の内部関数、サブルーチンが参照できなくなる
だから、使っている変数や関数、サブルーチンを確かめないとエラーになる

解決方法はいろいろあるけど変数だけなら引数で渡せば使える
containsの後にinclude文を書けば内部関数扱いになるからそのまま使える

ちなみに、includeは廃止予定とかじゃないけど非推奨らしい
http://www.nag-j.co.jp/fortran/tips/tips_AboutInclude.html
http://www.mri-jma.go.jp/Project/mrinpd/coderule.html

853 :デフォルトの名無しさん:2015/08/02(日) 20:38:11.00 ID:Gc5k9GMO.net
>>852
詳しく教えて頂いてありがとうございます。試してみようと思います。
includeってもう非推奨なんですね。代替はmoduleで分割とかできるのかな
include以外のやり方も考えてみます

854 :デフォルトの名無しさん:2015/08/05(水) 16:55:43.17 ID:OhKwnQSp.net
>>842
Fortranって規約では、引数に番地の重なる変数や配列を送っちゃ駄目じゃなかったけ?

まぁ大抵のコンパイラは無警告で通すけど。
昔だとWATFORなんかが文句を言ってきた。今だとNAGあたりがなんか言いそう。

>>848
loc 相当を規格内でやるには c_loc と transfer で代替するはず。

855 :デフォルトの名無しさん:2015/08/16(日) 01:33:05.77 ID:ZKNwH6b8.net
Fotranで作成された古いプログラムをVBAに移しているのですが
符号がついていないためIF文の解釈がよくわかりません。
どなたか教えて頂けないでしょうか。

IF(J-K) 2,3,2
3 B(J)=1./Y
C(J)=1.
GOTO 4
2 B(J)=-A(K,J)/Y
C(J)=A(J,K)
4 A(K,J)=0.

856 :デフォルトの名無しさん:2015/08/16(日) 01:53:24.79 ID:mdNdQhdt.net
>>855
IF (L) a,b,c

X:負 go to a
X:0 go to b
X:正 go to c

857 :デフォルトの名無しさん:2015/08/16(日) 03:10:40.47 ID:ZKNwH6b8.net
>>856

ご回答ありがとうございました。
助かりましたm(_ _)m

858 :デフォルトの名無しさん:2015/08/16(日) 08:57:02.36 ID:nCIMfI1D.net
>>855
>>856
いわゆる計算型go toはもう忘れられいるのですね。

859 :デフォルトの名無しさん:2015/08/16(日) 09:08:04.74 ID:ZKNwH6b8.net
>>858
私が素人というのもあるのですが、いくつかのFortranのHPみてもIF文の説明には
入っていませんでした。

860 :デフォルトの名無しさん:2015/08/16(日) 12:29:13.36 ID:nCIMfI1D.net
>>869
ただしくは、算術IF文というものです。あるサイトの解説です
古い書き方に算術IFというものがあります。 この書き方はFortranでは廃止予定機能ですが古いプログラムには見かけられる書き方です。
算術IF文は、与えた式が0より小さい場合に最初の文番号へ、 0の場合は2番目の文番号へ、 0よりも大きい場合には3番目の文番号にジャンプします。
if ( 式 ) 文番号1, 文番号2, 文番号3
例)
i = -1
if (i) 100, 200, 300 ! 100へジャンプします

861 :デフォルトの名無しさん:2015/08/16(日) 21:04:42.30 ID:mdNdQhdt.net
古文読解みたいなもんよ。
新たに使うことは無いが、昔のプログラム読む為の教養みたいなもん?

アセンブラから進化したと思えば、まぁこんな命令ありがち感はある。

862 :デフォルトの名無しさん:2015/08/24(月) 05:54:40.65 ID:lgtNqCAf.net
ある参考書にあるプログラム例を映したのですが、実行するとエラーが出ます。内容が外部ファイルへの出力関係なので早急に解決したいのでよろしくお願いします。
プログラム
integer :: n, i, j, fi = 10, fo = 11
open(fi, file = 'input.d')
open(fo, file = 'output.d')
read(fi, *) n
close(fi)

if(n < 3) stop 'stop, n < 3'
d = 10.0d0 / dble(n - 1)
do j = 1, n
y = -5.0d0 + dble(j - 1) *d
do i = 1, n
x = -5.0d0 + dble(i - 1) *d
z = sin(x) * cos(y)
write(fo, '(3e12.4)') x, y, z
enddo
write(fo, *) ' '
enddo
close(fo)
エラーメッセージ
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.

Backtrace for this error:
#0 ffffffffffffffff
#1 ffffffffffffffff
#18まで同文
OS:Windows7(64bit)
コンパイラ:gfortran
よろしくお願いします

863 :デフォルトの名無しさん:2015/08/24(月) 06:07:47.38 ID:lgtNqCAf.net
申し訳ありません。確認したところ
コンパイラはtdm64-gcc-4.6.1です。

864 :デフォルトの名無しさん:2015/08/24(月) 07:17:38.92 ID:lgtNqCAf.net
再び申し訳ありません。
gfortranのverを落としたら普通にできました。何度もすみませんでした。

865 :デフォルトの名無しさん:2015/10/14(水) 21:51:47.29 ID:S/4UaJI2.net
intelコンパイラのDAALをFortranから
なにかしらの形で呼び出してうまくいった方いませんか?

866 :デフォルトの名無しさん:2015/11/08(日) 17:44:21.58 ID:jBmnCoB4.net
fortranで簡単なguiウィンドウ作れたりしますか?
ウィンドウがあってこのボタンを押すと〜〜のサブルーチン実行のような・・・

867 :デフォルトの名無しさん:2015/11/08(日) 18:57:35.01 ID:8suWMXlm.net
>>866
visual fortranにRADがあったような気がする
けど、Fortranで計算部分をライブラリ化しておいて
別の言語で作ったGUIで呼び出す方が一般的だと思う

868 :デフォルトの名無しさん:2015/11/09(月) 22:25:56.92 ID:oiX/fj8U.net
>>867
ありがとうございます
やっぱり流行りの言語も使ってみたいと思います

869 :デフォルトの名無しさん:2015/12/15(火) 21:50:10.22 ID:CN0jNpr8.net
基本的な質問かもしれませんがfunctionとsubroutineで作るのってどう切り分けたらよいのですか?

870 :デフォルトの名無しさん:2015/12/15(火) 23:39:50.07 ID:m5pV9CjXc
>>869
よく言われるのは『戻り値が一つの場合』はfunction、それ以外はsubroutine。
またsubroutineには『順番が決まっている一連の処理』を一纏めにするという使い方もある。
こちらの使い方は特定の数学問題を解くモノが多い。

871 :デフォルトの名無しさん:2015/12/15(火) 23:58:59.22 ID:8+9MOK5i.net
>>869
functionを使うのは、返値が一つと自明な(かつ明示したい)ときだけかな。

872 :デフォルトの名無しさん:2015/12/16(水) 00:26:30.43 ID:dxIuSVrg.net
>>871
ありがとうございます
計算速度は関係ありませんか?

873 :デフォルトの名無しさん:2015/12/16(水) 00:28:34.56 ID:dxIuSVrg.net
例えばファンクションのほうがその度に呼び出すために計算速度は遅くなるとかありませんかね・・?

874 :デフォルトの名無しさん:2015/12/16(水) 02:24:06.06 ID:cuafR5Si.net
差は感じたことないな
気になるなら簡単なテストプログラム作ってみたら?

875 :デフォルトの名無しさん:2015/12/16(水) 06:34:20.84 ID:qB4UYIzV.net
中身が分からないunformattedで出力されたファイルを読むにはどうすればいいですか?

876 :デフォルトの名無しさん:2015/12/16(水) 22:57:19.85 ID:a/dQTwEW.net
ACCESS='STREAM' でオープンして嫁  詳しくはマニュアル検索検索

877 :デフォルトの名無しさん:2015/12/16(水) 23:02:21.81 ID:a/dQTwEW.net
>>869
function は副作用(PURE の時)がないとき、それ以外なら SUBROUTINE が基本かな。
コンパイラの最適化の観点から、数学的な意味での関数になっているときに使うのがいい。

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
出てくるだろ、ちゃんと調べろ。
それ以前に理学部とかだったら勉強不足だぞ。

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

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