Fortran第章PPT課件_第1頁
Fortran第章PPT課件_第2頁
Fortran第章PPT課件_第3頁
Fortran第章PPT課件_第4頁
Fortran第章PPT課件_第5頁
已閱讀5頁,還剩60頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、.,1,6.1概述,6.5 標(biāo)識(shí)符的作用域,6.2 函數(shù)子程序,6.6 虛參數(shù)與實(shí)參數(shù) 之間的數(shù)據(jù)傳遞,6.3 子例行子程序,6.4 虛參數(shù)的INTENT屬性,Visual Fortran 90 程序設(shè)計(jì),.,2,主程序的結(jié)構(gòu):,單位定義 說明部分 輸入 計(jì)算或處理 輸出 END,子程序:功能獨(dú)立的程序段實(shí)現(xiàn)一定功能的程序單位 目的:模塊化設(shè)計(jì); 便于重用,所有功能都在主程序單位內(nèi)完成,6.1 概述,.,3,1、主程序(個(gè)數(shù):1) 2、外部子程序(個(gè)數(shù):0-n) 3、模塊(個(gè)數(shù):0-n) 4、塊數(shù)據(jù)單元(個(gè)數(shù):0-n) 程序在運(yùn)行時(shí),總是從主程序開始的; 子程序(過程)被主程序或被其它子程序調(diào)

2、用,甚至可以遞歸調(diào)用(調(diào)用本身),源程序的結(jié)構(gòu),源程序由若干個(gè)程序單位組成,.,4,簡單的源程序的結(jié)構(gòu),.,5,子程序分類,1、函數(shù)子程序 包含內(nèi)部函數(shù)子程序 外部函數(shù)子程序,2、子例行子程序 包含內(nèi)部子例行子程序 外部子例行子程序,用于完成復(fù)雜的計(jì)算 返回 一個(gè)或多個(gè)值,用于完成復(fù)雜計(jì)算,返回一個(gè)或多個(gè)值,或用于其它數(shù)據(jù)處理,.,6,單位定義語句 說明部分 程序體:具體計(jì)算 END語句,外部函數(shù)子程序的常見結(jié)構(gòu),FUNCTION F(M,N,L)RESULT(F_RESULT) IMPLICIT NONE REAL:M,N,L,F_RESULT F_RESULT=M+N L=M-N END,

3、PROGRAM MAIN READ*,A,B D=F(A,B,c) PRINT*,C,D END,均是獨(dú)立的程序單位:分開編譯,必須考慮數(shù)據(jù)的傳遞,虛元表,實(shí)元表,結(jié)果名,6.2.1外部函數(shù)子程序,.,7,END END FUNCTION END FUNCTION 函數(shù)名,子程序END語句寫法,1、函數(shù)單位的結(jié)束標(biāo)志 2、將控制返回到主調(diào)程序。,子程序END語句功能,.,8,函數(shù)單位定義語句的寫法,RECURSIVE FUNCTION 函數(shù)名(虛參數(shù)表)RESULT(結(jié)果變量名) 1、函數(shù)子程序的第一行(注釋行除外)。 2、如果函數(shù)是遞歸的,則應(yīng)以RECURSIVE開頭。 3、函數(shù)名為全局標(biāo)識(shí)

4、符(見119頁6.5節(jié)): 全局標(biāo)識(shí)符:作用域?yàn)檎麄€(gè)源程序 全局名命名規(guī)則:不與已有的全局名同名。 各獨(dú)立程序單位的名字為全局名(主程序、外部子程序、模塊、塊數(shù)據(jù)單位),其它為局部標(biāo)識(shí)符。 局部標(biāo)識(shí)符:作用域?yàn)楸境绦騿挝?.,9,4、主調(diào)程序與被調(diào)程序 之間的數(shù)據(jù)傳遞,結(jié)果變量名:子程序的一個(gè)傳出 一般寫法:函數(shù)名_RESULT,用于保存一個(gè)計(jì)算結(jié)果,稱為函數(shù)值。結(jié)果變量名有類型,必須在子程序說明部分說明類型。,虛參數(shù)(元)表:子程序的所有傳入,及除函數(shù)值之外的其他計(jì)算結(jié)果的傳出。,函數(shù)值返回給主調(diào)程序的調(diào)用式,由主調(diào)程序的實(shí)元傳遞給對應(yīng)的虛元,虛元數(shù)據(jù)返回給對應(yīng)的實(shí)元,.,10,FUNCTI

5、ON F(M,N,L)RESULT(F_RESULT) IMPLICIT NONE REAL:M,N,L,F_RESULT F_RESULT=M+N L=M-N END,PROGRAM MAIN READ*,A,B C=F(A,B,D) PRINT*,C,D END,例1:編寫子程序求K=M+N,L=M-N,主程序輸入2,3,調(diào)用子程序,計(jì)算2+3及2-3。,重點(diǎn):子程序的傳入、傳出,.,11,5、虛元的含義:編寫子程序時(shí)沒有具體值,因此只是一個(gè)符號,表示傳入、傳出,名字可隨便用戶取。 (用于傳入數(shù)據(jù)的虛元調(diào)用時(shí)獲得數(shù)值;用于傳出數(shù)據(jù)的虛元調(diào)用結(jié)束后才獲得數(shù)值) 6、虛元可以是變量名、數(shù)組名、

6、子程序名、指針等。 7、虛元的可選屬性INTENT(119頁6.4節(jié)) INTENT(IN):作為子程序的傳入(不得再改變其值) INTENT(OUT):子程序的傳出(對應(yīng)的實(shí)元如是常量、表達(dá)式,數(shù)據(jù)未能傳出) INTENT(INOUT):子程序的傳入傳出,.,12,例:REAL,INTENT(IN):M,N REAL,INTENT(OUT):L REAL:F_RESULT,結(jié)果名不是虛元,.,13,子程序程序體的寫法,分為說明部分和執(zhí)行部分。 1、說明部分應(yīng)對程序體內(nèi)一切變量、數(shù)組等實(shí)體(包括虛元)作出說明,同時(shí)還要說明函數(shù)結(jié)果變量名,但不可說明函數(shù)名。 2、執(zhí)行部分中必須對函數(shù)結(jié)果名至少賦

7、值一次。,FUNCTION F(M,N,L)RESULT(F_RESULT) IMPLICIT NONE REAL:M,N,L,F_RESULT F_RESULT=M+N L=M-N END,兩單位獨(dú)立編譯,有值的意義要說明,無值的意義不說明,.,14,1、調(diào)用式是表達(dá)式 2、常見形式: Y=函數(shù)名(實(shí)元表) PRINT*,函數(shù)名(實(shí)元表) IF(函數(shù)名(實(shí)元表) 注意:1、實(shí)元與虛元一般必須在個(gè)數(shù)、次序、類型上保持一致,但實(shí)元與虛元名字可以不同。,函數(shù)子程序的調(diào)用,向被調(diào)程序傳入數(shù)據(jù),接受被調(diào)程序的傳出數(shù)據(jù),2、 調(diào)用結(jié)束后調(diào)用式得到函數(shù)值,主調(diào)單位中函數(shù)名必須說明類型。,.,15,例1:編

8、寫子程序求K=M+N,L=M-N,主程序輸入2,3,調(diào)用子程序,計(jì)算2+3及2-3。,Program main Implicit none Integer:M,N,K,L,F Read*,M,N K=F(M,N,L) PRINT*,K,L END,FUNCTION F(M,N,L)RESULT(F_RESULT) IMPLICIT NONE INTEGER:M,N,L,F_RESULT F_RESULT=M+N L=M-N END,注意:虛元名任意,但一般與實(shí)元一致。 檢查類型說明、調(diào)用原則,程序體編寫規(guī)則。,不能省略說明 兩單位獨(dú)立編譯,重點(diǎn):子程序的傳入、傳出,不要說明F的類型,必須說明F

9、的類型,.,16,.,17,PROGRAM MAIN IMPLICIT NONE REAL:X,Y,F,G,GF READ*,X F=X+SIN(30*3.1415926/180) G=GF(X,F) Y=F+G PRINT*,Y END,FUNCTION GF(X,F)RESULT(GF_RESULT) IMPLICIT NONE REAL:X,F,GF_RESULT IF(F0)THEN GF_RESULT=X+1 ELSEIF(F0)THEN GF_RESULT=X-1,ELSE GF_RESULT=0 ENDIF END,G,GF不能同名 子程序的傳入傳出,.,18,練習(xí): 計(jì)算函數(shù)S

10、inh(x)的值,當(dāng)ex的通項(xiàng)值小于等于1E-6時(shí)停止。計(jì)算公式如下:,將ex的計(jì)算編寫成外部函數(shù),便于重用,.,19,!主程序如下: Program main1 Real: MyExp,y,x Write(*,*) Enter x: Read(*,*)x Y=(MyExp(x)-MyExp(-x)/2.0 Write(*,)Y END PROGRAM,!函數(shù)子程序 Function MyExp(x) result (Exp_res) Real:Exp_res,x,s,a integer:N N=1 a=1 S=1 do a=a*X/N IF(ABS(a)=1E-5)EXIT S=S+a N=

11、N+1 end do Exp_res=S END FUNCTION,兩次調(diào)用,計(jì)算函數(shù)值,.,20,1、計(jì)算實(shí)元值(作為傳出的可預(yù)先無值) 2、虛實(shí)按地址結(jié)合:虛元按順序借用實(shí)元存儲(chǔ)單元 3、運(yùn)行權(quán)至子程序的第一句,直至遇子程序的END語句返回到主調(diào)程序: 運(yùn)行權(quán)返回至調(diào)用點(diǎn) 函數(shù)值返回給調(diào)用表達(dá)式 虛實(shí)脫離結(jié)合,但子程序運(yùn)行時(shí)造成的實(shí)元值的改變將保留。,調(diào)用的執(zhí)行過程,.,21,例1:編寫子程序求K=M+N,L=M-N,主程序輸入2,3,調(diào)用子程序,計(jì)算2+3及2-3。,Program main Implicit none Integer:M,N,K,L,F Read*,M,N K=F(M,

12、N,L) PRINT*,K,L END,FUNCTION F(M,N,L)RESULT(F_RESULT) IMPLICIT NONE INTEGER:M,N,L,F_RESULT F_RESULT=M+N L=M-N END,.,22,子程序閱讀技巧:畫出虛實(shí)結(jié)合表,Program main IMPLICIT NONE INTEGER:X,Y,Z,f Y=f(X,X) PRINT*,Y Z=f(y,x) PRINT*,Z END,FUNCTION f(X,Y)RESULT(f_RESULT) IMPLICIT NONE INTEGER:X,Y,f_RESULT,I I=1;X=3*I;Y=2

13、*I f_RESULT=X+Y END,注意:一個(gè)變量只有一個(gè)存儲(chǔ)單元 按順序結(jié)合,不是按名結(jié)合,1、虛元為變量,實(shí)元為同類型的變量:虛元按順序借實(shí)元的單元,6.6 常見的虛實(shí)結(jié)合的類型,.,23,虛實(shí)結(jié)合:開辟臨時(shí)單元存放常量或表達(dá)式的值 REAL:MN,X,S X=3.0 PRINT*,S(X,MN(X),X END FUNCTION S(A,C)RESULT( S_RESULT ) REAL:A,S,S_RESULT A=A+1;B=A*A S_RESULT=B-C END FUNCTION S FUNCTION MN(X)RESULT(MN_RESULT) MN_RESULT=3.0*

14、X END FUNCTION MN,247.0 4.0,、虛元為變量,實(shí)元為常量、表達(dá)式:,6.6 常見的虛實(shí)結(jié)合的類型,.,24,外部子例行子程序的結(jié)構(gòu),外部子例行子程序:用戶定義,用于完成復(fù)雜計(jì)算任務(wù),返回一個(gè)或多個(gè)值,或用于其它數(shù)據(jù)處理,RecursiveSubroutine 子程序名(虛元表) 說明部分 程序體 End Subroutine 子程序名,類似函數(shù)子程序,FUNCTION F(A,B) RESULT(F_RESULT),6.3.1 外部子例行子程序的定義,.,25,與函數(shù)子程序的區(qū)別,1.沒有RESULT關(guān)鍵字。 2、虛元:負(fù)責(zé)子程序的全部傳入和全部傳出 3、無虛元時(shí):SU

15、BROUTINT 子程序名 或 SUBROUTINT 子程序名(),FUNCTION F( ) RESULT(F_RESULT),Y=F(實(shí)元表),4、函數(shù)子程序的調(diào)用是表達(dá)式中。 而子例子程序必須通過CALL語句來調(diào)用。 CALL 子程序名(實(shí)元表),.,26,例:編寫子例行子程序求K=M+N,L=M-N 主程序輸入2,3調(diào)用子程序求2+3,2-3的值。,Program main Implicit none Integer:M,N,K,L Read*,M,N CALL S(M,N,K,L) PRINT*,K,L END,SUBROUTIEN S(M,N,K,L) IMPLICIT NONE

16、INTEGER:M,N,K,L K=M+N L=M-N END,所有的傳入、傳出,重點(diǎn):子程序的傳入、傳出,.,27,1、計(jì)算實(shí)元值(作為傳出的可預(yù)先無值) 2、虛實(shí)按地址結(jié)合:虛元按順序借用實(shí)元存儲(chǔ)單元 3、運(yùn)行權(quán)至子程序的第一句,直至遇子程序的END語句返回到主調(diào)程序: 運(yùn)行權(quán)返回至CALL語句的下一個(gè)語句 虛實(shí)脫離結(jié)合,但子程序運(yùn)行時(shí)造成的實(shí)元值的改變將保留。,調(diào)用的執(zhí)行過程,.,28,Program main Implicit none Integer:M,N,K,L Read*,M,N CALL S(M,N,K,L) PRINT*,K,L END,SUBROUTIEN S(M,N,K

17、,L) IMPLICIT NONE INTEGER:M,N,K,L K=M+N L=M-N END,例:編寫子例行子程序求K=M+N,L=M-N 主程序輸入2,3調(diào)用子程序求2+3,2-3的值。,.,29,PROGRAM MAIN IMPLICIT NONE INTEGER:X,Y CALL SUB(X,X,Y) CALL SUB(X,Y,Y) END,SUBROUTINE SUB(X,Y,Z) IMPLICIT NONE INTEGER:X,Y,Z,I I=1 X=3*I;Y=2*I;Z=X+Y PRINT*,X,Y,Z END,閱讀程序:畫虛實(shí)結(jié)合表,注意:一個(gè)變量只有一個(gè)存儲(chǔ)單元 按順序

18、結(jié)合,不是按名結(jié)合,.,30,外部子程序:包含外部的FUNCTION子程序和 外部的 SUBROUTION子程序 均是一個(gè)獨(dú)立的程序單位,內(nèi)部子過程:包含內(nèi)部的FUNCTION子程序和 內(nèi)部的 SUBROUTION子程序 不是一個(gè)獨(dú)立的程序單位, 包含在其它獨(dú)立程序單位的內(nèi)部,只能給包含它的程序及其他并列的內(nèi)部子程序調(diào)用。,外部FUNCTION、外部SUBROUTINE、模塊單位 主程序單位,6.2.3、6.3.3 內(nèi)部子程序的定義,.,31,1.內(nèi)部子程序的位置 例: PROGRAM NAME 主程序的說明部分 主程序的執(zhí)行部分 CONTAINS 內(nèi)部子程序1 內(nèi)部子程序n END PROG

19、RAM NAME,分隔內(nèi)部過程與包含它的程序單位,.,32,2.內(nèi)部子程序與外部子程序的區(qū)別: 外部子程序獨(dú)立成為一個(gè)程序單位,與其它程序單位分開編譯。 內(nèi)部子程序在其它程序單位內(nèi),和宿主程序單位一起編譯。,.,33,Real:a,b,c !不得說明F的類型 Read*,a,b Print*,f(),c Contains Function f() result(f_result) real:f_resulr f_result=a+b C=a-b+2 Endfunction End 一起編譯,子單位沒有說明A,B,c類型,主、子單位中的變量為同一個(gè)變量(如輸入3,2 則輸出5,3) 但如子程序中

20、重新說明A、B、C的類型為不同變量(輸出0,0),real: f,a,b,c Read*,a,b Print*,f(),c End Function f() result(f_result) real:f_resulr,a,b,c f_result=a+b C=a-b+2 End 主、子單位分開編譯,變量A,B,c為不同的變量(輸出0,0),內(nèi)部函數(shù) 類型,外部函數(shù) 類型,.,34,內(nèi)部函數(shù)的類型不得在主調(diào)程序中說明 外部函數(shù)的類型如無接口塊必須在主調(diào)程序中說明,函數(shù)名的類型說明的區(qū)別,非虛元變量的類型說明區(qū)別,內(nèi)部函數(shù): 與主調(diào)程序同名的非虛元變量,如不說明,為同一個(gè)變量, 與主調(diào)程序同名的

21、非虛元變量,如說明,為不同變量,只能在內(nèi)部子程序中使用。 虛元為局部名,一定要說明。 外部函數(shù):所有變量均需說明類型, 不管是否與主調(diào)程序同名,均是不同的變量。,.,35,1)結(jié)束語句為ENDFUNCTION或 ENDSUBROUTINE 2)內(nèi)部子程序中不得再含有內(nèi)部子程序 3)內(nèi)部子程序名為局部名,不得作為實(shí)元 4)內(nèi)部子程序只能給包含它的程序及其他并列的內(nèi)部子程序調(diào)用。 5)內(nèi)部子程序與外部子程序同名時(shí),內(nèi)部子程序優(yōu)先調(diào)用 除非有EXTERNAL屬性或接口。,其它的區(qū)別,.,36,例6-3 編寫一個(gè)程序,從鍵盤上輸入A、B、C,求F1=(F(A)+F(B)+F(C)/3的值,其中:,在編

22、寫程序時(shí),將函數(shù)F(x)編寫成一個(gè)內(nèi)部函數(shù)子程序,供宿主(這里是主程序)調(diào)用。,.,37,PROGRAM EXAM6_3 IMPLICIT NONE REAL : A,B,C,F1 !不能說明內(nèi)部函數(shù)名FUNC READ*,A,B,C F1=(FUNC(A)+FUNC(B)+FUNC(C)/ 3.0 ! 內(nèi)部函數(shù)過程的調(diào)用 PRINT *,F1=,F1 CONTAINS,.,38,FUNCTION FUNC(X) RESULT(FUNC_RE) ! 內(nèi)部函數(shù)過程 REAL : X,FUNC_RE IF(ABS(X) 1.0)THEN FUNC_RE=X*X+SQRT(1.0 X*X ) ELS

23、E FUNC_RE=X*X ENDIF END FUNCTION FUNC END PROGRAM EXAM6_3 若輸入值為2,2,2,則程序執(zhí)行結(jié)果為F1=4.000000。,.,39,例6-10閱讀下面程序,寫出程序運(yùn)行結(jié)果,PROGRAM EXAM10 IMPLICIT NONE INTEGER:A=2,B=5 CALL TT(A,B) PRINT)(1X,A=,I3,2X,B=,I3),A,B CONTAINS SUBROUTINE TT(X,Y) INTEGER:X,Y X=X+Y+A; Y=X+Y+B END SUBROUTINE TT END PROGRAM EXAM10 !A

24、= 9 B=19,.,40,使主調(diào)程序編譯時(shí)能通過接口塊了解到被調(diào)外部過程的名字、虛元名字及它們的類型等信息,簡單接口塊的作用,補(bǔ)充 接口塊(Interface Block ),各獨(dú)立程序單位分開編譯,.,41,最簡接口塊結(jié)構(gòu)形式,INTERFACE 被調(diào)程序的單位定義語句 說明語句 單位結(jié)束語句 END INTERFACE,寫在主調(diào)程序的類型說明語句部分,一般在主調(diào)程序的類型說明語句之前,IMPLICIT語句之后,接口塊的位置,.,42,1、功能簡單的程序,不必寫接口塊。 2、如有接口,主調(diào)程序不必再說明外部函數(shù)名的類型。,有關(guān)接口塊的說明,.,43,例如:利用外部函數(shù)完成X3的計(jì)算。 FU

25、NCTION Func(X)Result(F) REAL: X,F F=X*3 END FUNCTION PROGRAM TEST IMPLICIT NONE REAL:X,Func PRINT *,ENTER x: READ *,x WRITE(*,*) Func(x) END PROGRAM TEST,可不寫接口塊, 但主調(diào)程序需說明函數(shù)名類型,.,44,例如:利用外部函數(shù)完成X3的計(jì)算 FUNCTION Func(X)Result(F) REAL: X,F F=X*3 END FUNCTION PROGRAM TEST IMPLICIT NONE INTERFACE FUNCTION F

26、unc(X)Result(F) REAL:X,F END FUNCTION END INTERFACE REAL:X PRINT *,ENTER x: READ *,x WRITE(*,*) Func(x) END PROGRAM TEST,有接口塊無需說明函數(shù)名類型,否則錯(cuò)誤,1、接口塊的位置 2、接口塊的組成,.,45,補(bǔ)充 子程序的嵌套調(diào)用,.,46,Program main read*,x,y Call s(x,y,z) Print*,z End Subroutine s(a,b,c) c=a+b+f(a,b) End Function f(y,x) result(f_result)

27、F_result=y*x-y end,寫出運(yùn)行結(jié)果:,畫流程圖,.,47,虛子程序(虛過程):虛參數(shù)是一個(gè)子程序名。 此時(shí)對應(yīng)的實(shí)參數(shù)可以是固有函數(shù)名(內(nèi)在函數(shù)),外部子程序名。 、如果實(shí)元為外部子程序名: 主調(diào)程序中用EXTERNAL屬性或接口塊說明,以便讓編譯系統(tǒng)清楚該實(shí)元不是一般變量。 、如果實(shí)元為固有函數(shù)名: 主調(diào)程序中用 INTRINSIC屬性說明。 、虛實(shí)過程的結(jié)合規(guī)則是:等價(jià),6.6.2 子程序名作為虛參數(shù),.,48,REAL,EXTERNAL:SIN X=60.0 CALL F1(X,Y,SIN) END SUBROUTINE F1(X,Y,FUN) Y=FUN(X/180*3

28、.14) PRINT*,X,Y END,FUNCTION SIN(X)result(sin_result) SIN_result=COS(X) END,60.0 0.5,寫出運(yùn)行結(jié)果:,EXTERNAL SIN (FORTRAN 77),SIN為外部函數(shù)名 結(jié)合規(guī)則:等價(jià),.,49,real,intrinsic:cos X=60.0 CALL F1(X,Y,cos) END SUBROUTINE F1(X,Y,FUN) Y=FUN(X/180*3.14) PRINT*,X,Y END,cos為固有函數(shù)名 結(jié)合規(guī)則:等價(jià),.,50,例6.11編寫程序計(jì)算sin4x、cos4x的值(其中x=/6)

29、。,FUNCTION TR (X,F1) RESULT(TR_RESULT) IMPLICIT NONE; REAL: X,TR_RESULT,F1 TR_RESULT=F1(X)*4 END FUNCTION TR PROGRAM EXAM11 REAL,INTRINSIC: SIN,COS REAL : X,Y1,Y2,PI=3.1415926 X=PI/6;Y1=TR (X,SIN);Y2=TR (X,COS) PRINT*,Y1,Y2 END PROGRAM EXAM11,.,51,6.6.3 子程序應(yīng)用舉例,.,52,例6-14 編寫用牛頓迭代法解一元代數(shù)方程f(x)=0的根的通用主

30、程序。然后求f(x)=x3+3x在X=2附近的根。,用牛頓迭代法求解一元代數(shù)方程的基本方法如下: (1) 選擇接近于x的真實(shí)根的一個(gè)近似解x1; (2) 通過x1求出f(x1)及其導(dǎo)數(shù)df(x1); (3) 采用迭代式 x2=x1 f(x1)/df(x1)求出下一個(gè)近似解x2; (4) 當(dāng)兩個(gè)近似根的誤差| x2 x1| 小于等于給定的最大允許誤差EPS時(shí),就認(rèn)為x2為最終解。否則令x1= x2,返回到第(2)步繼續(xù)求下一個(gè)近似根。 有些方程是收斂的,有些方程并不收斂。程序中給出了迭代次數(shù)的上限MAXITS,當(dāng)?shù)螖?shù)超過這個(gè)上限時(shí),即可認(rèn)為解答是不收斂的。,1、牛頓迭代法計(jì)算方程根,.,53

31、,PROGRAM EXAM14 IMPLICIT NONE INTEGER : ITS=0, MAXITS=20! 迭代次數(shù)計(jì)數(shù)器,上限 LOGICAL : FLAG=.FALSE. ! 迭代是否收斂 REAL : EPS=1E-6, X1=2, X2,F,DF DO WHILE(.NOT. FLAG .AND. ITS MAXITS) X2=X1 F(X1)/ DF(X1) ITS=ITS+1 FLAG=ABS(X2-X1)=EPS X1=X2 END DO IF(FLAG)THEN PRINT*, 用牛頓迭代法收斂。根是:, X2 ELSE PRINT*,用牛頓迭代法不收斂。 END IF

32、; END PROGRAM EXAM14,.,54,! 求函數(shù) F(X)的值 FUNCTION F(X) RESULT(F_RE) REAL: F_RE, X F_RE= X*3+3 END FUNCTION F ! 求函數(shù) F(X)的一階導(dǎo)數(shù)值 FUNCTION DF(X) RESULT(DF_RE) REAL: DF_RE,X DF_RE =3*X*2 END FUNCTION DF,.,55,Program main Implicit none real,external:f,df real:x1,eps,maxits,x2,nt read*,x1,eps,maxits x2=nt(x1

33、,eps,maxits,f,df) if(x2=999)then print*,用牛頓迭代法不收斂 else print*,用牛頓迭代法收斂。根是:,x2 endif end program main,例6-14 編寫用牛頓迭代法解一元代數(shù)方程f(x)=0的根的通用子程序。,.,56,function nt(x1,eps,maxits,f,df)result(nt_result) Implicit none real:x1,eps,maxits,f,df,nt_result,x2 integer:its=0 logical:flag=.false. do while(.not.flag.and

34、.itsmaxits) x2=x1-f(x1)/df(x1) its=its+1 flag=abs(x2-x1)=eps x1=x2 enddo if(.not.flag)x2=999 nt_result=x2 end function nt,.,57,! 求函數(shù) F(X)的值 FUNCTION F(X) RESULT(F_RE) REAL: F_RE, X F_RE= X*3+3 END FUNCTION F ! 求函數(shù) F(X)的一階導(dǎo)數(shù)值 FUNCTION DF(X) RESULT(DF_RE) REAL: DF_RE,X DF_RE =3*X*2 END FUNCTION DF,.,58,遞歸調(diào)用是指在子程序內(nèi)直接或間接地調(diào)用自己??梢允沁f歸子例行程序,也可以是遞歸函數(shù)子程序。 遞歸過程的單位定義語句必須以RECURSIVE開頭,11.5 遞歸及其應(yīng)用,.,59,遞歸的分類,Recursive Function func(x) result(f_result) integer: y, z,f_result z=func(y) return(2*z) End function,直接遞歸,

溫馨提示

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

最新文檔

評論

0/150

提交評論