2023年FORTRAN95程序設(shè)計(jì)學(xué)習(xí)筆記_第1頁(yè)
2023年FORTRAN95程序設(shè)計(jì)學(xué)習(xí)筆記_第2頁(yè)
2023年FORTRAN95程序設(shè)計(jì)學(xué)習(xí)筆記_第3頁(yè)
2023年FORTRAN95程序設(shè)計(jì)學(xué)習(xí)筆記_第4頁(yè)
2023年FORTRAN95程序設(shè)計(jì)學(xué)習(xí)筆記_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

《FORTRAN95程序設(shè)計(jì)》學(xué)習(xí)筆記66RPGgg★目錄★TO(shè)C\o"1-2"\h\zHYPERLINK\l"_Toc"《FORTRAN95程序設(shè)計(jì)》學(xué)習(xí)筆記 PAGEREF_Toc\h1基礎(chǔ)知識(shí)(基礎(chǔ)、字符串、FORMAT、隱式、TYPE) 1流程與控制(if、select、do)?PAGEREF_Toc\h4HYPERLINK數(shù)組(聲明、隱式循環(huán)、整體操作、可變數(shù)組)?PAGEREF_Toc\h5HYPERLINK\l"_Toc"函數(shù)與子程序(子程序、函數(shù)、全局變量) PAGEREF_Toc\h6HYPERLINK\l"_Toc"MODULE與面向?qū)ο螅ㄖ剌d操作符、虛函數(shù)) PAGEREF_Toc\h9文獻(xiàn)相關(guān)(OPEN、WRITE、READ)?PAGEREF_Toc\h10HYPERLINKVisualFortran編譯器(DLL,VB調(diào)用) PAGEREF_Toc\h12數(shù)值算法與IMSL(數(shù)值算法插件)?PAGEREF_Toc\h14HYPERLINK\l"_Toc"常用庫(kù)函數(shù)(數(shù)學(xué)、數(shù)組、零碎、子程序) PAGEREF_Toc\h15基礎(chǔ)知識(shí)(基礎(chǔ)、字符串、FORMAT、隱式、TYPE)【小玩意】二進(jìn)制觀測(cè)器:裝在M..VisualStudio\DF98\bin,有一個(gè)Bitviewer,可以觀測(cè)變量?jī)?chǔ)存方式【語(yǔ)法】續(xù)行:行結(jié)尾或行開頭使用&符號(hào);注釋:使用!符號(hào)【語(yǔ)法】數(shù)學(xué)表達(dá)式:+;-;*;/;(;);**乘冪【語(yǔ)法】程序結(jié)束:STOP(Ruby的exit)【語(yǔ)法】輸出:write(*,*),完整寫法:write(unit=*,fmt=*)建議:少用print,盡量用write【語(yǔ)法】聲明整型:integer(kind=4)a;其中kind是使用的bytes數(shù),4or2其他寫法:integer*4a;integer(4)a浮點(diǎn):real(kind=4)a;有效數(shù)位6位(12345678存為1.234567E7),假如是kind8則為15位有效數(shù)字此外:1E10:?jiǎn)尉?0^10,1D10:雙精10^10復(fù)數(shù):complex::a=(2,3)實(shí)部:real(a);虛部:imag(a)布爾型:Logical,.true.和.false.【語(yǔ)法與函數(shù)】字符串:character(20)string注意理解,fortran的弱智字符串就是一個(gè)長(zhǎng)度不能變的一維的東西,極其猥瑣,和Java、Ruby不能相提并論的string(13:13)=“a”:對(duì)第13個(gè)字節(jié)的讀、存string(2:3)=“go”string(6)=“我的媽呀”:從第6個(gè)位置開始設(shè)立為“我的媽呀”a=string_a//string_b:用“//”連接兩個(gè)字符串【常用函數(shù)】char(num),ichar(char):ASCII碼的轉(zhuǎn)換相關(guān)功能【常用函數(shù)】len(string),len_trim(string):長(zhǎng)度,去掉尾部空格后的長(zhǎng)度【常用函數(shù)】index(string,key):找key在string首出現(xiàn)的位置【常用函數(shù)】trim(string):返回去掉尾部空格的字符串(用途不大)【函數(shù)】repeat(char,int):返回一個(gè)反復(fù)int次的char串character(len=20)string普通聲明;character(len=*)string接受的時(shí)候可自動(dòng)長(zhǎng)度【規(guī)范格式】FORMAT格式化e.g.write(*,100)A100format(I4)這里是100號(hào)標(biāo)記調(diào)用的格式參數(shù)控制符(前面加數(shù)字為反復(fù)次數(shù),如4I6或<a>I6。(其中a為一個(gè)int))A5:輸入/出5個(gè)字符常用功能I5[.4]:輸5位整數(shù),最少4位常用功能BN,BZ:定義空格為無(wú)東西或?yàn)?F5.4,D5.4:5位浮點(diǎn)數(shù),小數(shù)占4位其中前面一個(gè)常用E5.1[E2]:5位浮點(diǎn),小數(shù)占1位,指數(shù)占2位4X:4個(gè)空格常用功能/與\:/為中止本行,\為強(qiáng)制不換行強(qiáng)制不換行常用Tn,TLn,TRn:移動(dòng)到第n列/左移n列/右移n列Write(*,”(2X,I5)”)a;一般使用這種方法進(jìn)行格式化即可,推薦。注意,complex要用兩個(gè)浮點(diǎn)數(shù)來(lái)輸出IMPLICIT命令(隱式表達(dá))默認(rèn):I、J、K、L、M、N為整數(shù),其余浮點(diǎn)(不好)隱式聲明:implicitinteger(A,B,C):A、B、C開頭的自動(dòng)為整型,無(wú)需單獨(dú)聲明implicitinteger(A-F,I,K):A-F、I、K開頭的自動(dòng)為整型implicitreal(M-P):M-P開頭自動(dòng)視為浮點(diǎn)數(shù)implicitnone:無(wú)隱式聲明,最常用,但個(gè)人認(rèn)為在自己有把握的情況下還是可以自定義一些隱式來(lái)方便程序書寫【語(yǔ)法】常數(shù)parameter的聲明方法1:real,parameter::pi=3.14方法2:realpiparameter(pi=3.14)【常用功能】類型轉(zhuǎn)換(realinteger)real(int_a):返回int_a的浮點(diǎn)數(shù)int(real_a):返回real_a的整型【語(yǔ)法】設(shè)初值:integer::a=1【語(yǔ)法】等價(jià)聲明:equivalence(array(1,1,5),A)兩者使用同一塊內(nèi)存,如上,調(diào)用A就是調(diào)用array(1,1,5),但是調(diào)用A比較快【語(yǔ)法】type,自定義數(shù)據(jù)類型,可組合integer,real,char等,類似一個(gè)只有公開變量的類type::personcharacter(20)::nameinteger::ageendtypeperson聲明:type(person)::a使用:a%name,a.name(Ruby:一個(gè)全是attr_accessor的class)【用途不大的函數(shù)】kind的使用:select_ind_kind(n):返回記錄n位整數(shù)所需的kind;select_real_kind(n,e)n位有效,指數(shù)e位所需的kind流程與控制(if、select、do)【語(yǔ)法】if條件分歧:if(邏輯)then注意,避免浮點(diǎn)數(shù)相等,浮點(diǎn)用abs(a-b)<誤差的方法程序執(zhí)行內(nèi)容elseif(邏輯)then程序執(zhí)行內(nèi)容else程序執(zhí)行內(nèi)容endif單行if:if(邏輯)then內(nèi)容【語(yǔ)法】邏輯標(biāo)志:==.EQ.;/=.NE.;>.GT.;>=.GE.;<.LT.;<=.LE.;.and.;.or.;.not.【語(yǔ)法】selectcase功能selectcase(某)這個(gè)某可以是整數(shù)和字符,Logicalcase(70:90)這個(gè)case只能用常數(shù)內(nèi)容case(60:69)內(nèi)容casedefault內(nèi)容endselect【語(yǔ)法】?jī)蓚€(gè)小東西:pause:暫停;stop:退出【語(yǔ)法】二進(jìn)制的邏輯運(yùn)算iand和ior舉例:a=2(二進(jìn)制10);b=4(二進(jìn)制100);c=iand(a,b)則c=6【語(yǔ)法】循環(huán)結(jié)構(gòu)doI=1,5,1分別是開始,結(jié)束,step,亦可dowhile(條件)執(zhí)行內(nèi)容enddo【流程控制語(yǔ)法】cycle:執(zhí)行下次循環(huán)(Ruby:next)exit:循環(huán)中斷(Ruby:break)【署名的循環(huán)】outdo:doI=1,3inner:doJ=2,4內(nèi)容署名后可以使用諸如if(..)exitoutdo;if(..)cycleinner這種enddoinnerenddooutdo【語(yǔ)法】臭名昭著的:goto行數(shù)數(shù)組(聲明、隱式循環(huán)、整體操作、可變數(shù)組)【語(yǔ)法】數(shù)組的聲明:Datatypename(size)其中Datat(yī)ype是類型也可是自定義的type比如:integera(10)或integer,dimension(10)::a類似聲明多維數(shù)組:integera(3,3)亦可a(0:3,-3:3)這樣自定義某維范圍【詭異東東】隱式循環(huán)與賦初值:DataA/1,2,3,4,5/;Dat(yī)aA/5*3/5個(gè)3,不是計(jì)算Data(A(I),I=2,4,2)/2,4/I=2,4,2隱式循環(huán),起、末、STEP,類似do循環(huán)Integer::a(5)=(/1,(2,I=2,4),5/)連續(xù)3次2,假如(I,I=2,4)則是2,3,4Write隱式循環(huán):write(*,”(I3,I3,/I3,I3)”)((m(r,c),c=1,2),r=1,2)連續(xù)輸出m(1,1),m(2,1),m(1,2),m(2,2)初始化統(tǒng)一賦值:ingeter::a(5)=5;相稱于a(1)=a(2)=..=a(5)=5【語(yǔ)法】數(shù)組整體操作:a=5;將左右值設(shè)立為5a=(/1,2,3/);重設(shè)數(shù)值,大小要相同a=b;同位置的這是為相等數(shù)值。注意,不是地址連接,是賦值!a=b+c;a=b–c;a=b*c;a=b/c;a=sin(b):也是對(duì)位置整體的操作【技巧】其他數(shù)組操作:a(3:5)=5;a(3:)=5;a(1:3)=b(4:6);a(:,:)=b(:,:,1)如a(1-5,1-5)=b(1-5,1-5,1)a(1:10)=a(10:1:-1)類隱式循環(huán)翻轉(zhuǎn)a。注意這里的操作過程,先寄存右式,再賦值左邊【語(yǔ)法】WHEREwhere(a<3)對(duì)所有a<3的位置b=1設(shè)立b=1,注意,a、b同大小elsewhere亦可elsewhere(a>5)這樣的東西b=2endwhere【語(yǔ)法】FORALL:使用方法forall(范圍1,范圍2…條件)forall(I=1:5,J=1:5,a(I,J)/=0)a(I,J)=1/a(I,J)相稱于:doI=1,5;doj=1,5;ifa(I,J)/=0…【內(nèi)存細(xì)節(jié)】數(shù)組保存:假設(shè)一個(gè)A(3,3),則內(nèi)存排列:A(1,1)=>A(2,1)=>A(3,1)=>A(1,2)=>A(2,2)=>A(3,2)=>A(1,3)=>A(2,3)=>A(3,3)。注意,為了使用告訴cache,應(yīng)盡量使用編號(hào)相近的內(nèi)容,選用內(nèi)存相近的內(nèi)容。所以integer::a(2,2)=(/1,2,3,4/)就是a(1,1)=1;a(2,1)=2;a(1,2)=3;a(2,2)=4,按內(nèi)存分派4個(gè)東西?!菊Z(yǔ)法】可變數(shù)組聲明:integer,allocatable::a(:)allocatable表達(dá)可變數(shù)組;a(:)表達(dá)可變一維數(shù)組;多維的可以a(4,:),a(:,:)這樣。分派內(nèi)存:allocate(a(大?。?stat(yī)=error)這個(gè)error整型,=0為成功,否則失敗釋放內(nèi)存:deallocate(a)判斷是否已經(jīng)分派內(nèi)存:allocated(某),可以return.true./.false.(Ruby:ifxx!=nil)函數(shù)與子程序(子程序、函數(shù)、全局變量)【子程序】Subroutineprogrammain主程序內(nèi)容主程序代碼endprogrammain主程序結(jié)束subroutinesub1(參數(shù))子程序1,調(diào)用方法:callsub1內(nèi)容,注:可以使用return(Rubyreturn)endsubroutinesub1子程序1結(jié)束說(shuō)明:子程序獨(dú)立擁有屬于自己的變量聲明,同時(shí)子程序和Ruby同樣也是傳進(jìn)來(lái)地址,所以可以在子程序中修改傳入內(nèi)容的數(shù)值。有關(guān)字符串:character(*)::first,傳進(jìn)來(lái)的時(shí)候可以用*,大小任意。這種功能用于子程序接受字符串或者初始化給定常量字符串,如:character(*),parameter::a=”123”【函數(shù)】function聲明函數(shù):real,external::add,分別定義返回類型,聲明為函數(shù),以及函數(shù)名。注意,聲明的時(shí)候不帶參數(shù)。functionadd(a,b)real::add,a,badd為返回的參數(shù)endfunctionadd使用函數(shù)時(shí)的一個(gè)不成文規(guī)定:傳遞進(jìn)來(lái)的東西,只讀他的數(shù)值就好了,不要去改變他的數(shù)值?!静煌扑]的方法】全局變量(建議使用module)integer::a,bcommona,b使用的時(shí)候integer::n1,n2commonn1,n2(只能和位置相應(yīng),和名字不相應(yīng),所以common多了比較無(wú)奈。此時(shí)可以用比如commona(2)這樣數(shù)組一類的,但是都不如用module)此外還可以用比如common/group1/a這樣來(lái)分組,初始化需要用blockdata寫在主程序之外,如:blockdat(yī)a主程序之前就執(zhí)行,只能賦初值,注意全局變量不能做常量integera,bcommon/group1/a,bdataa,b/3,4/endblockdat(yī)a【小技巧】函數(shù)傳遞參數(shù)中的小技巧,不賦值初大小的數(shù)值subroutineuserA(num,n2)integer::num(*)不賦值大小integer::n2(6)取地址中的前6個(gè)東西,汗。此處也可重設(shè)范圍,如(-2,2)【提醒】變量生存周期提醒:VisualFortran不自動(dòng)釋放變量?jī)?nèi)存,所以函數(shù)中使用變量的時(shí)候一定要使用明顯的初始化,不要設(shè)立integer::a=1這樣的初始化,由于這個(gè)是分派內(nèi)存時(shí)的初始化,第二次執(zhí)行函數(shù)會(huì)被無(wú)視?!菊Z(yǔ)法技巧】傳遞函數(shù):real,external::func聲明自定義函數(shù)real,intrinsic::sin聲明sin是庫(kù)函數(shù)callexecfun(sin)subroutineexecfun(f)子程序定義real,external::fwrite(*,*)f(1.0)endsubroutine【猥瑣】子程序中的特殊參數(shù):integer,intent(in)::a;integer,intent(out)::b表達(dá)a只讀,b應(yīng)被重新賦值。這只是編程的時(shí)候讓編譯器幫忙檢查錯(cuò)誤,對(duì)實(shí)際沒故意義?!菊Z(yǔ)法】函數(shù)的使用接口(Interface)用途:1、返回?cái)?shù)組,2、參數(shù)數(shù)目不定,3、返回指針,4、制定參數(shù)位置等舉例:返回?cái)?shù)組interfacefunctionrand10(lbound,ubound)real::lbound,uboundreal::rand10(10)返回?cái)?shù)組endfunction;endinterface舉例:不定參個(gè)數(shù)interfacefunctionsub(a,b)integer,optional::b,a多態(tài),表達(dá)a,b可以省略定義function時(shí):if(present(b))then…(Ruby:ifb!=nil)此外optional之后可以改變位置,比如上面:result=sub(b=2,a=1),意義不大【常用函數(shù)】隨機(jī)數(shù)功能取種子:callRandom_See(cuò)d()制造:callRandom_number(t)t是0-1的隨機(jī)數(shù),注意也可以是直接生成數(shù)組【語(yǔ)法】遞歸:聲明:recursiveintegerfunctionf(n)result(as);其中recursive表達(dá)可以遞歸,result(as)這樣表達(dá)可以用另一個(gè)名字做返回的內(nèi)容,類型還是integer【語(yǔ)法】?jī)?nèi)部函數(shù),只能在某范圍內(nèi)調(diào)用的函數(shù),contains里面寫內(nèi)容(如函數(shù)、子程序定義)即可。【少用語(yǔ)法】并行解決:pure,elemental,使用有很多限制,如所有參數(shù)為intent(in),不能改變?nèi)肿兞康?。聲明在定義處,如purefunctionfc()。個(gè)人認(rèn)為暫時(shí)用不上這個(gè),以前并行解決不是這么實(shí)現(xiàn)……【有用函數(shù)】記錄時(shí)間:character(20):datatime;calldat(yī)a_and_time(data,time)MODULE與面向?qū)ο?重載操作符、虛函數(shù))【語(yǔ)法與范例】module用來(lái)封裝程序模塊范例module模塊名privatea可以把a(bǔ)私有化,類內(nèi)的,Ruby@integera,bcommona,b這樣就可以使用全局變量名?;颍海閚teger,save::a,btypeplea..這樣即可常用type(plea)::XXXX為一個(gè)類型定義type的定義內(nèi)容endtypeUse父模塊名繼承機(jī)制Contains定義函數(shù)、子程序。像是類的方法,默認(rèn)均為public,假如需要私有化似乎也可在前面(聲明變量之前)private函數(shù)名endmodule特別提醒:當(dāng)變量重名,可以u(píng)seA,aa=>va(把A的va改名為aa用)【面向?qū)ο蟆客瘮?shù)重載。module中:interfacefu虛函數(shù),調(diào)用的時(shí)候自動(dòng)從下面選一個(gè)參型合適的moduleprocedurefu1moduleprocedurefu2endinterface【面向?qū)ο蟆恐囟x操作符interfaceoperator(+)特別說(shuō)明,賦值號(hào)也可重載,用assignment(=)moduleprocedureadd候選的函數(shù)endinterfacecontainsintegerfunctionadd(a,b)比如a,b都是自定義type類型,返回一個(gè)integer,則可c=a+b這樣了。說(shuō)明:定義可以是已有的各種運(yùn)算符也可是自定義的類型,比如.dot.(兩邊有點(diǎn)),等號(hào)默認(rèn)為賦值(參見數(shù)組那種),亦可自定義。文獻(xiàn)相關(guān)(OPEN、WRITE、READ)【編譯器】VF中都放在一個(gè)SourceFiles中,可分別編譯為*.obj,最后連接為一個(gè).EXE(RMXP的ScriptEditor,只是多了一個(gè)分別編譯的過程)【語(yǔ)法】include‘文獻(xiàn)名.后綴’,相稱于把該文獻(xiàn)的內(nèi)容所有ctrl-c過來(lái),對(duì)編譯和執(zhí)行并沒有什么意義【語(yǔ)法與操作】open打開文獻(xiàn)open(unit=編號(hào),file=“hello.txt”)即可打開文獻(xiàn),使用時(shí):write(編號(hào),*)“Hello”細(xì)節(jié):open(unit=編號(hào),file=filename,form=‘formated文本格式/unformated二進(jìn)制格式’,status=‘new第一次打開/old已存在文獻(xiàn)/replace重建/scratch弄個(gè)暫存盤可以不要file’,access=‘sequential順序/direct直接’,recl=長(zhǎng)度,err=label犯錯(cuò)跳轉(zhuǎn)標(biāo)簽,IOStat=var這個(gè)數(shù)字>0犯錯(cuò),<0文獻(xiàn)終了,=0正常,action=‘readwrite/read/write’)【重要語(yǔ)法】write/read(unit=number,fmt=Format(yī),NML=namelist(專讀某個(gè)namelish,無(wú)用),rec=record(直讀文獻(xiàn)終,設(shè)立所讀寫文獻(xiàn)模塊位置),Iostat=var,ERR=label,END=label(碰到文獻(xiàn)結(jié)尾的跳轉(zhuǎn)標(biāo)簽),ADVANCE=‘yes/no是否讀寫后換行’)【語(yǔ)法】判斷文獻(xiàn)存在:inquire:inquire(file=filename,exist=alive)【語(yǔ)法】關(guān)閉文獻(xiàn)close(fileid,status=‘keep/delete是否刪除文獻(xiàn)’)【其他很少用的】rewind(編號(hào)):把讀寫位置返回開頭;backspace(..),endfile()【操作】文獻(xiàn)操作:順序文獻(xiàn)、直接訪問文獻(xiàn)、二進(jìn)制順序文獻(xiàn):read(unit=id,fmt=“..”,iostat=..)接受read的東西;這樣反復(fù)循環(huán)讀一行一行,iostat那個(gè)/=0就over了。(Ruby:readline)直接訪問文獻(xiàn)的操作(還是分行的操作):open的時(shí)候設(shè)立recl的大小,然后類似:read(id,fmt,rec=編號(hào),..)XX讀編號(hào)內(nèi)容即可。注意:recl=6則1行為4個(gè)字符內(nèi)容(有兩個(gè)是”\n”)二進(jìn)制文獻(xiàn)的操作,與上面相比,改用form=“unformatted”【重要功能】?jī)?nèi)部文獻(xiàn)與字符串,數(shù)字轉(zhuǎn)換:把unit改為=字符串,讀入數(shù)字即可做到數(shù)字轉(zhuǎn)字符串;反之亦可?!菊Z(yǔ)法】namelist:namelist/na/a,b,c輸入輸出如下(沒用的功能)&naA=1B=2/指針(指向變量、數(shù)組、函數(shù))【語(yǔ)法與范例】指針指到變量integer,target::a=1聲明一個(gè)可以當(dāng)成目的的變量integer,pointer::p=1聲明一個(gè)可以指向整數(shù)的指針p=>a設(shè)立指向(也可以不指,allocat(yī)e(p)即可開地址,deallocate(p)干掉地址。用起來(lái)像是個(gè)可釋放的變量)p=3設(shè)立P位置的內(nèi)存數(shù)據(jù)【語(yǔ)法】設(shè)立空指針:p=>null()或integer,pointer::pnullify(p)【語(yǔ)法】判斷指針是否已經(jīng)設(shè)立內(nèi)容:associated(pointer,[target])。這里假如有target可以判斷指針是否指向target內(nèi)容?!菊Z(yǔ)法與例子】指針數(shù)組integer,pointer::a(:)聲明一維指針數(shù)組integer,target::b(5)=(/1,2,3,4,5/)a=>b即a(1-5)=b(1-5)a=>b(1:5:2)即a(1,2,3)=b(1,3,5)同理,allocate(a(5));a=(/1,2,3,4,5/)注意這種和allocate的數(shù)組不同,必須手動(dòng)釋放子程序霸占的內(nèi)存。同理2,integer,pointer::a(:,:)【語(yǔ)法】指針函數(shù):interface注:假如用了module就不用interface了functiongetmin(p)integer,pointer::p(:)輸入一個(gè)指針integer,pointer::getmin返回一個(gè)指針endfunctionendinterface【數(shù)據(jù)結(jié)構(gòu)】隊(duì)列與堆寨(試誤法)。舉例:隊(duì)列定義類型type::datalinkinteger::Itype(datalink),pointer::prev,next兩個(gè)指針,可以指向datalink的type對(duì)象endtypedatalink使用type(dat(yī)alink),target::node1,node2聲明兩個(gè)新的類型,需要聲明可做targetnode1=datalink(1,null(),node2)初始化node1這個(gè)type對(duì)象,這個(gè)地方很有特色,記住。VisualFortran編譯器(DLL,VB調(diào)用)DEBUG&RELEASE:Build>SetActiveConfigurat(yī)ion選擇編譯模式。Release和Debug的執(zhí)行效率有幾倍的差距。所以發(fā)布的版本最佳要用Release格式。靜態(tài)鏈接庫(kù):選擇FortranStaticLibrary格式的newProject,這種東西編譯后生成*.lib(只有函數(shù)沒有program)使用這種lib的時(shí)候:FortranConcoleApplication里面加入*.lib即可。常用目錄/文獻(xiàn)設(shè)立tool>options選擇Directories標(biāo)簽。Libraryfiles(*.lib)/includeFiles(*.mod,即module)Project>Settings|Link標(biāo)簽,設(shè)立常用.lib,這里的|Debug可以設(shè)立output的.exe相對(duì)位置DLL動(dòng)態(tài)鏈接庫(kù)(Project:FortranDynamicLinkLibrary)這個(gè).dll可以拿給別的程序用,無(wú)需重新編譯。設(shè)立可被外界調(diào)用的程序subroutinesub()!DEC$ATTRIBUTESDLLEXPORT::SUB這個(gè)是注釋,是給fortran看的注釋,用于被外界用的dll函數(shù)編譯后生成XXX.dll和XXX.lib使用時(shí),把XXX.lib加入自己的project并把xxx.dll放到最終的.exe同目錄下。(注:有時(shí)會(huì)出現(xiàn)規(guī)定手動(dòng)設(shè)立)執(zhí)行時(shí)間分析:Build>Profile優(yōu)化程序的觀念:加減快于乘除,乘法快于乘冪VisualBasic和DELPHI中調(diào)用Fortran的程序(★重要★):Fortran:某函數(shù)中:!DEC$ATTRIBUTESDLLEXPORT::CIRCLE_AREA,函數(shù)名編譯后會(huì)變成所有大寫。!DEC$ATTRIBUTESALIAS:”ca”::CIRCLE_AREA,強(qiáng)制把函數(shù)CIRCLE_(tái)AREA編譯為ca這個(gè)名字。這樣就行了。注意,別的很多語(yǔ)言中(C,VB,DELPHI)傳遞字符串要傳字符串和長(zhǎng)度,所以Fortran輸入字符串只有一個(gè),別人要用兩個(gè)。舉例:Fortran中subroutineMakelower(string)!DEC$ATTRIBUTESDLLEXPORT::MAKELOWER..endsubroutineVB中PrivateDeclareSubMAKELOWERlib“forlib.dll”(ByValsAsString,ByValIAsLong)使用:callMAKELOWER(“aBcDe”,len(“aBcDe”))DELPHI中Implementat(yī)ionFunctionMAKELOWER(r:String;I:Longint);stdcall;external‘forlib.dll’{$R,*.dfm}使用:MAKELOWER(Edit2.text,length(Edit2.text))【超重要功能】全文獻(xiàn)搜索:Edit>FindinFiles(RMXP的ctrl+shift+F)【快捷鍵】ctrl+L:刪除一行數(shù)值算法與IMSL(數(shù)值算法插件)常用算法(需要的時(shí)候自己搜索):求解非線性函數(shù):二分法Bisection,割線法Secant,牛頓法積分:梯形積分法,SIMPSON辛普森積分插值與曲線近似:拉格朗日插值,牛頓插值法(ForwardInterpolation),LeastSquare,曲線近似法(CubicSpline)排序方法:冒泡排序法,選擇排序法,Shell排序法,快速排序法搜索:順序搜索,二元搜索(先排序),哈希Hashing搜索思想樹狀結(jié)構(gòu):二叉樹等IMSL函數(shù)庫(kù):位置:\MicrosoftVisualStudio\DF98\IMSL(\HELP),使用前先設(shè)立途徑。之后UseIMSL即可矩陣運(yùn)算A.x.B矩陣相乘.i.A矩陣求逆.t.A矩陣轉(zhuǎn)置A.ix.B矩陣A逆乘以B;類似尚有A.xi.B,A.tx.BR=CHOL(A)A=R?TRQ=ORTH(A,[R=R])A=QR,Q?TQ=IF=DEF(A)求行列式值K=RANK(A)求矩陣的rank值Z=EYE(N)得到N*N的單位陣A=DIAG(X)以XVector設(shè)立對(duì)角陣X=DIAGONALS(A)把A的對(duì)角線取出Y=FFT(X,[WORK=W]);X=IFFT(Y,[WORK=W])傅立葉變換A=RAND(A)把矩陣設(shè)立為0~1隨機(jī)數(shù)高斯方程組:AX=B:calllin_so

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論