Advanced Numerical Methods 1
ﯽﻟﺎﻌﺗ ﻪﻤﺳﺎﺑ
فاﺪﻫا نﺮﺗﺮﻓ ﻪﭽﺨﯾرﺎﺗ نﺮﺗﺮﻓ نﺎﺑز ﯽﻧﺎﺒﻣ
ﻪﻣﺎﻧﺮﺑ رﺎﺘﺧﺎﺳ تارﻮﺘﺳد ﯽﻓﺮﻌﻣ و ﺎﻫﺮﯿﻔﺘﻣ و هداد ﺲﻨﺟ ﻪﻣﺎﻧﺮﺑ لﺮﺘﻨﮐ سﺎﺳا ﯽﺟوﺮﺧ و يدورو ﺎﻫ لاورﺮﯾز و ﻊﺑاﻮﺗ
لواﺪﺘﻣ تﻼﮑﺸﻣ و ﻞﺋﺎﺴﻣ ﯽﺳرﺮﺑ
ﻪﻧﻮﻤﻧ ﻞﺋﺎﺴﻣ
Advanced Numerical Methods 3
ﻪﻫد رد ﻻﺎﺑ ﺢﻄﺳ ﯽﺴﯾﻮﻧ ﻪﻣﺎﻧﺮﺑ نﺎﺑز ﮏﯾ ناﻮﻨﻋ ﻪﺑ نﺮﺗﺮﻓ ﺶﯾاﺪﯿﭘ ياﺪﺘﺑا زا
1950
نﺎﺑز ﻦﯾا
ﺖﺳا ﻪﺘﺷاد يدﺎﯾز ﻪﻌﺳﻮﺗ و تاﺮﯿﯿﻐﺗ .
نﺮﺗﺮﻓ نﺎﺑز يﺎﻫ ﻪﺨﺴﻧ
FORTRAN 1957
FORTRAN II
FORTRAN IV
FORTRAN 66 (released as ANSI standard in 1966)
FORTRAN 77 (ANSI standard in 1977)
FORTRAN 90 (ANSI standard in 1990)
FORTRAN 95 (ANSI standard in 1995)
FORTRAN 2003 (latest ANSI standard version)
ﺪﻧا هﺪﺷ ﻪﺘﺷﻮﻧ نﺮﺗﺮﻓ ﺎﺑ دﻮﺟﻮﻣ ﯽﺳﺪﻨﻬﻣ يﺎﻫ ﻪﻣﺎﻧﺮﺑ زا يا هﺪﻤﻋ ﺖﻤﺴﻗ
.
ﯽﺴﯾﻮﻧ ﻪﻣﺎﻧﺮﺑ و ﻪﻠﺌﺴﻣ ﻞﺣ نآ ﻞﯿﻠﺤﺗ و ﻪﻠﺌﺴﻣ ﻖﯿﻗد ﻦﯿﯿﻌﺗ
ﻢﺘﯾرﻮﮕﻟا ﯽﺣاﺮﻃ و ﺎﻫ هداد ﯽﻫﺪﻧﺎﻣزﺎﺳ
ﺎﻫ هداد ﯽﻫﺪﻧﺎﻣزﺎﺳﻢﺘﯾرﻮﮕﻟا ﯽﺣاﺮﻃ ترﺎﭼﻮﻠﻓ ﻪﯿﻬﺗ و ﻢﺘﯾرﻮﮕﻟا ﻪﺑ مزﻻ تﺎﯿﺋﺰﺟ ندوﺰﻓا
ﻪﻣﺎﻧﺮﺑ ﺪﮐ ﻦﺘﺷﻮﻧ
ﻪﻣﺎﻧﺮﺑ ﺖﺴﺗ و اﺮﺟا
ﻪﻌﺳﻮﺗ و يراﺪﻬﮕﻧ
Advanced Numerical Methods 5 FORTRAN
Program
FORTRAN Compiler
Libraries Link with
Libraries Executable File
Source Code Object Code Executable Code
نﺮﺗﺮﻓ نﺎﺑز ﯽﻧﺎﺒﻣ ﺎﻫﺮﯿﻐﺘﻣ و ﺎﻫ ﺖﺑﺎﺛ ،هداد ﺲﻨﺟ
نﺮﺗﺮﻓ
5 دراد ﻪﯾﺎﭘ هداد ﺲﻨﺟ عﻮﻧ :
ﺢﯿﺤﺻ راﺪﻘﻣ INTEGER
يرﺎﺸﻋا راﺪﻘﻣ
REAL
ﻂﻠﺘﺨﻣ راﺪﻘﻣ COMPLEX
ﯽﻓﺮﺣ راﺪﻘﻣ CHARACTER
ﯽﻘﻄﻨﻣ راﺪﻘﻣ LOGICAL
يﺎﻫ ﺲﻨﺟ
INTEGERو ﺪﻨﻫد ﯽﻣ صﺎﺼﺘﺧا هدﺎﻔﺘﺳا ياﺮﺑ ار ﺎﻫ ﺖﯾﺎﺑ زا ﯽﺼﺨﺸﻣ داﺪﻌﺗ
REAL.
Default is: INTEGER*4and REAL*4
DOUBLE PRECISIONis same as REAL*8
Advanced Numerical Methods 7
ﺖﺑاﻮﺛ و ﺎﻫﺮﯿﻐﺘﻣ نﻼﻋا
ﯽﺘﻗو
يﺮﯿﻐﺘﻣ رد نﺮﺗﺮﻓ هدﺎﻔﺘﺳا
،دﻮﺷ ﯽﻣ ﺮﻠﯾﺎﭙﻣﺎﮐ ﻪﺑ نآ ﮏﯾ ﻞﺤﻣ ﻪﻈﻓﺎﺣ صﺎﺼﺘﺧا ﺪﻫد ﯽﻣ
. . دﻮﺷ ﯽﻣ هﺮﯿﺧذ ﻪﻈﻓﺎﺣ ﻞﺤﻣ نآ رد ﺖﺳا هﺪﺷ هداد صﺎﺼﺘﺧا ﺮﯿﻐﺘﻣ نآ ﻪﺑ ﻪﮐ يراﺪﻘﻣ ﺲﻨﺟ
ﮏﯾ ﺮﯿﻐﺘﻣ نﺎﯿﺑ هﺪﻨﻨﮐ عﻮﻧ يا هداد ﺖﺳا ﻪﮐ رد ﻞﺤﻣ ﻪﻈﻓﺎﺣ ﯽﺻﺎﺼﺘﺧا نآ
ﺮﯿﻐﺘﻣ
راﺮﻗ . دﺮﮐ نﻼﻋا ﺮﻠﯾﺎﭙﻣﺎﮐ ﻪﺑ ار ﺮﯿﻐﺘﻣ ﺮﻫ ﺲﻨﺟ ﻪﮐ ﺖﺳا مزﻻ ﻦﯾاﺮﺑﺎﻨﺑ . دﻮﺷ ﯽﻣ هداد
INTEGER :: NumValue, Sum REAL :: Velocity, Mass REAL(8) :: Time
CHARACTER(15) :: FirstName REAL DIMENSION(50) :: Vector
ﻞﺒﻗ زا نﻼﻋا ﮏﯾ
،ﺮﯿﻐﺘﻣ مزﻻ ﺖﺳا ﻪﺑ ﻪﮐ ﻦﯾا نآ ﺮﯿﻐﺘﻣ رد ﻪﻣﺎﻧﺮﺑ ﻪﭼ يراﺪﻘﻣ ار ﺪﻫاﻮﺧ ﺖﺷاد بﻮﺧ
.ﺪﺷﺪﻫاﻮﺧﺎﻄﺧدﺎﺠﯾاﺚﻋﺎﺑﺮﯿﻐﺘﻣﮏﯾﻪﺑنﻮﮕﻤﻫﺎﻧﺮﯾدﺎﻘﻣنداد. دﻮﺷهﺪﯿﺸﯾﺪﻧا
نﺮﺗﺮﻓ نﺎﺑز ﯽﻧﺎﺒﻣ ﺢﯾﺮﺻ و ﯽﻨﻤﺿ يﺎﻫ ن ﻼﻋا
رد
نﺮﺗﺮﻓ ﻦﯾا نﺎﮑﻣا دﻮﺟو دراد ﻪﮐ يﺮﯿﻐﺘﻣ ار نوﺪﺑ نﻼﻋا ﺲﻨﺟ نآ رد ﻪﻣﺎﻧﺮﺑ هدﺎﻔﺘﺳا دﺮﮐ
. : دﻮﺷ ﯽﻣ ﻦﯿﯿﻌﺗ نآ مﺎﻧ لوا فﺮﺣ ﻪﺑ ﻪﺟﻮﺗ ﺎﺑ ﺮﯿﻐﺘﻣ ﺲﻨﺟ ﺖﻟﺎﺣ ﻦﯾا رد
I-N defineINTEGERvariable
A-H, O-Z defineREALvariables
ﺎﺑ
هدﺎﻔﺘﺳا زا رﻮﺘﺳد Implicit ناﻮﺗ ﯽﻣ
ﺎﻫﺮﯿﻐﺘﻣ ار ترﻮﺻ ﻪﺑ ﯽﻨﻤﺿ نﻼﻋا دﺮﮐ :
IMPLICIT REAL (A-Z) IMPLICIT CHARACTER*2 (W) IMPLICIT DOUBLE PRECISION (D)
نﻼﻋا
ﺢﯾﺮﺻ ﯽﻣﺎﻤﺗ ﺎﻫﺮﯿﻐﺘﻣ : IMPLICIT NONE
ﺪﻫد ﯽﻣ ﺮﮐﺬﺗ ار نآ ﯽﯾﺎﻄﺧ مﺎﻐﯿﭘ ﺎﺑ ﺪﺷﺎﺑ هﺪﺸﻧ نﻼﻋا يﺮﯿﻐﺘﻣ ﺮﮔا ترﻮﺻ ﻦﯾا رد
.
Advanced Numerical Methods 9
ﺎﻫﺮﯿﻐﺘﻣ ﻪﺑ ﻪﯿﻟوا ﯽﻫد راﺪﻘﻣ
REAL :: Velocity=20.5, Mass=2.0, Weight=19.62يﺎﻫ ﺖﺑﺎﺛ
ﺎﺑ
مﺎﻧ : ﺖﯿﻠﺑﺎﻗ
PARAMETERREAL, PARAMETER :: Pi=3.1415927, TwoPi=2.0*Pi, Pio2=Pi/2 ﻦﯾا ﺖﺑاﻮﺛ ﻞﺑﺎﻗ ﺮﯿﯿﻐﺗ ﺪﻨﺘﺴﯿﻧ .
ﯽﺿﺎﯾر تﺎﯿﻠﻤﻋ
ﺖﻣﻼﻋ ﻊﺑﺎﺗ
**
ناﻮﺗ
*
بﺮﺿ
/
ﻢﯿﺴﻘﺗ
+
ﻊﻤﺟ
-
ﻖﯾﺮﻔﺗ
نﺮﺗﺮﻓ نﺎﺑز ﯽﻧﺎﺒﻣ ﯽﺿﺎﯾر تﺎﯿﻠﻤﻋ
B**2-4.0*A*C 9.0/4.0 2.25 9/4 2
تﺎﯿﻠﻤﻋ مﺪﻘﺗ ﺪﻋاﻮﻗ
ﺖﺴﺨﻧ ﻞﻤﻋ ﻪﺑ ناﻮﺗ مﺎﺠﻧا ﯽﻣ دﻮﺷ . ﻪﭽﻧﺎﻨﭼ ﺶﯿﺑ زا ﮏﯾ ناﻮﺗ ﺖﺸﭘ ﻢﻫﺮﺳ راﺮﻗ ﺪﻧﺮﯿﮔ ﻞﻤﻋﻪﺑ .دﻮﺷﯽﻣمﺎﺠﻧاﭗﭼﻪﺑﺖﺳارزانﺪﻧﺎﺳرناﻮﺗ
ﺲﭘ زا
،ناﻮﺗ مﺪﻘﺗ تﺎﯿﻠﻤﻋ ﺎﺑ بﺮﺿ و ﻢﯿﺴﻘﺗ ﺖﺳا . رد ﻞﻤﻋ يﺎﻫ بﺮﺿ و ﻢﯿﺴﻘﺗ ﯽﻟاﻮﺘﻣ
ﻞﻤﻋ .دﻮﺷ ﯽﻣمﺎﭽﻧاﺖﺳارﻪﺑﭗﭼزاﻢﯿﺴﻘﺗﺎﯾ وبﺮﺿ
ﻞﻤﻋ ﻊﻤﺟ و ﻢﯿﺴﻘﺗ رد ﺮﺧآ ﺮﺳ مﺎﺠﻧا دﻮﺷ ﯽﻣ . ﺐﯿﺗﺮﺗ يﺎﻫ ﻞﻤﻋ ﻊﻤﺟ و ﺎﯾ ﻖﯾﺮﻔﺗ ﺰﯿﻧ زا ﭗﭼ
ﻪﺑ .ﺖﺳاﺖﺳار
ﺎﺑ هدﺎﻔﺘﺳا زا ﺰﺘﻧاﺮﭘ ناﻮﺗ ﯽﻣ مﺪﻘﺗ يدﺎﻋ تﺎﯿﻠﻤﻋ ار ﺮﯿﯿﻐﺗ داد .
Advanced Numerical Methods 11
ﯽﺿﺎﯾر ﻊﺑاﻮﺗ
ﻊﺑﺎﺗ مﺎﻧ ﻊﺑﺎﺗ رﺎﮐ حﺮﺷ
ABS(x)
ﻖﻠﻄﻣ رﺪﻗCOS(x), SIN(x),Tan(x)
(نﺎﯾدار ﺐﺴﺣ ﺮﺑx) ﯽﺗﺎﺜﻠﺜﻣ ﻊﺑاﻮﺗINT(x)
x ﯽﻘﯿﻘﺣ ﺖﻤﺴﻗFLOOR(x)
X يوﺎﺴﻣ ﺎﯾ ﺮﺘﮑﭼﻮﮐ ﺢﯿﺤﺻ دﺪﻋ ﻦﯾﺮﺘﮔرﺰﺑMOD(x,y)
y ﺮﺑx ﺢﯿﺤﺻEXP(x)
ناﻮﺗ ﻊﺑﺎﺗLOG(x)
ﯽﻌﯿﺒﻃ ﻢﺘﯾرﺎﮕﻟSQRT(x)
رﺬﺟMAX or MIN(x1,…,x2)
ﻢﻤﯿﻨﯿﻣ و ﻢﻤﯾﺰﮐﺎﻣنﺮﺗﺮﻓ نﺎﺑز ﯽﻧﺎﺒﻣ يا ﻪﻄﺑار تارﺎﺒﻋ )
Relational Expressions (
يا ﻪﻄﺑار ﻢﺋﻼﻋ ﻪﻄﺑار
.LT. or <
زا ﺖﺳاﺮﺗ ﮏﭼﻮﮐ.LE. or <=
زا ﺖﺳا يوﺎﺴﻣ ﺎﯾﺮﺗ ﮏﭼﻮﮐ.EQ. or ==
ﺎﺑ ﺖﺳا يوﺎﺴﻣ.NE. or /=
ﺎﺑ ﺖﺳا يوﺎﺴﻣ ﺎﻧ.GT. or >
زا ﺖﺳاﺮﺗ گرﺰﺑ.GE. or >=
زا ﺖﺳا يوﺎﺴﻣ ﺎﯾﺮﺗ گرﺰﺑ ﺪﻨﺘﺴﻫ ﻪﺴﯾﺎﻘﻣ ﻞﺑﺎﻗ ﺰﯿﻧ ﯽﻓﺮﺣ يﺎﻫ ﻪﺘﺷر .
ود ترﺎﺒﻋ يدﺪﻋ ﺎﯾ ﺮﯿﻏ يدﺪﻋ ﺎﺑ ﺮﮕﯾﺪﮑﯾ ﻪﺴﯾﺎﻘﻣ هﺪﺷ ﺎﺗ مﻮﻠﻌﻣ دﻮﺷ
ﻪﮐ . ﻂﻠﻏ ﺎﯾ ﺖﺳا ﺢﯿﺤﺻ ﯽﺑﺎﺨﺘﻧا ﻪﻄﺑار
Advanced Numerical Methods 13
ﯽﻘﻄﻨﻣ تارﺎﺒﻋ
)
Logical Expressions (
،ﺮﯾدﺎﻘﻣ
.TRUE.ﺎﯾ
.FALSE.ﺪﻨﻫاﻮﺧ دﻮﺑ .
ﯽﻘﻄﻨﻣ ﺖﻣﻼﻋ لﺎﺜﻣ مﻮﻬﻔﻣ
.AND. A .AND. B ﯽﻘﻄﻨﻣ ﯽﻔﻄﻋ ﺐﯿﮐﺮﺗ
.OR. A .OR. B ﯽﻘﻄﻨﻣ ﯽﻠﺼﻓ ﺐﯿﮐﺮﺗ
.NEQV. A .NEQV. B ﯽﻘﻄﻨﻣ يزرا ﻢﻫ مﺪﻋ
.EQV. A .EQV. B ﯽﻘﻄﻨﻣ يزرا ﻢﻫ
.NOT. .NOT. A ﯽﻘﻄﻨﻣ ﯽﻔﻧ
نﺮﺗﺮﻓ نﺎﺑز ﯽﻧﺎﺒﻣ بﺎﺴﺘﻧا ﻪﻠﻤﺟ )
Assignments Statement (
دور ﯽﻣ رﺎﮐ ﻪﺑ ﺪﺷﺎﺑ مزﻻ ﻪﮐ ﺎﺟﺮﻫ رد ﺎﻫﺮﯿﻐﺘﻣ ﻪﺑ يﺮﯾدﺎﻘﻣ بﺎﺴﺘﻧا ياﺮﺑ بﺎﺴﺘﻧا ﻪﻠﻤﺟ .
INTEGER :: Number, Term
REAL :: Xcoordinate,Ycoordinate CHARACTER (5)::String
! Assignments Statement Xcoordinate = 5.23
Ycoordinate = sqrt(25.0) Number=17
Term = Number / 3 + 2
Xcoordinate = 2.0 * Xcoordinate String = ”alpha”
Advanced Numerical Methods 15
يدورو
/ ﯽﺟوﺮﺧ )
List-Directed I/O (
هدﺎﺳ ﺖﺳا ﺮﯾز ﻞﮑﺷ ﻪﺑ ﯽﺟوﺮﺧ ﻪﺑ ﺎﻫ هداد لﺎﺳرا ﺖﻟﺎﺣ ﻦﯾﺮﺗ :
PRINT*, “Enter a float and an integer:”
READ*, x, j
PRINT*, “float = “, x, “ integer = “, j
WRITE (*,*) “Enter a float and an integer:”
READ (*,*) x, j
WRITE (*,*), “float = “, x, “ integer = “, j
ﯽﻟﺎﺧ ﯽﺟوﺮﺧ ﻂﺧ ﮏﯾ دﺎﺠﯾا ياﺮﺑ :
WRITE (*,*) PRINT*
نﺮﺗﺮﻓ نﺎﺑز ﯽﻧﺎﺒﻣ ﻪﻣﺎﻧﺮﺑ ﻞﮑﺷ و ﺐﯿﮐﺮﺗ
ﻪﻣﺎﻧﺮﺑ ﺮﺘﯿﺗ
)
Heading (
ﺎﻫ ﻒﯾﺮﻌﺗ و تﺎﻧﻼﻋا ﺖﻤﺴﻗ
)
Specification part (
ﻪﻣﺎﻧﺮﺑ ﯽﯾاﺮﺟا ﺖﻤﺴﻗ
)
Subprogram part (
ﻪﻣﺎﻧﺮﺑ ﯽﻧﺎﯾﺎﭘ ﻪﻠﻤﺟ
)
END PROGRAM statement
(
Advanced Numerical Methods 17
ﻪﻣﺎﻧﺮﺑ ﻞﮑﺷ و ﺐﯿﮐﺮﺗ
PROGRAM name !heading!
!specification part IMPLICIT NONE
REAL :: Xcoordinate,Ycoordinate, Hight, Velocity,&
Time
INTEGER :: Number, Term CHARACTER (5)::String
!
!execution part Xcoordinate = 5.23
Ycoordinate = sqrt(25.0)
Number=17; Term = Number / 3 + 2 Xcoordinate = 2.0 * Xcoordinate String = ”alpha”
END PROGRAM name !end of program
نﺮﺗﺮﻓ نﺎﺑز ﯽﻧﺎﺒﻣ ﻪﻣﺎﻧﺮﺑ ﻞﮑﺷ و ﺐﯿﮐﺮﺗ
PROGRAM circle_area IMPLICIT NONE
!reads a value representing the radius of a circle,
!then calculates and writes out the area of the circle.
REAL :: radius, area
REAL, PARAMETER :: pi=3.141592 READ (5,*) radius
area = pi*radius*radius !calculate area WRITE (6,*) area
END PROGRAM circle_area
Advanced Numerical Methods 19
ﻪﻣﺎﻧﺮﺑ ﻞﮑﺷ و ﺐﯿﮐﺮﺗ
PROGRAM circle_area IMPLICIT NONE
!reads a value representing the radius of a circle,
!then calculates and writes out the area of the circle.
REAL :: radius, area
REAL, PARAMETER :: pi=3.141592 READ (5,*) radius
area = pi*radius*radius !calculate area WRITE (6,*) area
END PROGRAM circle_area
ﯽﻟﺮﺘﻨﮐ ﻦﯿﻣاﺮﻓ ﯽﻃﺮﺷ يﺎﻫرﺎﺘﺧﺎﺳ )
IF, IF-ELSE, … (
CASE
ﻪﻘﻠﺣ
) يﺎﻫرﺎﺘﺧﺎﺳ DO, DO WHILE
(
CONTINUE
يا ﻪﺧﺎﺷ تارﺎﺒﻋ
GOTO
PAUSE
STOP
CALL
RETURN
END
Advanced Numerical Methods 21
ﯽﻃﺮﺷ يﺎﻫرﺎﺘﺧﺎﺳ
رﺎﺘﺧﺎﺳ
هدﺎﺳ IF
Syntax: IF (logical_expression) statement
ﻦﮐ رﻮﺒﻋ طﺮﺷ وﺮﯿﭘ ﻪﻠﻤﺟ زا ﻪﻧ ﺮﮔا و ﻦﮐ اﺮﺟا ار طﺮﺷ وﺮﯿﭘ ﻪﻠﻤﺟ ،دﻮﺑ راﺮﻗﺮﺑ ﯽﻘﻄﻨﻣ طﺮﺷ ﺮﮔا .
Example: IF (Key.LT.0) x=0
Syntax: IF (logical_expression) THEN statement-sequence
END IF
Key < 0 no
yes x=0
ﻪﻣﺎﻧﺮﺑ ﯽﺑﺎﺨﺘﻧا ياﺮﺟا ﯽﻃﺮﺷ يﺎﻫرﺎﺘﺧﺎﺳ
رﺎﺘﺧﺎﺳ
IF THEN ELSE
Syntax: IF (logical_expression) THEN statement1(s)
ELSE
statement2(s) ENDIF
Example: IF (Key.EQ.0) THEN X=X+1
ELSE X=X+2 ENDIF
Key = 0 no
yes x=x+1
x=x+2
Advanced Numerical Methods 23
رﺎﺘﺧﺎﺳ
IF ELSE IF
Syntax: IF (logical_expr1) THEN statement1(s)
ELSE IF (logical_expr2) THEN statement2(s)
ELSE
statement3(s) ENDIF
Example:
10 IF (KSTAT.EQ.1) THEN CLASS=‘FRESHMAN’
ELSE IF (KSTAT.EQ.2) THEN CLASS=‘SOPHOMORE’
ELSE IF (KSTAT.EQ.3) THEN CLASS=‘JUNIOR’
ELSE IF (KSTAT.EQ.4) THEN CLASS=‘SENIOR’
ELSE
CLASS=‘UNKNOWN’
ENDIF
KEY= 1 no
yes X=X+1
X=X+2 KEY= 2
KEY= N no
…
X=X+N yes
yes
no X=-1
ﻪﻣﺎﻧﺮﺑ رد راﺮﮑﺗ تﺎﯿﻠﻤﻋ ﻦﯿﻌﻣ داﺪﻌﺗ ﻪﺑ راﺮﮑﺗ
) ( DO
ﻪﺑ ﻪﻘﻠﺣ ﻪﻧﺪﺑ و دﻮﺷ ﯽﻣ ﻪﺘﺧﺎﺳ ﻪﻘﻠﺣ هﺪﻧرﺎﻤﺷ ﮏﯾ زا هدﺎﻔﺘﺳا ﺎﺑ ﻪﻘﻠﺣ ،راﺮﮑﺗ عﻮﻧ ﻦﯾا رد ددﺮﮔ ﯽﻣ راﺮﮑﺗ ،دﻮﺷ ﯽﻣ لﺮﺘﻨﮐ هﺪﻧرﺎﻤﺷ راﺪﻘﻣ ﺎﺑ ﻪﮐ تﺎﻌﻓد داﺪﻌﺗ .
ﯽﻘﻄﻨﻣ ﻂﯾاﺮﺷ نﺪﺷ ﻖﻘﺤﻣ ترﻮﺻ رد راﺮﮑﺗ
)
WHILE DO (
دﻮﺸﯿﻣ دﺎﺠﯾا ،راﺮﮑﺗ طﺮﺷ ﺎﯾ ،ﯽﻘﻄﻨﻣ ترﺎﺒﻋ ﮏﯾ زا هدﺎﻔﺘﺳا ﺎﺑ ﻪﻘﻠﺣ ،راﺮﮑﺗ ﻦﯾا رد .
رد .ﺖﺳا ﻪﻘﻠﺣ ﻪﻧﺪﺑ تﻼﻤﺟ ياﺮﺟا هﺪﻨﻨﮐ ﻦﯿﯿﻌﺗ ﯽﻘﻄﻨﻣ ترﺎﺒﻋ نآ ترﻮﺻ ﻦﯾا
Advanced Numerical Methods 25
ﻦﯿﻌﻣ داﺪﻌﺗ ﻪﺑ راﺮﮑﺗ
)
( DO
Syntax: DO control-variable=initial-value,limit,stepsize statement-sequence
END DO
DO 100 K=2,10,2 PRINT*,A(K) 100 END DO
DO 100 K=2,10,2 PRINT*,A(K) 100 CONTINUE
SUM=0
READ *, Number DO I=1,Number
Sum=Sum+I END DO
ﻪﻣﺎﻧﺮﺑ رد راﺮﮑﺗ تﺎﯿﻠﻤﻋ ﻮﺗ رد ﻮﺗ راﺮﮑﺗ
INTEGER:: I,J,K
DO I=1,3
DO J=1, 3 DO K=1, 3
PRINT *, I+J+K END DO
END DO
END DO
Advanced Numerical Methods 27
ﯽﻘﻄﻨﻣ ﻂﯾاﺮﺷ نﺪﺷ ﻖﻘﺤﻣ ترﻮﺻ رد راﺮﮑﺗ
)
WHILE DO (
Syntax: WHILE (logical_expression) DO statement-sequence
END WHILE
READ*,R
WHILE (R.GE.0) DO VOL=2*PI*R**2*CLEN READ*,R
END WHILE
ﺮﮕﯾد هﻮﯿﺷ )
دﻮﺷ ﯽﻣ اﺮﺟا ﺮﮕﯾد رﺎﺑ ﮏﯾ ﻞﻗاﺪﺣ ﻪﻘﻠﺣ ﻪﻧﺪﺑ (.
Syntax: DO
statement-sequence
IF (logical_expression) EXIT (CYCLE) END DO
ﺎﻫ لاورﺮﯾز و ﻊﺑاﻮﺗ زا هدﺎﻔﺘﺳا ﺎﺑ ﯽﺴﯾﻮﻧ ﻪﻣﺎﻧﺮﺑ ﻊﺑﺎﺗ
) Function (
ﺪﻧادﺮﮔ ﯽﻣ زﺎﺑ ﺖﺳا هﺪﻧاﻮﺧاﺮﻓ ار نآ ﻪﮐ يا ﻪﻣﺎﻧﺮﺑ ﻪﺑ ار راﺪﻘﻣ ﮏﯾ .
ﺪﻧادﺮﮔ ﯽﻣ زﺎﺑ ﻊﺑﺎﺗ مﺎﻧ ﻖﯾﺮﻃ زا ار دﻮﺧ راﺪﻘﻣ ﻊﺑﺎﺗ .
دﻮﺷ ﯽﻣ هﺪﻧاﻮﺧاﺮﻓ ترﺎﺒﻋ ﮏﯾ رد نآ مﺎﻧ زا هدﺎﻔﺘﺳا ﺎﺑ ﻊﺑﺎﺗ .
لاورﺮﯾز
)
Subroutine (
ﺪﻧادﺮﮔ ﯽﻣ ﺮﺑ ار راﺪﻘﻣ ﮏﯾ زا ﺶﯿﺑ ﺐﻠﻏا .
ﻖﯾﺮﻃ زا ﺖﺳا هﺪﻧاﻮﺧاﺮﻓ ار لاورﺮﯾز ﻪﮐ يا ﻪﻣﺎﻧﺮﺑ ﻪﺑ هﺪﺷ هﺪﻧادﺮﮔزﺎﺑ ﺮﯾدﺎﻘﻣ ددﺮﮔ ﯽﻣ لدﺎﺒﺗ لاور ﺮﯾز رد ﻪﺘﻓر رﺎﮑﺑ يﺎﻫﺮﺘﻣارﺎﭘ .
رﻮﺘﺳد ﻖﯾﺮﻃ زا لاور ﺮﯾز دﻮﺷ ﯽﻣ ﯽﻧاﻮﺧﺮﻓCALL
.
Advanced Numerical Methods 29
ﻊﺑﺎﺗ رﺎﺘﺧﺎﺳ
)
Function (
Syntax: [type] FUNCTION fname(p1,p2, … pN)
EXAMPLE:
REAL FUNCTION fahrenheit (c) REAL:: c
fahrenheit = (9.0/5.0)*c + 32.0 ! Convert Celsius to fahrenheit END FUNCTION fahrenheit
USE: f = fahrenheit (0.0)
دﻮﺷ نﻼﻋا ﺪﯾﺎﺑ ﺖﺳا هﺪﻧاﻮﺧاﺮﻓ ار ﻊﺑﺎﺗ ﻪﮐ يا ﻪﻣﺎﻧﺮﺑ رد ﻊﺑﺎﺗ مﺎﻧ .
REAL :: fahrenheit
ﺎﻫ لاورﺮﯾز و ﻊﺑاﻮﺗ زا هدﺎﻔﺘﺳا ﺎﺑ ﯽﺴﯾﻮﻧ ﻪﻣﺎﻧﺮﺑ ﻊﺑﺎﺗ رﺎﺘﺧﺎﺳ
) Function (
يا ﻪﻠﻤﺟ ﮏﺗ ﻊﺑاﻮﺗ ﻒﯾﺮﻌﺗ ياﺮﺑ هﺎﺗﻮﮐ و ﻊﯾﺮﺳ شور
PROGRAM MAIN REAL A,B,C
FUNC(X)=A*X**2-B*X+C ...program...
ANS=FUNC(4.2)+1.2 ...
END PROGRAM MAIN
Advanced Numerical Methods 31
لاورﺮﯾز رﺎﺘﺧﺎﺳ
)
Subroutine (
Syntax: SUBROUTINE fname(p1,p2, … pN)
EXAMPLE:
SUBROUTINE temp_conversion(celsius, fahrenheit) REAL:: celsius, fahrenheit
fahrenheit = (9.0/5.0)*celsius + 32.0 END SUBROUTINE temp_conversion USE: CALL temp_conversion(c, f)
ﺖﺴﯿﻧ ﯽﻘﯿﻘﺣ يﺎﻫﺮﺘﻣارﺎﭘ و ﯽﮕﺘﺧﺎﺳ يﺎﻫﺮﺘﻣارﺎﭘ مﺎﻧ ندﻮﺑ ﯽﮑﯾ ﻪﺑ يزﺎﯿﻧ .
ﺎﻫ لاورﺮﯾز و ﻊﺑاﻮﺗ زا هدﺎﻔﺘﺳا ﺎﺑ ﯽﺴﯾﻮﻧ ﻪﻣﺎﻧﺮﺑ ﺎﻫ لاورﺮﯾز و ﻊﺑاﻮﺗ يﺮﯿﮔ راﺮﻗ نﺎﮑﻣ
PROGRAM MAIN
...program body...
END
REAL FUNCTION AVG3(A,B,C) ...function body...
END
SUBROUTINE AVG3S(A,B,C,AV) ...subroutine body...
END
Advanced Numerical Methods 33 PROGRAMConsole1
IMPLICIT NONE
REAL:: xl, xu, es, xr, ea, Bisection INTEGER:: imax, iter
es=1.e-6; imax=100
! Initial Guess xl=0.0; xu=3.0
!xr=xl;ea=100.0
! Call Function Bisection
xr=Bisection(xl,xu,es,imax,xr,iter,ea) WRITE(*,*), "The root of equation is = ", xr PAUSE
END PROGRAM Console1
!
FUNCTIONBisection(xl, xu, es, imax, xr, iter, ea) IMPLICIT NONE
REAL:: xl, xu, es, xr, ea, Func, Bisection, x, xrold, test INTEGER:: imax, iter
iter=0 DO xrold=xr
xr=(xl+xu)/2.0 iter=iter+1
لﺎﺜﻣ : ندﺮﮐ ﻒﺼﻧ شور ﻂﺳﻮﺗ ﯽﺑﺎﯾ ﻪﺸﯾر
IF(xr/= 0.0) THEN
ea=ABS((xr-xrold)/xr)*100 END IF
test=Func(xl)*Func(xr) IF(test < 0.0) THEN
xu=xr
ELSE IF (test > 0.0) THEN xl=xr
ELSE ea=0.0 END IF
IF(ea<es .OR. iter>=imax) EXIT END DO
Bisection=xr
WRITE(*,*), "The number of iteration is = ", iter WRITE(*,*), "The percent of relative error is = ", ea END FUNCTIONBisection
!
REAL FUNCTION Func(x) IMPLICIT NONE