1 : C YOFXCU SOURCE CHAT 05/01/13 04:20:13 5004 2 : SUBROUTINE YOFXCU(X,CURVE,NCURV, Y,DYSDX,KERRE) 3 : C 4 : C============================================================ 5 : C Routine qui lit la valeur d'une courbe et de sa derivee 6 : C quand on lui donne l'abscisse 7 : C 8 : C ENTREES: 9 : C NCURV : Nombre de points de la courbe 10 : C X : Abscisse 11 : C CURVE : Courbe 12 : C 13 : C SORTIES 14 : C Y : Valeur de la fonction en X 15 : C DYSDX : Valeur de la derivee en X 16 : C 17 : C WARNING : On suppose que les abscisses varient de facon monotone 18 : C (croissante OU decroissante) 19 : C============================================================= 20 : 21 : IMPLICIT INTEGER(I-N) 22 : IMPLICIT REAL*8(A-H,O-Z) 23 : DIMENSION CURVE(2,NCURV) 24 : PARAMETER(ZERO=0.D0) 25 : C 26 : IF(CURVE(1,2)-CURVE(1,1).GT.0.D0)THEN 27 : C 28 : C CAS X CROISSANT 29 : C 30 : IF (X.LT.CURVE(1,1)) THEN 31 : KERRE=32 32 : Y=0.D0 33 : DYSDX=ZERO 34 : ELSE 35 : KERRE=0 36 : IF (X.EQ.CURVE(1,1)) THEN 37 : Y=CURVE(2,1) 38 : DYSDX=(CURVE(2,2)-CURVE(2,1))/(CURVE(1,2)-CURVE(1,1)) 39 : ELSEIF(X.GE.CURVE(1,NCURV))THEN 40 : Y=CURVE(2,NCURV) 41 : DYSDX=ZERO 42 : ELSE 43 : DO IE1=2,NCURV 44 : IF (X.LE.CURVE(1,IE1)) GOTO 1 45 : ENDDO 46 : 1 DYSDX=(CURVE(2,IE1)-CURVE(2,IE1-1))/ 47 : > (CURVE(1,IE1)-CURVE(1,IE1-1)) 48 : Y=CURVE(2,IE1)+DYSDX*(X-CURVE(1,IE1)) 49 : ENDIF 50 : ENDIF 51 : C 52 : ELSE 53 : C 54 : C CAS X DECROISSANT 55 : C 56 : IF (X.GT.CURVE(1,1)) THEN 57 : KERRE=32 58 : Y=0.D0 59 : DYSDX=ZERO 60 : ELSE 61 : KERRE=0 62 : IF (X.EQ.CURVE(1,1)) THEN 63 : Y=CURVE(2,1) 64 : DYSDX=(CURVE(2,2)-CURVE(2,1))/(CURVE(1,2)-CURVE(1,1)) 65 : ELSEIF(X.LE.CURVE(1,NCURV))THEN 66 : Y=CURVE(2,NCURV) 67 : DYSDX=ZERO 68 : ELSE 69 : DO IE1=2,NCURV 70 : IF (X.GE.CURVE(1,IE1)) GOTO 2 71 : ENDDO 72 : 2 DYSDX=(CURVE(2,IE1)-CURVE(2,IE1-1))/ 73 : > (CURVE(1,IE1)-CURVE(1,IE1-1)) 74 : Y=CURVE(2,IE1)+DYSDX*(X-CURVE(1,IE1)) 75 : ENDIF 76 : ENDIF 77 : C 78 : ENDIF 79 : C 80 : RETURN 81 : END 82 : 83 : 84 :
© Cast3M 2003 - All rights reserved.
Disclaimer