FORTRAN子程序ppt课件
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法:弦截法的基本思路与“二分法” f(x) 相似,它是取f(x1)与f(x2)连线与x轴的
f(x2)
交点x,从(x1,x)与(x,x2)两个区间中舍
去一个,舍取的方法为: 1、如果f(x)与f(x1)异号,则用x作为新 的x2,这就舍去了原来的(x,x2)区间。 2、如果f(x)与f(x1)同号,则用x作为新
24
精选课件ppt
7.2 函数子程序(外部函数)
语句函数只能用一个语句定义,而且只 能在定义它的程序段中使用。
分析:函数f(X)是用两个表达式定义的,不 能用简单的语句函数来表示。怎么办? FORTRAN提供了一种方法,就是把函数的 计算部份从程序中独立出来,并按一定的格 式编成一个单独的子程序段,称为外部函数 或函数子程序。
(4) 编译独立。如果每个子程序是以一个 文件存贮的。则可以单独进行编译。 这样使得便于编写,便于维护,并能 实现软件共享。
函数值取x2的的 符号,取x1的绝 对值
X2=X
FX2=FX
END IF
IF((ABS(X1-X2).GT.1E-5).AND.(ABS(FX).GT.1E-6))
& GOTO 10
IF(FX.GT.1E-6)X=(X1+X2)/2.0
WRITE(*,*)X
15
END
精选课件ppt
例 2:用语句函数采用弦截法求X3-2X2-7X+4=0的根。
实元和对应的虚元进行结合,即实元的值传 给虚元(称为虚实结合过程);
求表达式e的值;
11
精选课件ppt
语句函数的引用过程
根据语句函数名的类型和表达式e求值结果,按 赋值规则得到函数引用的值由函数名带回,并 控制返回到原表达式函数引用处,继续计算表 达式值。
这一过程是由计算机系统来完成的, 用户可不必担心。
重复使用同一 公式,繁琐
END
3
精选课件ppt
上例三次使用同一公式,下面利用FORTRAN 提供的语句函数来简化之,程序可改写如下:
P(T)= 0.812*T**3+1.256*T**2-3.378*T+0.689
WRITE(*,*)’请输入X,Y,Z的值:‘
READ(*,*)X,Y,Z
P1=P(X)
31
精选课件ppt
子程序是一个独立的程序单位,其主要特点:
(1) 形式独立,每种类型的子程序均以子程 序单位语句开始,以END结束。
(2) 符号独立。子程序单位中使用的语句标 号、变量名、数组名等是独立的,即使 与其他程序单位的符号相同,无需特殊 声明,也彼此无关。
32
精选课件ppt
(3) 位置独立。子程序可以放在主程序之 前或之后都无所谓,执行时总是从主 程序开始执行。
12
精选课件ppt
三、语句函数的引用
DATA A/ 2.0/ F(X)=X+1 B=F(F(F(A))) WRITE(*,*)B END
13
F(F(F(2.0))) F(F(3.0)) F(4.0)
精选课件ppt
例1 :二分法:
y
f(x2)
1、基本思路:把区间(x1,x2)二
f(x)
x1
x2
等分,找到中点x求出f(x)值,然后 0
Y2=SUM(2*A,B,C) Y3=SUM(C,B,A) Z=Y1+Y2+Y3
Y2=2.0+2.02+3.03 Y1=3.0+2.02+1.03
WRITE(*,*)Y1,Y2,Y3,Z
END
10
精选课件ppt
语句函数的引用过程
当程序执行到一个语句函数的引用时,要经过 下列几个过程:
当实元为表达式时,先求出表达式的值,然后 控制转到语句函数定义语句去执行;
第七讲 子程序
§7.1 语句函数 §7.2 函数子程序 §7.3 子例行子程序 §7.4 虚实结合 §7.5 可调数组 §7.6 程序举例
1
精选课件ppt
7.1 语句函数
一、语句函数的概念 二、语句函数的定义 三、语句函数的引用
2
精选课件ppt
一、语句函数的概念
引例:计算W=0.2P(X)+0.3P(Y)+0.5P(Z) 其中P(T)=0.812T3+1.256T2-3.378T+0.689
P2= P(Y) 对语句函数的引用
P3= P(Z)
W=0.2*P1+0.3*P2+0.5*P3
WRITE(*,*)’W=’,W
4 END
精选课件ppt
在程序中有时可能在好几处需要进行同样的某 种表达式计算,而这种计算又不是某个内部函数所 能完成的,这时,程序设计者可以自已来定义一个 语句函数,通过引用语句函数来实现这种特殊运算。
3
WRITE(*,*)’Y=‘,Y
4
END
26
精选课件ppt
一个FORTRAN程序可以由一个以上程序单位组 成,这程序单位分别称为主程序和子程序,每个程 序单位都可由FORTRAN编译程序单独进行编译,进 行语法检查,生成目标代码,最后再连接装配在一 起,成为一个可执行程序,图1是一个可执行 FORTRAN程序的结构示意图,其中每个方框代表一 个单独的程序单位,可以看到,一个FORTRAN程序 必须有一个主程序,而且只能有一个主程序,一个 程序中,可以根据需要包含任意数量的子程序,子 程序可以被主程序调用,也可以被 其它子程序调 用,但不能发生直接或间接地自已调用自己,如图 2中所示的调用关系是错误的。
F(X)=X**3-2.0*X**2-7.0*X+4.0
S(A,B)=SIGN(A,B).EQ.A
10 READ(*,*)X1,X2
F1=F(X1)
F2=F(X2)
IF(S(F1,F2))GOTO 10
F0=1.0
20 IF((ABS(X1-X2).GT.1E-5).AND.(ABS(F0).GT.1E-6))THEN
18
精选课件ppt
语句函数小结:
语句函数必须先定义,后引用。且语句函数只可 在包含该语句函数定义的程序单位中引用,即不 能引用其他程序单位所定义的语句函数。
语句函数定义语句是非执行语句。它应该放在 所有可执行语句之前和有关的类型说明语句之后。
19
精选课件ppt
语句函数小结: 语句函数定义中的函数名和虚元是具有类型的, 可以用类型说明语句说明其类型 或按隐含约定 确定其类型。如:
7
精选课件ppt
使用规定
4)e是含有x1,x2,…xn的表达式,在这个表达式
中,除必须包含有关虚参外,还可以包含常量,变 量,外部和内部函数和已定义过的语句函数。
5)语句函数只能在定义它的程序段使用。
8
精选课件ppt
三、语句函数的引用
语句函数的引用就是对语句函数定义的使用。它和 内部函数一样,总是在表达式中作为一个运算分量 或单独作为一个表达式出现。它的一般引用形式为:
规定:语句函数是在使用的程序段内 部用一个语句定义的函数,必须在程 序段的开头定义,且只能在该段的内 部使用。
5
精选课件ppt
二、语句函数的定义
语句函数定义的形式:
f_name([x,[,x]……])=e
6
精选课件ppt
使用规定
1)语句函数定义语句必须位于该程序段的说明语
句之后,第一个可执行语句之前。它是非执行语句。
f_name( a1,a2……)
注:实参的个数、类型及排列顺序必须 与相应的形参一致!
9
精选课件ppt
三、语句函数的引用
REAL A,B,C
SUM(A,B,C)=A+B*B+C**3
DATA A,B,C/ 1.0,2.0,3.0/
Y1=SUM(0.5,0.7,0.8)
Y1=0.5+0.72+0.83
x x
判断f(x)和f(x1)是否同号,如同
f(x1)
号则说明根在(x,x2)区间,否则,
根在(x,x1)区间。依次方法对有根
区间再折半,直到满足条件为止。
例:用二分法求f(x)=x3-6x-1=0在x=2附近的一个实根
区间为x1=0,x2=5
14
精选课件ppt
F(X)=X**3-6.0*X-1.0
22
精选课件ppt
在同一程序单位中不允许变量名与函数名同名, 但允许变量与虚元同名。
例:F(X) =XX+X+1.0 X =3.0 Y=(X+3.0)/2.0 Z=F(1.0)+F(2.0)+F(3.0) T=F(X)
23
精选课件ppt
程序第一行的X是语句函数的虚拟参 数,第二行的X是变量名,它们彼此独立, 无任何关系。第三行计算出Y的值等于2.0。 第四行引用语句函数,分别将1.0,2.0,3.0代 替语句函数定义语句中右边表达式的X, 计算出F(1.0),F(2.0),F(3.0)。第五行F(x)中 的X是变量名,其值为3.0,此时F(X)相当 于F(3.0)
30
精选课件ppt
(a) 函数子程序结构
………
FUNCTION 函数名(a1,a2,…,an) 说明语句 可执行语句 END
(b) 子例行程序结构
………
SUBROUTINE 子例行程序名(a1,a2,…,an) 说明语句 可执行语句 END
(c) 数据块子程序结构
……
BLOCK DATA 名字 说明语句 END
27
精
子程序D 子程序E 子程序D 子程序E 子程序G
子程序F
子程序F
图1
28
精选课件ppt
主程序
子程序A 子程序B
子程序C 子程序B
子程序C 图2
29
精选课件ppt
函数子程序(外部函数) FORTRAN子程序 子例行子程序
数据块子程序(说明子程序)
25
精选课件ppt
一、引例
7.2 函数子程序(外部函数)
DIMENSION X(10)
READ(*,*)X
FUNCTION F(X)
Y=0.0
IF(X.GE.0)F=2*X+1
DO 1 I=1,10
IF(X.LT.0)F=-3*X+1
Y=Y+F(X(I))
END
1 CONTINUE
返回
2
Y=Y/10.0
X=X2-(X2-X1)/(F2-F1)*F2
F0=F(X)
IF(S(F0,F1))THEN
X1=X
F1=F0
17
END IF
精选课件ppt
IF(S(F0,F2))THEN X2=X F2=F0
END IF GOTO 20 END IF IF(ABS(F0).GT.1E-6)X=(X1+X2)/2.0 WRITE(*,*)X END
2)语句函数名不能与本程序单元中的任何其它名字 同名。f_name的类型可以隐含,也可以显式说明。
f_name与e的关系遵循语句的赋值规则。 3)形参X只能是变量,用于表示函数中自变量的个数、 类型和顺序,与本程序段中的其它名字无关。 x1,x2,…,xn本身是没有值的,只有在函数引用时用 实在自变量(实参)代替虚参情况下,才能得到函数值, 虚参在形式上与普通变量名相同,虚参之间不能同名。
100 READ(*,*)X1,X2
FX1=F(X1)
FX2=F(X2)
IF(FX1*FX2.GT.0.0)GOTO 100
10 X=(X1+X2)/2.0 FX=F(X) IF(SIGN(FX,FX1).EQ.FX)THEN
SIGN(x1,x2)是 符号传递函数,
X1=X FX1=FX END IF IF(SIGN(FX,FX2).EQ.FX)THEN
INTEGER G, X, Y
G(X,Y,N) = X*X+N*Y
以上语句说明G函数是整型函数,即函数值为 整型,且说明虚元X,Y为整型,隐含约定N为整型。
20
精选课件ppt
语句函数小结: 在语句函数定义的语句中,也可出现其他的语句 函数引用,但被引用的语句函和须在它前面已定义。 不允许引用自身或在它后面定义的语句函数。
WRITE(*,*)’请输入X,Y,Z的值:‘ READ(*,*)X,Y,Z P1= 0.812*X**3+1.256*X**2-3.378*X+0.689 P2= 0.812*Y**3+1.256*Y**2-3.378*Y+0.689 P3= 0.812*Z**3+1.256*Z**2-3.378*Z+0.689 W=0.2*P1+0.3*P2+0.5*P3 WRITE(*,*)W
x1 x 0
f(x1) f(x)
x2 x
的x1,这就舍去了原来的(x1,x)区间。
如果f(x1)与f(x2)异号,则它们之间的连线必然交x轴于x点
有x=x2-(x2-x1)*f(x2)/(f(x2)-f(x1))
3、再根据新的x1,x2,找到与x轴的交点x,重复上述步骤。
16
精选课件ppt
LOGICAL S
例:S(A, B, C) = (A+B+C) / 2.0 PP (A, B, C) = SQRT (S(A, B, C) A)
PP 函数引用了它前面所定义的S函数
21
精选课件ppt
语句函数小结:
引用语句函数时,给定的实元必须和对应的 虚元个数相等,类型一致,位置相符。在进 行虚实结合时,虚元与实元不是以名字相同 传值,而是按位置类型一一传值。