fork download
  1. /* Eddy Reconstruction with Exponential Outer Decay Fitting */
  2. /* For Iron Spring PL/I Compiler */
  3.  
  4. EDDY_RECONSTRUCT: PROCEDURE OPTIONS(MAIN);
  5.  
  6. DCL MAXN FIXED BIN(31) STATIC INIT(1000);
  7. DCL X(MAXN), Y(MAXN), VT(MAXN) FLOAT DECIMAL(15);
  8. DCL N FIXED BIN(31);
  9. DCL I FIXED BIN(31);
  10. DCL XC, YC FLOAT DECIMAL(15);
  11. DCL VT_FIT(MAXN) FLOAT DECIMAL(15);
  12. DCL LAMBDA FLOAT DECIMAL(15);
  13.  
  14. CALL GEN_SAMPLE_DATA(X, Y, VT, N);
  15.  
  16. XC = 0.0; YC = 0.0;
  17. CALL FIT_OUTER_EXP(X, Y, VT, N, XC, YC, LAMBDA, VT_FIT);
  18.  
  19. PUT SKIP LIST('Exponential decay fit λ =', LAMBDA);
  20. DO I = 1 TO N;
  21. PUT SKIP EDIT(X(I), Y(I), VT(I), VT_FIT(I))
  22. (F(10,4), X, F(10,4), X, F(10,4), X, F(10,4));
  23. END;
  24.  
  25. END EDDY_RECONSTRUCT;
  26.  
  27. FIT_OUTER_EXP: PROCEDURE(X, Y, VT, N, XC, YC, LAMBDA, VT_FIT);
  28. DCL X(*), Y(*), VT(*), VT_FIT(*) FLOAT DECIMAL(15);
  29. DCL N FIXED BIN(31);
  30. DCL XC, YC, LAMBDA FLOAT DECIMAL(15);
  31.  
  32. DCL I FIXED BIN(31);
  33. DCL DX, DY, R, SUM_R, SUM_LOG FLOAT DECIMAL(15);
  34.  
  35. SUM_R = 0.0; SUM_LOG = 0.0;
  36. DO I = 1 TO N;
  37. DX = X(I) - XC;
  38. DY = Y(I) - YC;
  39. R = SQRT(DX*DX + DY*DY);
  40. IF VT(I) > 0.0 THEN DO;
  41. SUM_R = SUM_R + R;
  42. SUM_LOG = SUM_LOG + LOG(VT(I));
  43. END;
  44. END;
  45.  
  46. IF SUM_R > 0.0 THEN
  47. LAMBDA = -SUM_LOG / SUM_R;
  48. ELSE
  49. LAMBDA = 0.0;
  50.  
  51. DO I = 1 TO N;
  52. DX = X(I) - XC;
  53. DY = Y(I) - YC;
  54. R = SQRT(DX*DX + DY*DY);
  55. VT_FIT(I) = EXP(-LAMBDA * R);
  56. END;
  57.  
  58. END FIT_OUTER_EXP;
  59.  
  60. GEN_SAMPLE_DATA: PROCEDURE(X, Y, VT, N);
  61. DCL X(*), Y(*), VT(*) FLOAT DECIMAL(15);
  62. DCL N FIXED BIN(31);
  63.  
  64. DCL I FIXED BIN(31);
  65.  
  66. N = 10;
  67. DO I = 1 TO N;
  68. X(I) = FLOAT(I - 5);
  69. Y(I) = 0.0;
  70. VT(I) = EXP(-ABS(X(I)));
  71. END;
  72.  
  73. END GEN_SAMPLE_DATA;
Success #stdin #stdout 0.01s 5308KB
stdin
Standard input is empty
stdout
������