[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 10/07 02:37 / Filesize : 345 KB / Number-of Response : 920
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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

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


●前スレ
くだすれFORTRAN(超初心者用)その3
pc11.2ch.net/test/read.cgi/tech/1196384126/

くだすれFORTRAN(超初心者用)その2
pc11.2ch.net/test/read.cgi/tech/1164121236/

くだすれFORTRAN(超初心者用)
pc8.2ch.net/test/read.cgi/tech/1138063703/


●関連スレ
FORTRAN W
pc11.2ch.net/test/read.cgi/tech/1163319215/


455 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 23:11:23 ]
ここって宿題代行スレなんですか?

新参者なので位置付けを分かってません。

456 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 23:22:23 ]
>>455
代行するもよし、ヒント出しもよし、生暖かく見守るもよし。

457 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 23:43:14 ]
>>455
>>456の言うとおり。
スレタイにあるように超初心者用なのでネットマナー違反も大目に見る。

麻薬の売人と同じで、最初は無料で甘い汁を吸わせて甘やかして気持ちよくさせて
初心者をFortran依存症にするスレだ。依存症にした後は骨まで搾り取る。

458 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 23:44:24 ]
いまどきFortranなんてはやりませんよw

459 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 23:49:16 ]
Fortran95の言語仕様がベスト!

Windowsプログラムを作ろうとは思わないが、
計算に使うのには理想的だと思う。

頼むから、もういじらないでくれ・・・

460 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 00:55:31 ]
>>458
流行らないけど、廃れないから、一生役に立つ。

461 名前:デフォルトの名無しさん [2009/07/22(水) 11:30:52 ]
1 次元配列 a(k) = k (k は 1 から 100 まで) から、新たに
100 個の変数の組: a1 = 1, a2 = 2, ..., a100 = 100
を作りたいのですが、どうすればよろしいのでしょうか?
(新しい変数名における数字は、配列の添え字 k に対応
させたいです。)
素人質問ですみませんが、どうぞよろしくお願いします。

462 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 12:44:32 ]
>>461
それ無理!

強いて言えばポインターをつかうか。
しかし考え方を変えた方がいい。

463 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 13:50:31 ]
>>457
>依存症にした後は骨まで搾り取る
ドカタ量産ですね^^



464 名前:デフォルトの名無しさん [2009/07/22(水) 13:53:02 ]
>> 462 さん
無理ですか・・・。今、A x = b (行列 A は複素三重対角行列) の
固有値問題を解こうと思っているのですが、手元のライブラリ
(NEC 製科学技術計算ライブラリ ASL)は、行列 A やベクトル b が
多次元の場合には対応していないようなのです。

ですので、面倒ですが一旦行列 A(k) を A1, A2, ..., Ak に変換し、
その後に

call subroutine(A1, b1, ...)
call subroutine(A2, b2, ...)
call subroutine(A3, b3, ...)
...
call subroutine(Ak, bk, ...)

と全ての k の場合について毎回サブルーチンを呼ぼうと考えていました。
たとえこのようなことが原理的に可能であったとしても、k が大きい場合には
現実的ではなさそうですね。
多次元の三重対角行列を高速に解くようなライブラリ(非商用含む)が
あればいいのですが、何かありますでしょうか?

465 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 14:25:40 ]
>>464
> >> 462 さん
> 無理ですか・・・。今、A x = b (行列 A は複素三重対角行列) の
> 固有値問題を解こうと思っているのですが、

一瞬、連立方程式に見えた。A の固有値問題を解きたいということで、以下。

> 手元のライブラリ
> (NEC 製科学技術計算ライブラリ ASL)は、行列 A やベクトル b が
> 多次元の場合には対応していないようなのです。

対応していないのが信じられん。そんなもんワシなら金を出したくない。

www.nec.co.jp/APSOFT/SX/asl/BBGMSL.html

の連立1次方程式の例ではそんなことないようだが?


https://www.jss.jaxa.jp/sss/nqsII-web/img/man-r141/ASL/ASL/pdf/1aslsxpj.htm

から適当に探せ。ちょっと見る限りでも普通に使えそうなんだけど。
一般複素行列で考えた方が楽かも?


> 多次元の三重対角行列を高速に解くようなライブラリ(非商用含む)が
> あればいいのですが、何かありますでしょうか?

自分でインストールできるなら、LAPACK か ATLAS という選択肢もある。
既に入ってるかもしれないけどね。速度については知らん。

466 名前:465 mailto:sage [2009/07/22(水) 14:29:55 ]
若しかして、A が多次元というのは、例えば多次元配列 A の各要素が行列という意味?
だったら、どうして良いか分かりません。外部ファイルにデータで置いておいて、1つ
ずつ処理するとか?

467 名前:デフォルトの名無しさん [2009/07/22(水) 15:36:37 ]
テンソルのちょい面倒な計算なのかもな。

まあライブラリが一番得意なところまで
問題をdeductするのは人間の仕事だから・・・・・がんばってね!

468 名前:465 mailto:sage [2009/07/22(水) 16:18:24 ]
>>467
> テンソルのちょい面倒な計算なのかもな。

どうなんでしょうね。最初に

> 今、A x = b (行列 A は複素三重対角行列) の
> 固有値問題を解こうと思っているのですが

とあったので、単に行列 A の固有値問題だと即断しました。この書き方だと
単純な連立1次方程式を解きたいようにも見えるのは私だけでしょうか?

で、その後に

> 手元のライブラリ
> (NEC 製科学技術計算ライブラリ ASL)は、行列 A やベクトル b が
> 多次元の場合には対応していないようなのです

と来るので余計に混乱しました。「多次元の行列」、「多次元のベクトル」と
いう言葉をどういう意味で使っているのか分からない。単純に N×N 行列の N
の値が大きいという意味に解釈しました。

そういうわけで、行列 A の固有値問題を解きたいということと看做しました。

質問者自身が問題を理解していないという恐ろしい事態も有り得ますね…。

469 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 16:36:17 ]
質問者はDimensionとRankを混同しているのではあるまいか。


470 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 16:42:06 ]
むしろ、計算機科学でいうDimesionと、行列のDimensionの違いかな。

471 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 17:17:40 ]
これじゃだめか?

integer :: n, k
complex(8) :: A(n,n,k), b(n,k), v(n,k), det(k)
do i = 1, k
call subroutine(A(1,1,i),b(1,i),v(1,i), det(i))
end do

もしくは

integer :: n, k
complex(8) :: A(n,n,k), b(n,k), v(n,k), det(k)
complex(8) :: A1(n,n), b1(n), v1(n), det
do i = 1, k
A1(:,:) = A(:,:,i) ; b1(;) = b(:,i)
call subroutine(A1(1,1),b1(1),v(1),det)
v(:,i) = v(:) ; det(i) = det
end do

マトリクスやベクトルをあらかじめ何組か準備して、
次々に解きたいだけじゃないかと解釈したが。

472 名前:464 [2009/07/22(水) 17:18:39 ]
皆さん、ご助言頂きありがとうございます。初心者なので (それが免罪符になるとは思えませんが)、
混乱もありくだらない質問をしているとは思いますが、どうぞご容赦ください。

>> 465 さん
>> 若しかして、A が多次元というのは、例えば多次元配列 A の各要素が行列という意味?
言葉足らずですみません。今、数値的に解こうとしている方程式は2 次元複素ポアソン方程式
△f = g です。(△ はラプラス演算子。)
y 方向にフーリエ展開 (f = Σ_{k} f(k, i)*expiky) し、x 方向のみ有限差分法 (分割数 n)
で解こうとしています。各フーリエモードについて以下の n 個の連立方程式が得られますが、

a1_{k, i-1}*f_{k, i-1} + a2_{k, i}*f_{k, i} + a3_{k, i+1}*f_{k, i+1} = g_{k, i}

ここで、

A : n 行 n 列の三重対角行列
x : f_{k, i} を要素に持つ n 次元の列ベクトル
b : g_{k, i} を要素に持つ n 次元の列ベクトル

とすると、各モードについて A x = b を解くことになります。A が多次元と言いましたのは、
このモード数の次元のことを指しておりました。
モード数が 1 の場合には、紹介して頂いた連立 1 次方程式のルーチンを使えば良いと思うのですが、
複数のモード数について解く場合には、毎回サブルーチンを呼ぶ必要があるのでしょうか?
k 個の n 行 n 列の三重対角行列を一度に解く方法があればと思うのですが・・・。


>> 467 さん
ありがとうございます。人間の仕事まで落としたいのですが、甚だ修行不足で・・・頑張ります。


>> 469 さん、470 さん
A を多次元と言ったことは言葉足らずでした。混乱を招きすみません。

473 名前:465 mailto:sage [2009/07/22(水) 17:36:55 ]
>>472

> a1_{k, i-1}*f_{k, i-1} + a2_{k, i}*f_{k, i} + a3_{k, i+1}*f_{k, i+1} = g_{k, i}
>
> ここで、
>
> A : n 行 n 列の三重対角行列
> x : f_{k, i} を要素に持つ n 次元の列ベクトル
> b : g_{k, i} を要素に持つ n 次元の列ベクトル
>
> とすると、各モードについて A x = b を解くことになります。A が多次元と言いましたのは、
> このモード数の次元のことを指しておりました。
> モード数が 1 の場合には、紹介して頂いた連立 1 次方程式のルーチンを使えば良いと思うのですが、
> 複数のモード数について解く場合には、毎回サブルーチンを呼ぶ必要があるのでしょうか?
> k 個の n 行 n 列の三重対角行列を一度に解く方法があればと思うのですが・・・。

この中で未知数は x だとして、それでも a1 や a2 がイミフなので勝手に解釈します。

1 <= k, i <= n として

行列 A は固定する(つまり共通)。
縦ベクトル x_i の第 k 成分を f_{k,i} とする。b についても同様。
行列 X を X = ( x_1, x_2, ..., x_n ) で定義する。==> n×n 行列
行列 B を B = ( b_1, b_2, ..., b_n ) で定義する。==> n×n 行列

AX = B を解くということで終わらんか?要するに X = A^{-1}B で計算できるでしょ?
det A = 0 ではないとして。

線型代数のマトモなテキストには書いている話だと思うケド。



474 名前:465 mailto:sage [2009/07/22(水) 17:44:47 ]
結局、固有値問題ではないのね?

で、私が問題を誤解している可能性は否定しない。莫迦でゴメンね。

475 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 21:09:48 ]
>>472
昔のFORTRANならEQUIVALENCEで処理するところだけど、
ModernなFORTRANでは、どうするべ?

476 名前:464 [2009/07/22(水) 21:59:49 ]
>> 471 さん
> マトリクスやベクトルをあらかじめ何組か準備して、
> 次々に解きたいだけじゃないかと解釈したが。
仰せの通りです。おっしゃる通りに書き換えてみたところ、
無事にライブラリを使うことができました!また、数値解と
解析解との一致も確認しました。
説明不足で大変混乱を招いたことと思いますが、的確なご助言
を頂き、誠にありがとうございました!

>> 465 さん
説明不足なのは申し訳なかったですが、この問題は>> 471 さんが
おっしゃっているように、「複数の行列 A (n × n 行列) と
ベクトル b (n 次元の列ベクトル)の組について、次々に
固有値を求めていく」ということでした。ですので、おっしゃる
ように固有値問題でした。

>> 475 さん
EQUIVALENCE で、考えている配列から特定の要素を抽出することが
できるんですね。これでも同様にできますね。アドバイス頂き
ありがとうこざいました。

477 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 23:23:48 ]
>>471の言っていることは、77時代の基本的テクニック。
教科書には明示的には書いてないが、ちょっと複雑なプログラムするときには必ず使う。


他人のプログラムを見て覚えるのが普通のコースだから、2chで聞いてというのは
今風でもっともかな?

478 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 22:14:20 ]
何でもいいからつくれといわれたので斜方投射のXY座標を求める
プログラムを作ろうとおもったんですが、何度実行してもX座標が負の
値になってしまうのですがなぜでしょうか?
PROGRAM VAT
IMPLICIT NONE
REAL::V,A,T,X,Y
WRITE(*,*)'このプログラムは初速度V、角度A方向に斜方投射された物体のT秒後の位置を求めます'
WRITE(*,*)'重力加速度は9.8m/s2とします'
WRITE(*,*)'初速度V(m/s)を入力してください'
READ(*,*) V
WRITE(*,*)'投射角度A(ラジアン)を入力してください'
READ(*,*) A
WRITE(*,*)'T(秒後)を入力してください'
READ(*,*) T
X=V*COS(A)*T
Y=V*SIN(A)*T-9.80619920*T*T/2.0
OPEN(1,FILE='XandY.TXT')
WRITE(1,*)'X=',X,'(m)','Y=',Y,'(m)'
CLOSE(1)
STOP
END PROGRAM VAT

479 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 22:43:26 ]
>>478
実行結果も貼れ。こちらで試したところ、x 座標は正だった。

あとこの程度のプログラムでわざわざファイルに結果を書き込む理由が分からん。
これは好き好きだけど。


480 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 22:49:05 ]
>>478
予想される原因:角度を弧度法ではなく、度数法で入れた

481 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 23:09:46 ]
>>479
ラジアンで入れましたが、A=3.141593/3.0で入力しました

482 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 23:19:27 ]
>>481
> ラジアンで入れましたが、A=3.141593/3.0で入力しました

それだと 3.141593 で解釈される。結果を比べてみたらいい。
だから cos( A ) = -1.00 となる。

483 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 23:27:34 ]
>>482
ほんとだ・・。π/3を表したい場合はどうすればいいんですか?



484 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 23:31:01 ]
>>483
> >>482
> ほんとだ・・。π/3を表したい場合はどうすればいいんですか?

電卓で計算して出た値を直に突っ込むくらいしか思いつかない。
他には敢えて度数法で入れて、中で弧度法に変換するか。

485 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 23:40:12 ]
>>484
解決しました。
ありがとうございました

486 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 23:59:10 ]
関係ないけど、πって今は3なんだっけ?

487 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 00:21:01 ]
>>486
いや、 3.2だよ
ttp://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%8A%E5%B7%9E%E5%86%86%E5%91%A8%E7%8E%87%E6%B3%95%E6%A1%88

488 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 15:00:29 ]
>>486
内接正六角形で円周を近似すれば3となる。
根拠なしに妙な数を覚えさせるよりましとも考えられる。
逆に、根拠無くともマジックナンバーを覚えさせるのが重要だという考えもある。

近年の教育界の風潮では、素朴な情緒的な根拠付けを求めて、
それ以外(とりあえず覚えとけ的なものや複雑で論理的なもの)を拒否するので
正六角形で円周を近似させる方向に行くのもさもありなんと思える。


3.14で切れてると思っている輩も居るし、有理数だと思っている輩も居る。
素朴なモンテカルロ法でやっても中々小数点以下二桁までは出ない。
理系でも超越数であることを知らないものは多い。

古代エジプトでは円の面積は直径の(1-1/9)=8/9の自乗とされたが、これだと3.16だったか。
電卓で確認してくれw これはエジプト分数(分子は1)的にはかなりいい値。

489 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 15:15:30 ]
実用レベルでは有効数字3桁あればおkって場合が多いから、
3.14と思い込ませるのも悪くないかと思うけど。
数学的素養のない一般人にはそれで十分でしょ。
「円周率?3だろ(キリッ」って言われるよかよっぽど良い。

490 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 15:25:01 ]
背後にあるものを隠蔽して気がつかせないようにする教育は理由があっても気に入らないな
こういう隠蔽が積み重なってあとで取り返しがつかなくなるんだよ

1度でいいからいろいろな性質があることを説明して、ポカーンとしてるところで
「でも今は君たちにはわからんだろうからおよそ3で覚えてください」
とはっきり言ってくれればおk

491 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 15:34:32 ]
>>488
> 理系でも超越数であることを知らないものは多い。

事実として知っては居るが、証明できない。どのような知識が要るんだろう。

492 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 16:08:23 ]
超越数って名前だけは知ってるが(あとπとeがそうらしいということも)、
具体的には代数的数ではない、んだっけ、ってことしか知らないな。

493 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 16:28:45 ]
超越数って、たしか係数が全て有理数な多項式の解ではないものを言うんだっけ



494 名前:デフォルトの名無しさん [2009/08/06(木) 05:28:00 ]
forrtl: severe (67): input statement requires too much data, unit 50

このエラーを解決するには???

495 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 06:25:47 ]
>>494
それだけで解決方法が分かったら素晴らしいエスパーだな。

496 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 10:11:35 ]
>>494
英語を日本語に翻訳してほしいんですか?
forttl: 深刻 (67): INPUT文が要求するデータ量が多すぎます。 ユニット 50

497 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 10:56:06 ]
>>496
その発想は無かった。他に翻訳してくれそうなところ無いかな?


Excite
forrtl: 厳しい(67): 入力文はあまりに多くのデータ、ユニット50を必要とします。

Yahoo!
forrtl:厳しい(67):入力声明は、あまりにたくさんのデータ(単位50)を必要とします

Google
forrtl :重度( 67 ) :入力文、大量のデータが、 50単位が必要


498 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 11:36:05 ]
>>494
READ(50,*)
のように書いてあるところの変数の数を疑え

499 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 23:07:21 ]
>>494
入力データの数が足りない。

500 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 00:21:42 ]
fortran90のallocateに関してですが、メモリ2GBの環境で、
allocatbleの配列A:0.3GB程度、配列B:1.8GB程度、配列C:0.3GB程度を使用するとします。
1)まず、配列Aをallocateし、使用後にdeallocate、
2)次に、配列Bをallocate、使用後に同様にdeallocateを行い
3)最後に、配列Cをallocateし、最終処理を行う。
上記一連の作業であれば、2GBの環境で動作すると考えたのですが、
○実行すると最後の配列Cのallocateでメモリオーバーで落ちてしまいます。
○試しに、EM64Tの環境(メモリ8GB)で実行し、topコマンドでチェックしたところ、
確かに最後の配列Cのallocate部分でメモリ使用量が2.1GB程度となっていることが分かりました。
つまり、配列Bのdeallocateを行っても、この部分のメモリが解放されていないということだと思いますが、
配列Bのallocate自体はできているので、配列Aのdeallocateによるメモリ解放はできているということになると思います。
allocatbleの配列でメモリが解放される場合と、されない場合というのはどのような条件で決まるのでしょうか。
(使用コンパイラーはIntel fortran Version 9.1)

501 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 01:06:54 ]
質問させてください。
silverfrost FTN95 compilerとcpad for FTN77でコンパイルしようとしているのですが、
うまくいきません。以下のエラーメッセージがでます。

コンパイルに失敗しました
ファイル"D:\My Documents\FORTRAN\sample.exe"は存在しません。

メッセージ
*** Invalid executable file suffix - only .EXE is permitted

どこに原因があるか教えていただけないでしょうか。
まだコンパイルすらしたこと無いド初心者ですが、よろしくおねがいします。

502 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 01:52:53 ]
>>501
CPad for FTN77 は名前の通りFTN77用なので、そのままではFTN95では使えない。

どうしてもCPadを使いたければコマンドラインの並びを変えるバッチファイルを間に噛ますか
FTN77をDLしてきて使えば良い。

他のIDEでよければFTN95 Personal Edition に付属のPlatoを使うか(但し日本語未対応)
Visual Studioが付いてきてフリーなFTN95 Expressを使えば良い。

503 名前:501 mailto:sage [2009/08/08(土) 03:22:49 ]
>>502
ありがとうございます。
salfordからFTN77をダウンロードできなくなっているようなのでFTN95が使えれば…と思っていたのですが
やはりそこに無理があったようですね。platoを使うことにします。

連続で申し訳ないのですが、質問させてください。
platoで無事コンパイルはできるようになったのですが、コンパイル後にstart(緑の三角)ボタンを押しても
"Press RETURN to close window . . ."と表示されたコマンドプロンプトが開くだけでプログラムが走りません。
exeファイルは生成されているのでそちらから直接起動することはできるのですが、plato上で実行する方法は無いでしょうか。
また、起動したプログラムウインドウが一瞬で勝手に閉じてしまうのですが、表示させたままにしておくことはできますか。





504 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 04:21:07 ]
>>503
FTN とかいうのを使ったことが無いので、少し調べてみました。で、分かった範囲のことを元に書きますので
結果は保証できません。

●先ず、どのようなプログラムを書いているか。
例えば例題でよくある2つの整数を入力すると、その和、差、積、商を表示するプログラムだとします。ボタ
ンを押してプログラムを実行すると、入力待ちになる筈です。で、2つの整数を入力すると次の処理に移って
計算をし、結果を表示して、プログラムを終了します。その時点で【プログラムとしてやりたいことが全て終
了して、やることが無くなった】ので、窓を閉じてしまう(とエスパー)。

●じゃぁどうしよっか。
計算結果を表示後に、更に何かを実行させる。例えば

続けて計算しますか?(Y/N)

みたいなので、次の動作を入れる。これだと入力待ちになる(ちゃんと書けばね)ので、窓は出たまま。用が
済んだら N を入力して閉じれば良いし、また別の数でやりたかったら Y を入力すれば良い。C の do while 相
当の処理が FORTRAN に有るのかは知らないけど、goto か無限ループで実現できると思う。


というのは駄目ですか?

505 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 11:07:49 ]
お助けお願いします。
「y=x**3-5*(x**2)-2*x+24 のグラフを23行80桁の画面上に描画するプログラムを作成せよ。ただし、次の条件を守れ。
1)描画範囲のx (例 -1 から +6まで)をキーボードから入力し、
その範囲を画面全体に描画せよ
2)描画範囲のグラフが画面に収まるよう、
y軸の描画範囲を自動的に調整せよ。」
という課題をやっているのですが、完全に行き詰りました。
以下にとりあえずやってみたプログラムを
張って行きますので、
皆さんのお力で完成させていただけないでしょうか?
グラフの詳細は↓
ttp://skm.vip2ch.com/-/hirame/hirame051462.jpg
に、はっておきました。
何卒、よろしくお願いします。

506 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 11:08:54 ]
print *,"最小値は?"
read *,readminx
print *,"最大値は?"
read *,readmaxx
!
real function rtransx(i,readminx,readmaxx)
 real,parameter::readminx,readmaxx
 real,parameter::crtminx=1.0,crtmaxx=23
 integer::i
 rtransx=((readmaxx-readminx)/(crtmaxx-crtminx))*(i-crtminx)+readminx
 return
end function rtransx
real function func(x)
 real::x
 func=x**3-5*(x**2)-2*x+24
 return
end function func
integer function transy(y)
 real,parameter::miny,maxy
 real,parameter::crtminy=1.0,crtmaxy=80
 real::y
 transy=(crtmaxy-crtminy)/(maxy-miny)*(y-miny)+crtminy
 return
end function transy

507 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 11:10:07 ]
program
 integer::i,iy
 character*80::line
 real::x,y
 do i=1,23
  line(1:80)=' '
  x=rtransx(i,readminx,readmaxx)
  y=func(x)
  iy=transy(y)
  line(iy:iy)='*'
  print'(a80)',line
 end do
end program

508 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 13:37:15 ]
>>503
> コンパイル後にstart(緑の三角)ボタンを押しても
> "Press RETURN to close window . . ."と表示されたコマンドプロンプトが開くだけでプログラムが走りません。

それでプログラムは走っている。
Plato上でプログラムを走らせると「Plato IDE」というタイトルのウインドウが開いて
そこで画面/キーボードからの入出力を行う。
「Press RETURN to close window . . .」はプログラムが終了すると表示される。
もしそれが望み通りの結果でないのなら、それはあなたのプログラムが間違っているのだ。

> また、起動したプログラムウインドウが一瞬で勝手に閉じてしまうのですが、

エクスプローラ上で実行ファイルをダブルクリックするとそうなる。
コマンドプロンプトから実行すればよい。

509 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 12:40:55 ]
fortran最高!
今日で人生が変わった!

510 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 14:34:43 ]
>>509
地獄に片足つっこんだん?

511 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 15:14:56 ]
>>509
また犠牲者が一人・・・(´;ω;`)

512 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 19:25:07 ]
あの、>>505です・・・
どなたか、アドバイスください。
fortran90を使っています。

513 名前:501 mailto:sage [2009/08/11(火) 01:11:27 ]
>>504,508
レスありがとうございます!
アドバイスを参考にいろいろと試してみたいと思います。
まずはプログラムの書き方の基本から身につけないといけませんね。



514 名前:デフォルトの名無しさん [2009/08/11(火) 03:37:27 ]
Fortranでどうにもならん部分だけCで書いてリンクすればいいしな。
Fortranでやりにくい(出来ないわけではないけどシステム依存が強すぎるからいやだ)部分って
Argumentをコマンドラインから取り込むとか、バイナリファイルの読み込みくらいだけど。

・・・ってf77の話だな。F90や95だとどうなってるんだろう?

515 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 14:27:51 ]
>>514
> Argumentをコマンドラインから取り込むとか、バイナリファイルの読み込みくらいだけど。

どっちも普通にできたと思うけど、環境依存大きいの?バイナリファイルの読み書きに関しては C と Fortran では
違いがあるので、成る可く Fortran で済ませてしまった方が良いと思うが…。

ただ市販の Fortran の本でこの辺を説明しているものは見た事が無い。あと倍精度実数も。科学技術計算云々とい
う割にその辺手抜きなのが解せん。そ〜いやプリプロセッサの話も書いてないな。洋書は知らんけど。

516 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 22:12:23 ]
>>514
STREAM I/O や コマンドライン引数の扱いはFortran2003で規格に入って統一された。
まぁそれ以前もベンダー依存の機能で実現できたが。

>>515
浮動小数点も世界がIEEE754で天下統一されて、かつその機能をFortran2003規格で
Fortran内部からアクセス出来るようになっている。

517 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 02:10:53 ]
>>512
いきなり画面に書かずに、まず画面に対応する文字配列に書くといいと思う。
そうすると、座標軸とかキャプションのたぐいも別々に処理できる。
最後に配列を一括で出力する。
昔のマイコンのキャラクター用ビデオRAMの感じ?って言ってもわかんないかなw

お盆までまってくれ。

518 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 12:11:00 ]
>>517
> お盆までまってくれ。

アンタ優しいな。


519 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 14:14:45 ]
このスレには相当のベテランがいるんだろうな
せっかくだから、本とか出版してみたらどうだ?
10万までなら出すw

520 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 14:22:30 ]
>>516
これって、浮動小数点のビット配列とか丸め誤差が、
以前は処理系依存だったってこと?

>>515
処理系依存のものは本じゃなくて、
コンパイラのマニュアルを見るしかないんだろうね。

521 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 15:09:35 ]
>>520
>これって、浮動小数点のビット配列とか丸め誤差が、
>以前は処理系依存だったってこと?
処理系依存というか、CPUアーキテクチャに依存していたでしょ。
太古のIBM S/360の浮動小数点とか、CDC 7600の浮動小数点とか。


522 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 18:06:31 ]
>>521
そうなんですか。勉強になります。

ちょいとググってみたら、
S/360、CDC7600は60年代のメインフレームですね。
(初めてコンピュータ・アーキテクチャの概念が使われたとか、
 初めてこれまでモニタと呼ばれていたOSが、
 360からOSと呼ばれるようになったとか書いてある)

IEEE754が1985年だから、S/360からおよそ20年後で、
それからさらに20年ぐらいたって、Fortran2003に導入されたということですか。

それはそうと、
処理系がCPUアーキテクチャに特化してるんだから、
処理系依存という言い方はまずいんでしょうか?

523 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 19:16:53 ]
>>522
10年前くらいまでは、浮動小数点はベンダー固有のものだった。
IBM、CRAY、DEC、NECとかはそれぞれに固有のフォーマットを持っていた。
IEEEフォーマットが支配的になったのは90年代後半くらいでは無いかな?
SX−3か4あたりは、IEEE(Big,Little Endian)、IBM、CRAYの4つのフォーマットに対応していた記憶がある。

数値コプロがCPUに標準装備される前のパソコンの浮動小数演算はソフトウェア毎に
実装が異なっていて、しかも精度はメチャクチャというのが普通。


Fortran90に精度に関する関数が多いのは、IEEEが普及する前だったため。



524 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 03:06:38 ]
>>512
最小値は?
-1
最大値は?
6
| *
|
| *
| *
|
| *
|
| *
| *
| *
|
************** *
*** | *** *
| *** *
| *** *
| *** *
| ** *
| *** **
| ** *
| *** **
| *** **
| **** ****
-----------|----------------------------------**********------------------------
続行するには何かキーを押してください . . .
>>524 セルフアンカー

525 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 03:12:00 ]
>>505
寝る前に全く考えずに作ったし、バグ取りしてないw 参考程度に
正直、自分で満足できないww でも休みに遊びに行くことになったので。
間違ってたら、ごめんw でも賠償はしない。

MODULE m_screen
IMPLICIT NONE
!
INTEGER, PARAMETER :: nx = 80, ny= 23
CHARACTER(LEN = 1) :: screen(nx, ny) = ' '
REAL :: valx(nx), valy(nx)
!
CONTAINS
!-----------------------------------
SUBROUTINE calc_range(xmin, xmax, fun)
REAL, INTENT(IN) :: xmin, xmax
INTERFACE
REAL FUNCTION fun(x)
REAL, INTENT(IN) :: x
END FUNCTION fun
END INTERFACE
INTEGER :: i
DO i = 1, nx
valx(i) = (xmax - xmin) * (i - 1) / (nx - 1) + xmin
valy(i) = fun( valx(i) )
END DO
RETURN
END SUBROUTINE calc_range

526 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 03:12:52 ]
!-----------------------------------
INTEGER FUNCTION iposy(i)
INTEGER, INTENT(IN) :: i
iposy = NINT( ( valy(i) - MINVAL(valy) ) / ( MAXVAL(valy) - MINVAL(valy) ) * (ny - 1) ) + 1
RETURN
END FUNCTION iposy
!-----------------------------------
SUBROUTINE plot_screen()
INTEGER :: ix, iy
DO ix = 1, nx
iy = iposy(ix)
screen(ix, iy) = '*'
END DO
RETURN
END SUBROUTINE plot_screen
!-----------------------------------
SUBROUTINE print_screen()
INTEGER :: iy
DO iy = ny, 1, -1
PRINT '(80A1)', screen(:, iy)
END DO
RETURN
END SUBROUTINE print_screen
!-----------------------------------

527 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 03:13:44 ]
SUBROUTINE plot_xaxis() !
INTEGER :: ix, iy, k(1)
IF ( MINVAL(valy) * MAXVAL(valy) < 0 ) THEN ! cross x-axis
k = MINLOC(valy)
iy = iposy(k(1))
DO ix = 1, nx
screen(ix, iy) = '-'
END DO
END IF
RETURN
END SUBROUTINE plot_xaxis
!-----------------------------------
SUBROUTINE plot_yaxis() !
INTEGER :: ix(1), iy
IF ( MINVAL(valx) * MAXVAL(valx) < 0 ) THEN ! cross y-axis
ix = MINLOC(ABS(valx))
DO iy = 1, ny
screen(ix(1), iy) = '|'
END DO
END IF
RETURN
END SUBROUTINE plot_yaxis
!-----------------------------------
END MODULE m_screen

528 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 03:14:27 ]
!=====================================
PROGRAM graph
USE m_screen
IMPLICIT NONE
REAL :: read_minx, read_maxx
!
PRINT *, "最小値は?"
READ *, read_minx
PRINT *, "最大値は?"
READ *, read_maxx
!
CALL calc_range(read_minx, read_maxx, func)
CALL plot_xaxis()
CALL plot_yaxis()
CALL plot_screen()
CALL print_screen()
STOP
CONTAINS
!-------------------------------------
REAL FUNCTION func(x)
REAL, INTENT(IN) :: x
func = x**3 - 5 * x**2 - 2 * x + 24
RETURN
END FUNCTION func
!-------------------------------------
END PROGRAM graph

うざくて、ごめんw 

529 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 03:38:49 ]
ごめw バグってるw X軸がちゃんと書かれない。

SUBROUTINE plot_xaxis()
INTEGER :: ix, iy, k(1)
IF ( MINVAL(valy) * MAXVAL(valy) < 0 ) THEN ! cross x-axis
k = MINLOC(ABS(valy))
        〜〜〜〜〜〜

ABS( ) が抜けてた。入れといて。

連続投稿規制でかけない
汚しすまそ

530 名前:505,512 mailto:sage [2009/08/13(木) 10:55:12 ]
>>524>>529さん
ありがとうございました!
凄いです・・・
このスレは猛者の集まりですw
実行してみたところ、完璧に動きました。
まだまだ、私が知らない構文がいっぱいあるんですね!
これを元に、またちょっと勉強してみたいと思います。
本当に、ありがとうございました。

531 名前:デフォルトの名無しさん [2009/08/17(月) 05:06:52 ]
まったく関係ないが・・・
gfortranをVistaにいれてみた。
gfortran関連のpathを一番前に持ってこないと、実行ファイル作成リンクで落ちた。
ん〜、なんだか。まあ自宅PCであそぶには十分か。OpenMPできるし。

532 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 20:18:12 ]
Fortran の話ではないけど、PATH が異様に長いときに PATH の末尾に追加すると上手く動かない
という話は聞いたことがある。Windows は色々とメンドクサイよね。もう使ってないから知らな
いけど。

533 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 02:41:35 ]
autoexe.bat なくしたのは失敗な気もするなあ。
せめてpath管理だけはテキストファイルで「も」出来る仕様を残しておいてほしかった。
Ghostscript、Latex入れると自然とパスが長くなるし。

Fortranの話でないけど・・・



534 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 22:55:32 ]
まあ、バッチファイルとかsetxとか使えばそれなりに管理できる > PATH

535 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 00:01:45 ]
でも若い人はそういうことを何処で学ぶんだろう。Windows 嫌いで使わない私には
ほぼどうでも良いことだが。

536 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 03:38:47 ]
>>534
そうそう。自分はgfortran用とlatex用の2つバッチ作ってる。Me以降はpathの管理が面倒だしね。
・・・・・なんだかwin3.1かDOS5.0の頃に戻ったようだw
setx.exe は使いかたがよくかわんないから使ってないけど、便利?
>>535
Win嫌いな人だとかえってPath関連は熱心になるんじゃないかなぁ?
どうだろう。

537 名前:536 mailto:sage [2009/08/20(木) 03:42:55 ]
gfortran -Wall foo.for
で文句を言ってこなくなるまでソースを訂正すると、
他のシステムでもちょびっと速くなる気がする。気がするだけかもしれないけど。
gfortranって中で何やってるのかいまいちよくわからん。

538 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 11:06:25 ]
>>537
-Wall の意味を考えると、気のせいだと思う。でも最低限 -Wall は付けている。

539 名前:デフォルトの名無しさん [2009/08/21(金) 13:39:17 ]
vineにintel fortran Compilerとmkl10.2.1インストールして、
ユーザーズガイド通りに環境変数を設定。

でlapac95をビルドした後サンプルのコードをコンパイルしようとするとエラーでます。


ifort gesv.f90 -L -I-lmkl_lapack95 -lmkl_intel -lmkl_thread -lmkl_core -lguid -lpthread
gesv.f90(31): error #7002: Error in opening the compiled module file. Check INCLUDE paths. [MKL95_PRECISION]
USE MKL95_PRECISION, ONLY: WP => SP
----------^
gesv.f90(32): error #7002: Error in opening the compiled module file. Check INCLUDE paths. [MKL95_LAPACK]
USE MKL95_LAPACK, ONLY: GESV
----------^
gesv.f90(39): error #6683: A kind type parameter must be a compile-time constant. [WP]
REAL(WP), ALLOCATABLE :: A(:,:), AA(:,:), B(:,:), BB(:,:)
-----------^
gesv.f90(64): error #6406: Conflicting attributes or multiple declaration of name. [GESV]
CALL GESV( A, B )
-----------^
gesv.f90(71): error #6406: Conflicting attributes or multiple declaration of name. [GESV]
CALL GESV( AA, BB(:,1), IPIV, INFO )
-----------^
gesv.f90(31): error #6581: Unresolved rename. [WP]
USE MKL95_PRECISION, ONLY: WP => SP
---------------------------------^
gesv.f90(32): error #6580: Name in only-list does not exist. [GESV]
USE MKL95_LAPACK, ONLY: GESV
------------------------------^
compilation aborted for gesv.f90 (code 1)


何がいけないんでしょうか?よろしくお願いします。

540 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 14:23:24 ]
>>539
>Error in opening the compiled module file. Check INCLUDE paths. [MKL95_PRECISION]


541 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 14:26:04 ]
>>539
> vineにintel fortran Compilerとmkl10.2.1インストールして、
> ユーザーズガイド通りに環境変数を設定。
>
> でlapac95をビルドした後サンプルのコードをコンパイルしようとするとエラーでます。

lapack95 は自前でビルド?


> ifort gesv.f90 -L -I-lmkl_lapack95 -lmkl_intel -lmkl_thread -lmkl_core -lguid -lpthread

gfortran しか使わんので、この辺は知らん。



> -----------^
> gesv.f90(64): error #6406: Conflicting attributes or multiple declaration of name. [GESV]
> CALL GESV( A, B )
> -----------^
> gesv.f90(71): error #6406: Conflicting attributes or multiple declaration of name. [GESV]
> CALL GESV( AA, BB(:,1), IPIV, INFO )
> -----------^

これは明らかに可笑しくないか?そんな名前のサブルーチンは lapck にあるかどうか知らんが。
ウチに入れた lapack だと少なくとも man では引っ掛からなかった。


542 名前:デフォルトの名無しさん [2009/08/21(金) 14:28:36 ]
>>540
/opt/intel/mkl/10.2.1.017/include/にINCLUDE path通してます。
コンパイル時に必要なファイルは.modのファイルですか?

/opt/intel/mkl/10.2.1.017/include/32の中に
lapack95関係の.modのファイルが入ってるんですがそっちにパス通してもうまくいきませんorz

543 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 14:30:33 ]
>>542
どうやって PATH を通してるの?



544 名前:デフォルトの名無しさん [2009/08/21(金) 14:37:34 ]
>>541
lapack95のビルドもユーザーズガイドにあった通りにしたんで、たぶんできてるはずです。
自前というのはどういう意味ですか?

opt/intel/mkl/10.2.1.017/examples/lapack95/source/内のサンプルコードなんでサブルーチンはあるはず?

545 名前:デフォルトの名無しさん [2009/08/21(金) 14:42:34 ]
export MKLROOT="/opt/intel/mkl/10.2.1.017"

if [ -z "${INCLUDE}" ]
then
export INCLUDE="${MKLROOT}/include"
else
export INCLUDE="${MKLROOT}/include:$INCLUDE"
fi




/opt/intel/mkl/10.2.1.017/tools/environment/mklvars32.shを実行すれば、
環境変数設定されるみたいにユーザーズガイドに書いてあったんですけど、
実行しても設定されないようなので上の文を.bash_profileにつけたしました。

546 名前:541 mailto:sage [2009/08/21(金) 14:48:44 ]
>>544
> >>541
> lapack95のビルドもユーザーズガイドにあった通りにしたんで、たぶんできてるはずです。
> 自前というのはどういう意味ですか?

公式サイトからソースを拾って来て、自分で make すること。私はそれで lapack を入れてる。
特に何もしなければ lapack.a、blas.a というファイルが出来る。で、これをリンクすると。
lapack95 はやったことがない。



と、ここまで書いてぐぐってみた。

basewall.kuciv.kyoto-u.ac.jp/dokuwiki/doku.php?id=ifort

なんかどう?

547 名前:デフォルトの名無しさん [2009/08/21(金) 14:57:32 ]
>>546
ソースは元々あって、それを自分でmakeしました。
リンクするっていうのはコンパイルのときの例えば-lmkl_lapack95とかのことですか?

そのホームページも見てやってみたんですが・・・
もうちょっとやってみます!!

548 名前:541 mailto:sage [2009/08/21(金) 15:11:42 ]
>>547
> >>546
> ソースは元々あって、それを自分でmakeしました。
> リンクするっていうのはコンパイルのときの例えば-lmkl_lapack95とかのことですか?

そです。

それはそうと

echo $INCLUDE

の結果って、問題ないですか?設定さえチャンと出来ていれば、後はマニュアル通りにしたら
出来るはずなんですけどね。そのマニュアルってフリーで転がってんのかな。

エラーの中身見たら設定が出来てないようにも見えるけど…気のせいかな?


>>541
> これは明らかに可笑しくないか?

この部分、実は問題無いみたいですね。でもこれ、私にはとっても変態な仕様にしか見えない。
90 は余り使わないから、そう思うのかもしれない。そろそろ 90 もリハビリした方が良さそう。
再帰を書けるのは知っているけど書き方知らないし。


探せば他にも出て来ると思いますヨ。> 纏めページ

549 名前:デフォルトの名無しさん [2009/08/21(金) 15:30:57 ]
echo $INCLUDEの結果は /opt/intel/mkl/10.2.1.017/include
これで大丈夫ですか?

www.ncsa.uiuc.edu/UserInfo/Resources/Hardware/SGIAltix/Doc/mkl10/doc/userguide.pdf
マニュアルこれです。4章のAutomating the Processでmklbars32.sh実行すればいいとあるのですが、
実行してもダメみたいで、mklbars32.sh内のソースを.bash_profileにコピペしました。

550 名前:541 mailto:sage [2009/08/21(金) 16:03:10 ]
書いてたら凄く長くなりました。他の皆さんスイマセン。

>>549
> echo $INCLUDEの結果は /opt/intel/mkl/10.2.1.017/include
> これで大丈夫ですか?

それが正しいかどうかは、mklvars32.sh が無いのでなんとも。晒さなくていいですよ。
やると問題になりそうですし。


あと、気になったんですが、コンパイル時のコマンドの書式はどこから拾って来たのですか?
私が先に挙げたリンク先のサンプルでは

$ ifort /opt/intel/mkl/10.1.0.015/examples/lapack95/source/gesv.f90
-L/opt/intel/Compiler/11.0/074/mkl/examples/lapack95/lib/em64t/
-I /opt/intel/Compiler/11.0/074/mkl/examples/lapack95/lib/em64t
-lmkl_lapack95 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -lguide -lpthread

$ ./a.out < /opt/intel/Compiler/11.0/074/mkl/examples/lapack95/data/gesv.d

となっています。$ はプロンプトです。ここでは見易さのために改行して引用していますが、実際は改行無し。
バージョンのことはキニシナイ。

-lmkl_lapack95 ということは、libmkl_lapack95.a というファイルが何処かに在る。
多くの場合は -L で指定しているディレクトリになる。


(続く)

551 名前:541 mailto:sage [2009/08/21(金) 16:06:20 ]
(続き)
>>549
> 4章のAutomating the Processでmklbars32.sh実行すればいいとあるのですが、
> 実行してもダメみたいで、mklbars32.sh内のソースを.bash_profileにコピペしました。

そんなこと書いてないみたいですが?

In the above commands, mklvars<arch> stands for each of mklvars32, mklvarsem64t
or mklvars64.

だから

. <absolute_path_to_installed_MKL>/tools/environment/mklvars<arch>.sh

の mklvars<arch>.sh は mklvars32.sh か mklvarsem64t.sh に読み替えればいいのでは?最初の . は必要ですヨ。


552 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 16:23:33 ]
www.obihiro.ac.jp/~suzukim/masuda/ifc_lapack31.html

この辺も何かの参考にはなるかも?

というか気になってたんですけど、身近に質問できる人は居ないんでしょうか?
学生だと思うんだけどなぁ(何となく)。

## 2ch で聞くなよ、とかいうことではありません。念のため。

553 名前:デフォルトの名無しさん [2009/08/21(金) 16:51:46 ]
>>550
-Lで指定しているディレクトリにパスを通してる(echo $PATHで表示される)ので、
-Lと-lの後のフォルダの指定は省いてるんですがダメですか?

コンパイルのコマンドは挙げていただいたサイトのをちょっといじって書きました。
ifort gesv.f90 -L -I-lmkl_lapack95 -lmkl_intel -lmkl_thread -lmkl_core -lguid -lpthread

>>551
最初の.が抜けてました。ありがとうございます。

>>552
linuxいじってる奴もfortran使いもいないんですwwwwwwwwwwwwww

やっぱりエラーなりますorz
何がいけないのか・・・



554 名前:541 mailto:sage [2009/08/21(金) 19:18:08 ]
>>553
> >>550
> -Lで指定しているディレクトリにパスを通してる(echo $PATHで表示される)ので、
> -Lと-lの後のフォルダの指定は省いてるんですがダメですか?

ダメです。環境変数 PATH は ls や gcc、make などのコマンドが在るディレクトリを登録するものです。
なので、ここに何を書いていようとライブラリは無関係。普通はね。


> >>552
> linuxいじってる奴もfortran使いもいないんですwwwwwwwwwwwwww
>
> やっぱりエラーなりますorz
> 何がいけないのか・・・

-L などを抜いたことが原因でしょうね。それだけが原因ではない気もしますが。コンパイラによって違います
が、-v または -V というオプションを付けてコンパイルすると、ライブラリなどの検索ディレクトリを表示し
ます。コンパイルもしますが、そういうものを画面に表示します。まぁ見てみると良いと思います。

で、デフォルトで登録されていない所に在るライブラリなどはコンパイル時に自分で指定しないとリンクして
くれません。しなかった場合は、そんなもの無いということでコンパイルに失敗します。例えば私の環境だと
/opt/lib に liblapack.a と libblas.a が在ります。標準的には /opt/lib なんて登録されませんし、登録する方法
も知りません。lapack のサブルーチンを使っているソースをコンパイルするときは

$ gfortran sample.F90 -L/opt/lib -llapack -lblas

とします。こうすることで、/opt/lib に在る liblapack.a と libblas.a をリンクするしろ、と指定しています。

555 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 19:38:19 ]
スレ違いで恐縮ですが、どのライブラリにどのサブルーチンや関数が入っているか調べる方法ってありますか?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<345KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef