pasuka
发表于 2014-4-30 10:00:30
本帖最后由 pasuka 于 2014-4-30 10:09 编辑
我是处手 发表于 2014-4-30 09:56
我使用的是compaq visual fortran6.5编辑器,程序好像是八几年的,我导师给我的,需要我做分离机械结构参数优 ...
我的建议:
为发论文毕业的话,就别折腾这种F77的古董了,直接上matlab,使用现成工具箱的话,代码量不会超过300行
btw,这样的导师一来不负责任,二来长期脱离科研第一线,三则高估了现在学生的学习能力和学习欲望了
我是处手
发表于 2014-4-30 10:07:36
除了这样,没有办法了吗?
pasuka
发表于 2014-4-30 10:23:41
本帖最后由 pasuka 于 2014-4-30 10:25 编辑
我是处手 发表于 2014-4-30 10:07
除了这样,没有办法了吗?
1、从lz的发帖来看,我感觉不到lz有任何主动学习的欲望和想法,只是被动完成老板交代的任务;
2、如果1成立,那么多快好省地完成任务,按时发论文毕业且找到满意的工作才是最符合lz利益的
综上所述,我的建议就是彻底和fortran说88,投入matlab的怀抱,上手快,可以吃现成饭,网上参考资料也多,甚至可以说是信手拈来,最合适不过的敲门砖
若1不成立,那么请问lz花费多少精力在学习fortran和优化算法上面了呢?彭国伦的书看过了吗?本站的相关文章阅读了多少?优化算法的书又看了多少?文献又阅读了多少?
一分耕耘一分收获,读研做项目可以取巧,但是不能饭来张口,衣来伸手
以上是一家之言,仅供lz参考,人各有志,不能强求
fcode
发表于 2014-4-30 14:00:39
楼上说得对。
如果你打算静下来检查问题的错误,这里可能有一些线索。
WRITE(*,1060)I1,I2,I3,I4,I5,I6
1060FORMAT(8X,'I1',8X,'I2',8X,'I3',8X,'I4',8X,'I5',8X,'I6',/,6I10)
write(*,7001)
7001format(3x,'data file name=****.***')
read(*,*)chr2 !// 此处修改为 *,*
7003format(17x,a)
write(*,7005)
7005format(3x,'a new file or an old one?(new/old)',\)
read(*,'(a3)')chr3
if(chr3.eq.'new'.or.chr3.eq.'NEW') then
open(1,file=chr2,status='new',access='direct',form='binary',
1recl=80)
几点建议:
1.除非万不得已,read 语句一律用 * ,而不要格式符控制。
2.你的错误在于找不到 1 号文件。
open(1,file=chr2 这里的 chr2 可能根本就没有值。因为 read 的格式是 7003format(17x,a)
为什么要用 17x,a 来读取字符串呢??不是很奇怪么?用 read(*,*) 就可以了
aliouying
发表于 2014-5-2 21:45:24
我是处手 发表于 2014-4-30 09:53
这是约束非线性离散变量组合型优化设计方法,我下面代有优化数学模型,执行生成exe文件后,操作到
确定文件名是"chr2" ?
我是处手
发表于 2014-5-3 21:59:22
对于楼上各位评论,我接受,我也很无语,这程序是八几年导师买来的,里面没有任何注释,我只知道是约束非线性混合离散变量组合型优化程序,里面是一维搜索方法,我就开始看这个优化方法的内容和程序,关于里面的字符含义百分之八十没有具体说明.非计算机专业,fortran我本人看书学习了一个月,语法懂些,没有自己设计过程序.关于这个帖子的问题,已经解决.
在执行件中,输入数据,有严格格式要求,当时没有注意.谢谢各位了.
目前又出现新问题了 Vertices Storage File Name=****.*** NSCH=***
0012.dat 001
Input Vertices?(y/n)y
forrtl: severe (36): attempt to access non-existent record, unit 2, file F:\M\00
12.dat
Image PC Routine Line Source
M.exe 00419409Unknown UnknownUnknown
M.exe 0041923BUnknown UnknownUnknown
M.exe 00418444Unknown UnknownUnknown
M.exe 00418879Unknown UnknownUnknown
M.exe 00414F1AUnknown UnknownUnknown
M.exe 00414710Unknown UnknownUnknown
M.exe 00405AE6Unknown UnknownUnknown
M.exe 00404C87Unknown UnknownUnknown
M.exe 00444A39Unknown UnknownUnknown
M.exe 00436E54Unknown UnknownUnknown
kernel32.dll 7C816037Unknown UnknownUnknown
Incrementally linked image--PC correlation disabled.
Press any key to continue
真心不懂,如果有懂的,或者可以帮助调试整个程序的,可以私密我QQ736223939.有偿
我是处手
发表于 2014-5-3 22:20:38
fcode 发表于 2014-4-30 14:00
楼上说得对。
如果你打算静下来检查问题的错误,这里可能有一些线索。
data file name=****.***
读入时格式控制,输入正好对齐****.***
程序执行时是这样来的,你说的也行,这个程序是F77,这个程序是六五国家科技攻关项目
我是处手
发表于 2014-5-3 22:23:37
突然好失落啊,被鄙视了,确实,若是直接用matlab工具箱,带入个数学优化模型就搞定,那学位论文的题目又有何意义?
fcode
发表于 2014-5-4 05:28:50
1.这里没有计算机专业的。据我所知,没有,大家都是非计算机专业。
2.你别介意,大家给你意见,是为让你提高。尽管有时候不太中听。
3.关于 attempt to access non-existent record, 的问题,请看本章常见错误:http://error.w.fcode.cn
我是处手
发表于 2014-5-4 23:37:55
WRITE(*,'(1x,A)')'Vertices Storage File Name=****.*** NSCH=***'
READ(*,'(28X,A8,6X,I3)')NAME,NSCH
919 write(*,'(1x,a,\)')'Input Vertices?(y/n)'
READ(*,'(A)')IYN
IF(IYN.EQ.'y'.or.IYN.EQ.'Y') then
goto 913
elseif(iyn.ne.'n'.and.iyn.ne.'N') then
goto 919
endif
do 300 i=1,n
300 iv(i,1)=ix0(i)
y(1)=pf0
430 continue
do 302 k=1,n
do 304 i=1,n
if (i.eq.k) go to 306
ii=k+1
iv(i,ii)=ix0(i)
ii=ii+n
iv(i,ii)=ix0(i)
go to 308
306 ii=k+1
iv(i,ii)=ixl(i)
ii=ii+n
iv(i,ii)=ixu(i)
308 continue
304 continue
302 continue
goto 440
913 OPEN(2,FILE=NAME,ACCESS='DIRECT',FORM='binary',
1RECL=160)
DO 921 I=1,NV
READ(2,REC=I)(IV(J,I),J=1,N)
921 CONTINUE
nv1=nv+1
read(2,rec=nv1)sch,fun,cst,cycle
CLOSE(2)
DO 923 I=1,N
923 IX0(I)=IV(I,1)
CALL ROUND(X0,IX0)
PF0=EF(X0)
Y(1)=PF0
write(*,'(1x,2hx0,6f13.6)')(x0(i),i=1,n)
write(*,'(1x,5hf(x0),3x,f13.6)')pf0
write(*,'(1x,4hsch=,i4,3x,4hfun=,i5,3x,4hcst=,i5,3x,6hcycle=,i2)
1')sch,fun,cst,cycle
440 continue
do 310 i=2,nv
do 312 j=1,n
312 ixt(j)=iv(j,i)
call round(xt,ixt)
310 y(i)=ef(xt)
450 call compar
if (i6.ne.1) go to 350
write(*,1000) (y(i),i=1,nV)
1000 format(1x,2hf=,/,5f15.7)
do 320 i=1,nv
do 315 j=1,n
315 ixt(j)=iv(j,i)
call round(xt,ixt)
write(*,1010) i,(xt(ii),ii=1,n)
1010 format(1x,2hx=,i5,/,(5f15.7))
320 continue
350 ir=0
do 352 i=1,n
dl=1.e10
du=-1.e10
do 354 j=1,nv
w=iv(i,j)
if (w.ge.du) du=w
if (w.le.dl) dl=w
354 continue
w=du-dl
if (w.le.idx(i)) ir=ir+1
352 continue
if (ir.ge.en) go to 470
if (i2.ne.1) go to 360
w=sch/15
iw=int(w)
if (iw.le.qun) go to 360
call quadr
if (f1.ge.y(1)) go to 360
call round(xb,ixb)
write(*,1020) qun,f1,(xb(i),i=1,n)
1020 format(10x,7hsuccess,/,10x,4hqun=,i5,/,10x,2hf=,f15.7,/,
110x,2hx=,/,(5f15.7))
y(nv)=f1
do 356 i=1,n
356 iv(i,nv)=ixb(i)
go to 450
360 continue
IF(I7.EQ.1) THEN
isch=sch/50
if (isch*50.ne.sch) go to 351
ngl=0
do 337 i=1,n
ngt=0
nlt=0
do 331 j=2,nv
if (iv(i,j).gt.iv(i,1)) ngt=ngt+1
if (iv(i,j).lt.iv(i,1)) nlt=nlt+1
331 continue
if (ngt.gt.1.and.nlt.gt.1) ngl=ngl+1
337 continue
if (ngl.gt.1) go to 351
sub=1.
n1=nv
call search
if (f1.gE.y(n1)) go to 351
do 346 i=1,n
346 iv(i,nv)=ixb(i)
y(nv)=f1
KT=4
go to 450
351 continue
ENDIF
n1=nv
***************************
460 MSCH=SCH/NSCH
IF(MSCH*NSCH.EQ.SCH) THEN
OPEN(2,FILE=NAME,STATUS='NEW',ACCESS='DIRECT',FORM='binary',
1RECL=160)
DO 927 I=1,NV
WRITE(2,REC=I)(IV(J,I),J=1,N)
927 CONTINUE
nv1=nv+1
write(2,rec=nv1)sch,fun,cst,cycle
CLOSE(2)
ENDIF
管理员,我在窗口里按提示输入数据,中间到goto913那句就出现forrtl: severe (36): attempt to access non-existent record, unit 2,导师说以前就打不开,我应该怎么改写,纠结快一星期了,可以指导下吗?