program test implicit none integer, parameter :: ndata = 400 real :: a(18, ndata), x(3, ndata), y(3, ndata) real :: s, sx, sy, tx(ndata), ty(ndata) integer :: i, j, icol
character (len = 20) :: filenm write(*,'(a,$)') 'File Name : ' read(*,'(a)') filenm open(11,file= TRIM(filenm) )
open(12, file = 'input2.txt') open(13, file = 'input3.txt') ! do i = 1, 6 ! skip 6 lines read(11, *) end do do i = 1, ndata read(11, *) (a(j, i), j = 1, 18) end do
! exel data x do i = 1, ndata read(12, *) (x(j, i), j = 1, 3) end do 0009デフォルトの名無しさん2012/08/17(金) 21:16:18.67 ! exel data y do i = 1, ndata read(12, *) (y(j, i), j = 1, 3) end do ! do i = 1, ndata tx(i) = (i * 50.0 - 25.0) * x(3, i) ty(i) = (i * 50.0 - 25.0) * y(3, i) end do
print *, 'input column ' read *, icol sx = sum( tx * a(icol, :) ) sy = sum( ty * a(icol, :) ) s = sx / sy
write(*,'(a,$)') 'File Name : '
stop end program test 0010デフォルトの名無しさん2012/08/17(金) 21:38:35.93 write(*,'(a,$)') 'File Name : ' read(*,'(a)') filenm open(14,file=filenm)
write(*,*) 'result=', s ! <--だから結果を書きだせってw
close(14) 0011デフォルトの名無しさん2012/08/17(金) 21:39:27.86 write(14,*) 'result=', s ! <--だから結果を書きだせってw
今日もかれこれ5時間くらいネカフェにいますが、 そろそろおいとまします。自転車こいで橋を越えた甲斐がありました。 また色々教えてください。 0017122012/08/17(金) 23:46:42.05 最後にプログラム全体を書き込ませてください。 program test implicit none integer, parameter :: ndata = 400 real :: a(18, ndata), x(3, ndata), y(3, ndata) real :: s, sx, sy, tx(ndata), ty(ndata) integer :: i, j, icol
character (len = 20) :: filenm_in, filenm_out write(*,'(a,$)') 'File Name : ' read(*,'(a)') filenm_in open(11,file= TRIM(filenm_in) )
open(12, file = 'input2.txt') open(13, file = 'input3.txt') ! do i = 1, 6 ! skip 6 lines read(11, *) end do do i = 1, ndata read(11, *) (a(j, i), j = 1, 18) end do
! exel data x do i = 1, ndata read(12, *) (x(j, i), j = 1, 3) end do ! exel data y do i = 1, ndata read(12, *) (y(j, i), j = 1, 3) end do 0018122012/08/17(金) 23:47:39.05 ! do i = 1, ndata tx(i) = (i * 50.0 - 25.0) * x(3, i) ty(i) = (i * 50.0 - 25.0) * y(3, i) end do
print *, 'input column ' read *, icol sx = sum( tx * a(icol, :) ) sy = sum( ty * a(icol, :) ) s = sx / sy
上手く説明できませんがお願いします。 0021デフォルトの名無しさん2012/08/22(水) 00:48:53.83 program test implicit none integer, parameter :: ndat = 100 real :: x(4, ndat), y(ndat) open(10, file = 'a.txt', status = old) do i = 1, ndat read(10, *) x(:, i) end do y = x(2, :) * x(4, :) ! B * D print *, y stop end program test 0022122012/08/23(木) 20:46:06.15 以前こちらの掲示板でお世話になった>>12です。お久しぶりです。 すみませんが、壁にぶち当たってしまいまして、お力をお貸しください。
データを一度に計算したいというなら、大した計算量ではないので 計算は全データについて実行して、出力の所で選択するようにすればよい。 そのために、配列を拡張しておく必要がある。s, sx, sy
program test implicit none integer, parameter :: ncolumn = 18, ndata = 400 real :: a(ncolumn, ndata), x(3, ndata), y(3, ndata) real :: s(ncolumn), sx(ncolumn), sy(ncolumn), tx(ndata), ty(ndata) integer :: i, j, icol 0027デフォルトの名無しさん2012/08/24(金) 16:56:50.09 ! exel data y <----EXCELな do i = 1, ndata read(13, *) (y(j, i), j = 1, 3) end do close(11) close(12) close(13)
do i = 1, ndata tx(i) = (i * 50.0 - 25.0) * x(3, i) ty(i) = (i * 50.0 - 25.0) * y(3, i) end do do i = 1, ncolumn sx(i) = sum( tx * a(i, :) ) sy(i) = sum( ty * a(i, :) ) end do s = sx / sy
write(*,'(a,$)') 'File Name : ' read(*,'(a)') filenm_out open(14,file=filenm_out) write(14, *) 'input file name', filenm_in write(14, *) 'column no.', icol write(14,*) 'result=', s(3:18:3) ! <--結果を書き出すプログラム。 close(14) stop end program test 0028デフォルトの名無しさん2012/08/25(土) 00:14:21.45 > i do i = 1, ndata tx(i) = (i * 50.0 - 25.0) * x(3, i) ty(i) = (i * 50.0 - 25.0) * y(3, i) end do
↑強いて言えばこの実数計算に i が入ることが気に入らないんじゃないか 整数*実数は実数計算になるはずなので的外れだが。
> エクセルデータxを組み込んだ計算式:sx=s+(real(i)*50.0-25.0)*?*x3 > エクセルデータyを組み込んだ計算式:sy=s+(real(i)*50.0-25.0)*?*y3 -----------------------------------↑ この s って sx か sy の誤記?それとも別の変数? 0029デフォルトの名無しさん2012/08/28(火) 04:12:53.24>>27>>28 返信遅くなってすみません。家の方で一週間以上経っても書き込み規制が解除されないみたいで、 またネカフェからです。月曜日に現状の報告会があったので、準備やらなんやらで閲覧が 遅れてしまい、申し訳ありません。 毎回教えていただきありがとうございます。
>この s って sx か sy の誤記?それとも別の変数? この質問なんですが、私の持っているfortranの本にシグマ(Σ)を使った合計値の算出のプログラム例に記されていたので そのまま作ったものです。ですので、この形で載っていただけので、そのまま使っています。sは一応s=s+1みたいな感じで s=1とすると右辺に数値が代入され、左辺にs=2と計算させるような感じで入力した値を表現したつもりです。 0030122012/08/28(火) 04:34:43.09 以下に順序を変更してみたプログラムデータをコピペします。
program test implicit none integer, parameter :: ncolumn = 18, ndata = 400 real :: a(ncolumn, ndata), x(3, ndata), y(3, ndata) real :: s(ncolumn), sx(ncolumn), sy(ncolumn), tx(ndata), ty(ndata) integer :: i, j, icol
character (len = 20) :: filenm_in, filenm_out write(*,'(a,$)') 'File Name : ' read(*,'(a)') filenm_in open(11,file= filenm_in)
do i = 1, 6 ! skip 6 lines read(11, *) end do
do i = 1, ndata read(11, *) (a(j, i), j = 1, 18) end do close(11)
open(12, file = 'mydata1.csv') ! excel data x do i = 1, ndata read(12, *) (x(j, i), j = 1, 3) end do close(12) 0031122012/08/28(火) 04:41:41.98 ! excel data y open(13, file = 'mydata2.csv') do i = 1, ndata read(13, *) (y(j, i), j = 1, 3) end do close(13)
do i = 1, ndata tx(i) = (i * 50.0 - 25.0) * x(3, i) ty(i) = (i * 50.0 - 25.0) * y(3, i) end do do i = 1, ncolumn sx(i) = sum( tx * a(i, :) ) sy(i) = sum( ty * a(i, :) ) end do s = sx / sy
write(*,'(a,$)') 'File Name : ' read(*,'(a)') filenm_out open(14,file=filenm_out) write(14, *) 'input file name', filenm_in write(14, *) 'column no.', icol write(14,*) 'result=', s(3:18:3) ! <--結果を書き出すプログラム。 close(14) stop end program test
こういう順序の違いで計算結果って違ってきますか? あと、最近ビルドした後コンパイルエラーばかり出てしまいますが、workplaceは一回ごとにこちらもcloseしないと 前のデータが残ってしまい、正しい計算ができない原因と考えられますか? すみません、どんなことでも結構なので教えていただけると幸いです。よろしくお願いします。 0032122012/08/29(水) 16:39:14.45 program test implicit none integer, parameter :: ncolumn = 18, ndata = 400 real :: a(ncolumn, ndata), x(3, ndata), y(3, ndata) real :: s(ncolumn), sx(ncolumn), sy(ncolumn), tx(ndata), ty(ndata) integer :: i, j, icol
character (len = 20) :: filenm_in, filenm_out write(*,'(a,$)') 'File Name : ' read(*,'(a)') filenm_in open(11,file= filenm_in)
open(12, file = 'mydata1.csv') open(13, file = 'mydata2.csv') !メモ帳 do i = 1, 6 ! skip 6 lines read(11, *) end do
do i = 1, ndata read(11, *) (a(j, i), j = 1, 18) end do ! ! exel data x do i = 1, ndata read(12, *) (x(j, i), j = 1, 3) end do 0033122012/08/29(水) 16:39:45.01 ! excel data y do i = 1, ndata read(13, *) (y(j, i), j = 1, 3) end do close(11) close(12) close(13)
do i = 1, ndata tx(i) = (i * 50.0 - 25.0) * x(3, i) ty(i) = (i * 50.0 - 25.0) * y(3, i) end do
do i = 1, ncolumn sx(i) = sum( tx * a(i, :) ) sy(i) = sum( ty * a(i, :) ) end do s = sx / sy
write(*,'(a,$)') 'File Name : ' read(*,'(a)') filenm_out open(14,file=filenm_out) write(14, *) 'input file name', filenm_in write(14, *) 'column no.', icol write(14,*) 'result=', s(3:18:3) ! <--結果を書き出すプログラム。 close(14) stop end program test
-------------------Configuration: 2012 - Win32 Debug-------------------- Compiling Fortran... E:\2012.f90 E:\2012.f90(22): error FOR2934: lexical error: Invalid character E:\2012.f90(22): error FOR3852: syntax error E:\2012.f90(22): error FOR2934: lexical error: Invalid character E:\2012.f90(22): error FOR2934: lexical error: Invalid character E:\2012.f90(22): error FOR2934: lexical error: Invalid character E:\2012.f90(22): error FOR2934: lexical error: Invalid character E:\2012.f90(22): error FOR2934: lexical error: Invalid character E:\2012.f90(24): error FOR3541: duplicated DO index variable - I E:\2012.f90(29): error FOR3541: duplicated DO index variable - I E:\2012.f90(36): error FOR3541: duplicated DO index variable - I E:\2012.f90(41): error FOR3541: duplicated DO index variable - I E:\2012.f90(55): error FOR3596: missing END DO statement E:\2012.f90(55): warning FOR4265: symbol ICOL referenced but not set Error executing fl32.exe. 012.exe - 12 error(s), 1 warning(s) 0035デフォルトの名無しさん2012/08/29(水) 17:11:03.66>>34 do i = 1, ndata read(11, *) (a(j, i), j = 1, 18) end do ! ↑ ここに全角文字の空白が入っている。それでエラーが出ている。 削れ。 残りのエラーは、それを直せば消える。
あんま全角文字は使わない方がいい。 0036デフォルトの名無しさん2012/08/29(水) 17:48:31.37 lexical error: Invalid character
エラーメッセージの意味を調べておくといいよ 0037122012/08/29(水) 19:26:06.86 program test implicit none integer, parameter :: ncolumn = 18, ndata = 400 real :: a(ncolumn, ndata), x(3, ndata), y(3, ndata) real :: s(ncolumn), sx(ncolumn), sy(ncolumn), tx(ndata), ty(ndata) integer :: i, j
character (len = 20) :: filenm_in, filenm_out write(*,'(a,$)') 'File Name : ' read(*,'(a)') filenm_in open(11,file= filenm_in)
open(12, file = 'waterdata.csv') open(13, file = 'polystyrene.csv') !メモ帳 do i = 1, 6 ! skip 6 lines read(11, *) end do
do i = 1, ndata read(11, *) (a(j, i), j = 1, 18) end do ! exel data x do i = 1, ndata read(12, *) (x(j, i), j = 1, 3) end do 0038122012/08/29(水) 19:28:30.86 ! excel data y do i = 1, ndata read(13, *) (y(j, i), j = 1, 3) end do close(11) close(12) close(13)
do i = 1, ndata tx(i) = (i * 50.0 - 25.0) * x(3, i) ty(i) = (i * 50.0 - 25.0) * y(3, i) end do
do i = 1, ncolumn sx(i) = sum( tx * a(i, :) ) sy(i) = sum( ty * a(i, :) ) end do s = sx / sy
なのでこの部分を変更すればいいでしょうか? do i = 1, ndata read(11,*)!ここに一個整数のみ読み込まないように適当な変数をつけるべきでしょうか? read(11, *) (a(j, i), j = 1, 18) end do ! exel data x do i = 1, ndata read(12, *) (x(j, i), j = 1, 3) end do 0041122012/08/29(水) 20:19:49.56>>36
返信おくれてすみません。 lexical error :invalid character 語彙の 間違い:不正文字
オペレーターの入力ミスということでしょうか? 0042デフォルトの名無しさん2012/08/29(水) 20:42:53.64 real :: dummy
プログラミング自体が初めてなので右も左もわからない状態だったのですが、 みなさんのおかげで金輪際ここに来ることはないと思います。 長々とお付き合いいただきありがとうございました。 0045デフォルトの名無しさん2012/08/29(水) 21:48:48.84 > FOR4265: symbol ICOL referenced but not set 参照しているけど値が入ってない、だとさ。
elemental pure real(8) function FD(w) implicit none integer :: i real(8), intent(in) :: w FD = exp( - w ) end function FD
これでメインルーチン側で x = FD( w ) と呼んでも do i = 1, 10 x(i) = FD( w(i) ) end do と呼んでもよろしい。 PURE が何かはマニュアルを見るか、鋼鉄天使くるみPUREを見る事。 シスタープリンセスREPUREでもいい。 0092デフォルトの名無しさん2012/12/01(土) 20:48:26.42 ELEMENTAL属性ってのは初めて聞いた 勉強になります 兄ぃありがとう 0093デフォルトの名無しさん2012/12/02(日) 15:08:21.56 (ELEMENTALはPUREでもあるから強調しなくてもいいんだけどな… 0094デフォルトの名無しさん2012/12/02(日) 16:57:51.30 x(:)=fd(w(:)) x=fd(w)