free pdf viewer c# .net : Copying text from pdf into word SDK Library API .net asp.net wpf sharepoint LiddleStephen.paper1-part1460

be of type 
COMPLEX
.  VBA also supports implicit variable declarations (using the 
Vari-
ant
data type if none is specified) and type shortcuts (e.g. 
i%
in VBA tags 
i
as an 
Inte-
ger
variable, 
j&
indicates 
j
is a 
Long
).  Because these shortcuts provide “ample rope 
with which to hang oneself” we advocate explicit typing as a more sound programming 
practice.  By including 
Option Explicit
at the top of a VBA code module, we ask the 
compiler to notify us when a variable has not been declared explicitly.  It can sometimes 
be tedious to follow this methodology, but the benefits are sufficient to warrant the effort. 
Symbolic constants in FORTRAN are declared as follows: 
PARAMETER PI=3.14159
.  
The equivalent VBA code is 
Const PI As Single = 3.14159
 Note that in FOR-
TRAN, 
PI
is implicitly assumed to be of type 
REAL
(because it begins with a letter out-
side the range I–N).  We could first give an explicit declaration, e.g. 
DOUBLE PRECI-
SION PI
, which would change the underlying data type to double precision instead. 
Array declaration is similar in the two languages.  FORTRAN’s 
DIMENSION I(1:10)
becomes 
Dim I(1 To 10) As Integer
in VBA.  Again, 
I
is implicitly of type 
IN-
TEGER
in FORTRAN.   It is also possible to declare array  types explicitly, so 
DOUBLE 
PRECISION X(-5:5)
would become 
Dim X(-5 To 5) As Double
 However, note 
that the similar statements 
DIMENSION I(7)
and 
Dim I(7) As Integer
are actually 
slightly different.  FORTRAN assumes 1 as the lower bound for array subscripts, while 
VBA assumes 0.  So we prefer always to specify upper and lower array bounds explicitly 
to avoid any possible confusion. 
4.2  Subtle Differences 
An issue of especial note is that FORTRAN and VBA treat the implicit conversion of real 
to integer values differently.  For example, what happens when we assign 3.7 or -2.3 to 
an integer variable?  The conversion rule in FORTRAN is essentially to truncate the real 
number (so 3.7 becomes 3 and -2.3 becomes -2).  However VBA rounds real numbers to 
the closest integer (or to the closest even integer if the fractional part is .5).  Thus, one 
must pay special attention to the case where a FORTRAN program assigns real expres-
sions to integer variables.  The VBA 
Fix()
function implements the truncation operation 
used by FORTRAN.  Thus, the FORTRAN statement 
I = X
could be coded in VBA as 
I = Fix(X)
.  If your VBA program is not generating the same values as the original 
FORTRAN program, it is a good idea to check for real-to-integer conversion problems. 
FORTRAN is somewhat more convenient for initializing blocks of data than VBA.  The 
DATA
statement is often used in FORTRAN to provide initial values for arrays (see the 
implementation of Montgomery’s(1982) program in Appendix  A, and  note  the  use  of 
DATA
to initialize the 7-element array 
C
near the end of the program).  VBA requires the 
use of  explicit assignment statements to  accomplish the  same task (observe the corre-
sponding VBA code in Appendix B). 
FORTRAN also has a convenient shorthand called the “statement function” which is es-
sentially a one-statement macro.  The ORPS algorithms declare several statement func-
tions, including 
FM2(X, Y) = Y * FM1(X, Y)
.  This code looks a lot like an assign-
ment to a two-dimensional array 
FM2
.  It is actually the definition of a function 
FM2
that 
receives two parameters, 
X
and 
Y
 The translation to VBA is straightforward once you 
recognize that this is not an assignment statement: 
Function FM2(x As Double, y As Double) As Double 
FM2 = y * FM1(x, y) 
End Function 
4.3  Comparing Decision and Iteration Structures 
Once data types and expressions are properly converted, the other major aspect of FOR-
TRAN-to-VBA translation is rewriting control-flow statements (for decisions and loops). 
Copying text from pdf into word - extract text content from PDF file in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Feel Free to Extract Text from PDF Page, Page Region or the Whole PDF File
copy text pdf; get text from pdf image
Copying text from pdf into word - VB.NET PDF Text Extract Library: extract text content from PDF file in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
How to Extract Text from PDF with VB.NET Sample Codes in .NET Application
copy pdf text to word; export highlighted text from pdf
The two most common variations of the “if” statement are shown here: 
FORTRAN 
VBA 
Logical if 
IF (
expr
stmt 
If 
expr
Then 
stmt 
Block if 
IF (
expr
1
) THEN
stmt
1
ELSE IF (
expr
2
) THEN
stmt
2
… 
ELSE 
stmt
n
END IF 
If 
expr
1
Then
stmt
1
ElseIf 
expr
2
Then
stmt
2
… 
Else 
stmt
n
EndIf
In both languages, the else-if clause can be repeated 0 or more times, and the else clause 
is optional.  VBA does not require parentheses around condition expressions. 
Loop statements can be somewhat more challenging to translate, depending on how the 
FORTRAN programmer  originally  implemented them.  The general form of a  loop  in 
FORTRAN is: 
DO 
s
i
=
e
1
e
2
[
e
3
where s is a statement label, i is a loop variable, e
1
is the initial value assigned to i, e
2
is 
the terminal value of i, and e
3
is the optional increment value.  The effect of this state-
ment is to execute the loop (which includes all statements from 
DO
up to and including 
the statement labeled s) for each value of i between e
1
and e
2
, incrementing by e
3
(if e
3
is 
not given, the default value is 1).  Often we find that s labels  a 
CONTINUE
statement, 
which has no effect except to be a place-holder for the end of a loop.  Consider the fol-
lowing example from ORPS1: 
DO 10 J = 1, IP 
IF (LAMDA(J) .LE. ZERO) RETURN 
10  CONTINUE 
This loop executes the 
IF
statement repeatedly for values of 
J
in the range 1, 2, 3, …, 
IP
.  
The equivalent form in VBA would be the following: 
For j = 1 To ip 
If (lambda(j) <= 0) Then Exit Sub 
Next j 
If the increment value had been something other than 1, the 
For
statement would have 
included a 
Step
clause (see Section 2.2.3 for an example). 
4.4  Eliminating Go-To Statements 
Older programs tend to rely on the infamous “go-to” statement.  Computer science has 
long since dismissed the construct as overly complex and dangerous from a software en-
gineering perspective.  When rewriting FORTRAN code, it is wise to consider how one 
might transform the code structure to avoid using go-to statements.  Consider the follow-
ing excerpt from the Econ algorithm: 
DO 8 J=1,3 
... 
    ... 
IF(OBJFN.GT.BESTFN) GO TO 7 
... 
GO TO 6 
    IF(J.EQ.3) GO TO 8 
XK=BESTK-STEP 
    CONTINUE 
C# PDF copy, paste image Library: copy, paste, cut PDF images in
etc. High quality image can be saved after cutting, copying and pasting into PDF page in .NET console application. Guarantee high
cut and paste text from pdf; extract text from pdf
C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net
Online C# source code for extracting, copying and pasting selected PDF pages and paste into another PDF The portable document format, known as PDF document, is
pdf text replace tool; get text from pdf c#
This sort of code can get quite messy to understand, but if we peel the onion one layer at 
a time, it can be managed.  If we start with the 
DO
loop, we have the following structure: 
For j=1 To 3 
... 
    ... 
IF(OBJFN.GT.BESTFN) GO TO 7 
... 
GO TO 6 
    IF(J.EQ.3) GO TO 8 
XK=BESTK-STEP 
 Next j 
In the next step, we remove the third 
GO TO
by negating the condition 
(J.EQ.3)
For j=1 To 3 
... 
     ... 
IF(OBJFN.GT.BESTFN) GO TO 7 
... 
GO TO 6 
  
If j <> 3 Then 
xk = bestk - step 
End If 
Next j 
Now we eliminate the remaining 
GO TO
’s by instead using a VBA 
Do Until
loop: 
For j=1 To 3 
... 
Do Until objfn > bestfn 
... 
Loop 
If j <> 3 Then 
xk = bestk - step 
End If 
Next j 
The result is a structured program that is easier to understand and maintain.  Sometimes 
transformations like these will be quite difficult and certainly not obvious.  The sine qua 
non of programming is correctness, and in such cases a better strategy is to translate 
GO 
TO
statements directly to VBA (see Appendix B for an example). 
5.  Conclusion 
Contrary  to  what  many  assume,  it  turns  out  that  digital  assets  are  relatively  fragile.  
Physical  storage  media  degrade  over time, but so do software  formats, protocols,  and 
languages.  Just as we periodically migrate our data to newer media and storage formats, 
so also we should care for our legacy source code base.  FORTRAN is by no means a 
dead  or  dying programming  language.    But  it  is significantly  less  common  to  find  a 
FORTRAN compiler on the desktop of an applied statistician in today’s PC-dominated 
world.  For this reason, we propose that interested parties participate in an effort to re-
write useful statistical algorithms for the user-friendly, robust, and ubiquitous Excel envi-
ronment.  (Note that the authors are not affiliated with Microsoft in any way, and indeed 
one of us is a participant in the open source software movement.) 
To be certain, there are many other ways to manage legacy source code.  For example, 
there is a utility to convert FORTRAN to C code automatically.  The Gnu C++ compiler 
also includes a FORTRAN compiler component, and so FORTRAN is not hard to install 
on a Linux system.  One could translate the algorithms to other languages, like SAS or 
SPlus.  But the fact remains that Microsoft Office is a de facto standard on most personal 
computers.  Moreover, the VBA environment supporting the Office applications is robust 
VB.NET PDF copy, paste image library: copy, paste, cut PDF images
DNN (DotNetNuke), SharePoint. High quality image can be saved after cutting, copying and pasting into PDF page. Empower to cut, copy
export highlighted text from pdf; copy text from pdf online
C# PDF Convert to Word SDK: Convert PDF to Word library in C#.net
C# source code is available for copying and using in PDF file and maintains the original text style (including The magnification of the original PDF page size.
copy paste text pdf file; copy text from pdf reader
and  well suited to statistical  calculations.  A proficient Excel user  employing the  vast 
range of available features can achieve truly remarkable information-related productivity.  
By learning about VBA, Excel users can be even more productive. 
We believe the time has come to look to our legacy of statistical algorithms and think 
about how we can leverage that work into the future.  We can energize this code base by 
injecting  modern  user  interfaces  and  updated  programming  structures.   Our  proposed 
methodology will let us share this legacy on a broader scale. 
References 
Deitel, H. M., Deitel, P., and Nieto, T. R. (1999).  Visual Basic: How to Program.  Pren-
tice Hall, Upper Saddle River, NJ. 
Lee, T. (1987) “Algorithm AS 223: Optimum Ridge Parameter Selection”, Applied Sta-
tistics, Vol. 36, No. 1, pp 112-118. 
Montgomery, D.C. (1982) “Economic Design of an 
XControl Chart”, Journal of Qual-
-
ity Technology, Vol. 14, No. 1, pp 40-43. 
Schneider, D. I. (2000).  An Introduction to Programming Using Visual Basic 6.0.  Pren-
tice Hall, Upper Saddle River, NJ. 
Tidwell, R. and Thomas, N. (2001).  Microsoft Office 2000 with Visual Basic for Appli-
cations.  Course Technology, Cambridge, MA. 
Tsay, J. J. (2000).  Visual Basic 6 Programming: Business Applications with a Design 
Perspective.  Prentice Hall, Upper Saddle River, NJ. 
Zak,  D. (2001).    Microsoft  Visual  Basic  for Applications.   Course  Technology, Cam-
bridge, MA. 
Appendix A — Montgomery’s(1982)  Program for  the Economic  Design  of an 
X 
Chart, as Originally Implemented in FORTRAN 
READ(5,2) A1,A2,A3,A3P,A4,XLAM,DELT,G,D 
    FORMAT(9F8.0) 
WRITE(6,3) 
    FORMAT(1H0,3X,'N',5X,'OPTIMUM K',3X,'OPTIMUM H' 
&,6X,'ALPHA',5X,'POWER',4X,'COST') 
AA=DELT**2*A3P/(A2+XLAM*A4*G) 
XK=0. 
DO 4 I = 1,10 
RHS=(1.2826+XK)/ORDN(XK) 
IF(RHS.GT.AA) GO TO 5 
    XK=XK+0.5 
    XK=XK-0.5 
IF(XK.LT.0.) XK=0. 
N=((1.2826+XK)/DELT)**2+0.5 
NMIN=N-10 
IF(NMIN.LE.0) NMIN=1 
NMAX=N+10 
DO 9 I=NMIN,NMAX 
XN=I 
XK=0.5 
STEP=0.5 
DO 8 J=1,3 
BESTFN=1.0E+38 
IF(J.EQ.2) STEP=0.1 
IF(J.EQ.3) STEP=0.01 
    ARG=-1.0*XK 
A=2.0*PNORM(ARG) 
ARG=DELT*SQRT(XN)-XK 
C# PDF File Permission Library: add, remove, update PDF file
PDF, VB.NET convert PDF to text, VB.NET Choose to offer PDF annotation and content extraction functions. Enable or disable copying and form filling functions.
copy text from scanned pdf; copy text from protected pdf
C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
PDF to tiff, VB.NET read PDF, VB.NET convert PDF to text, VB.NET Copying and Pasting Pages. PDF file; you can also copy and paste pages from a PDF document into
delete text from pdf acrobat; copy text from pdf to word with formatting
P=PNORM(ARG) 
H=SQRT((A*A3P+A1+A2*XN)/(XLAM*A4*(1./P-0.5))) 
B=H*(1./P-0.5+XLAM*H/12.)+G*XN+D 
OBJFN=(A4*XLAM*B+A*A3P/H+XLAM*A3)/(XLAM*B+1.0) 
&+(A1+A2*XN)/H 
IF(OBJFN.GT.BESTFN) GO TO 7 
BESTFN=OBJFN 
BESTA=A 
BESTP=P 
BESTK=XK 
BESTH=H 
XK=XK+STEP 
GO TO 6 
    IF(J.EQ.3) GO TO 8 
XK=BESTK-STEP 
    CONTINUE 
    WRITE(6,10) I,BESTK,BESTH,BESTA,BESTP,BESTFN 
10    FORMAT(1H ,I4,2(5X,F7.2),3X,2(3X,F7.4),4X,F7.2) 
STOP 
END 
FUNCTION ORDN(Z) 
ORDN=0.39894228*EXP(-Z*Z/2) 
RETURN 
END 
FUNCTION PNORM(X) 
DIMENSION C(7) 
DATA C/.319381530,-.356563782,1.781477937, 
&-1.821255978,1.330274429,.2316419,2.506628725/ 
Y=X 
IF(X.LT.0.) Y=-X 
T=1./(1.+C(6)*Y) 
S=((((C(5)*T+C(4))*T+C(3))*T+C(2))*T+C(1))*T 
PNORM=S*EXP(-Y*Y/2)/C(7) 
IF(X.GT.0.) PNORM=1.-PNORM 
RETURN 
END 
Appendix B — Montgomery’s(1982) Program as Implemented Naively in VBA 
Public Sub Econ() 
Range("E3").Select     
' Select the upper-left output cell
row = 0                
' Current output row offset 
A1 = Range("C3").Value
 ' Get data from input cells
A2 = Range("C4").Value 
A3 = Range("C5").Value 
A3P = Range("C6").Value 
A4 = Range("C7").Value 
XLAM = Range("C8").Value 
DELT = Range("C9").Value 
G = Range("C10").Value 
D = Range("C11").Value 
AA=DELT^2*A3P/(A2+XLAM*A4*G) 
XK=0 
For I=1 To 10 
RHS=(1.2826+XK)/ORDN(XK) 
If RHS > AA Then GoTo 5 
XK=XK+0.5 
Next I 
  XK=XK-0.5 
If XK<0 Then XK=0 
N=Fix(((1.2826+XK)/DELT)^2+0.5)
   ' NOTE: truncate expression
NMIN=N-10 
If NMIN<=0 Then NMIN = 1 
NMAX = N+10 
STEPVAL = 0.5 
For I=NMIN To NMAX 
XK=0.5 
VB.NET PDF File Permission Library: add, remove, update PDF file
rotate PDF pages, C#.NET search text in PDF Choose to offer PDF annotation and content extraction functions. Enable or disable copying and form filling functions
copy text from scanned pdf to word; copy paste text pdf
VB.NET PDF File & Page Process Library SDK for vb.net, ASP.NET
PDF Pages Extraction, Copying and Pasting. a specific page of PDF file; you are also able to copy and paste pages from a PDF document into another PDF
extracting text from pdf; extract text from image pdf file
For J=1 To 3 
BESTFN=1E+38 
If J=2 Then STEPVAL=0.1 
If J=3 Then STEPVAL=0.01 
  ARG=-1*XK 
A=2*PNORM(ARG) 
ARG=DELT*Sqr(I)-XK 
P=PNORM(ARG) 
H=Sqr((A*A3P+A1+A2*I)/(XLAM*A4*(1/P-0.5))) 
B=H*(1/P-0.5+XLAM*H/12)+G*I+D 
OBJFN=(A4*XLAM*B+A*A3P/H+XLAM*A3)/(XLAM*B+1)+(A1+A2*I)/H 
If OBJFN>BESTFN Then GoTo 7 
BESTFN=OBJFN 
BESTA=A 
BESTP=P 
BESTK=XK 
BESTH=H 
XK=XK+STEPVAL 
GoTo 6 
  If J=3 Then GoTo 8 
XK=BESTK-STEPVAL 
  Next J 
' Write outputs to the worksheet 
ActiveCell.Offset(row, 0).Value = I 
ActiveCell.Offset(row, 1).Value = BESTK 
ActiveCell.Offset(row, 2).Value = BESTH 
ActiveCell.Offset(row, 3).Value = BESTA 
ActiveCell.Offset(row, 4).Value = BESTP 
ActiveCell.Offset(row, 5).Value = BESTFN 
row = row + 1 
Next I 
End Sub 
Function ORDN(Z) 
ORDN=0.39894228*Exp(-Z*Z/2) 
End Function
Function PNORM(X) 
Dim C(1 To 7) 
C(1)=.319381530 
C(2)=-.356563782 
C(3)=1.781477937 
C(4)=-1.821255978 
C(5)=1.330274429 
C(6)=.2316419 
C(7)=2.506628725 
Y=X 
If X<0 Then Y=-X 
T=1/(1+C(6)*Y) 
S=((((C(5)*T+C(4))*T+C(3))*T+C(2))*T+C(1))*T 
PNORM=S*Exp(-Y*Y/2)/C(7) 
If X>0 Then PNORM=1-PNORM 
End Function
Appendix C — Montgomery’s(1982) Program in “Modern” VBA 
Option Explicit 
Sub Econ() 
Dim n As Integer, nmin As Integer, nmax As Integer 
Dim row As Integer, j As Integer, i As Integer 
Dim a1 As Double, a2 As Double, a3 As Double, a3p As Double 
Dim a4 As Double, lambda As Double, delta As Double 
Dim aa As Double, k As Double, rhs As Double, g As Double 
Dim h As Double, p As Double, besth As Double 
Dim besta As Double, bestp As Double, bestfn As Double 
Dim arg As Double, a As Double, d As Double, objfn As Double 
Dim bestk As Double, b As Double, stepval(1 To 3) As Double 
C# HTML5 PDF Viewer SDK to view, annotate, create and convert PDF
protect PDF document from editing, printing, copying and commenting Help C# users to erase PDF text content, images multiple file formats or export PDF to Word
.net extract text from pdf; copy pdf text to word
.NET PDF SDK - Description of All PDF Processing Control Feastures
Merge, combine, and consolidate multiple PDF files into one PDF file. PDF page extraction, copying and pasting allow users to move PDF pages; PDF Text Process.
export highlighted text from pdf to word; copy pdf text to word document
    ' Clear output cells in case they contain old data 
Range("E3", "L200").Clear 
     ' Select the upper-left cell of the output range 
Range("E3").Select 
row = 0 
    ' Get data from input cells 
a1 = Range("C3").Value 
a2 = Range("C4").Value 
a3 = Range("C5").Value 
a3p = Range("C6").Value 
a4 = Range("C7").Value 
lambda = Range("C8").Value 
delta = Range("C9").Value 
g = Range("C10").Value 
d = Range("C11").Value 
aa = delta ^ 2 * a3p / (a2 + lambda * a4 * g) 
k = 0 
For i = 1 To 10 
rhs = (1.2826 + k) / ordn(k) 
If rhs > aa Then 
Exit For 
End If 
k = k + 0.5 
Next i 
k = k - 0.5 
If k < 0 Then 
k = 0 
End If 
    ' FORTRAN converts reals to integers by truncating, but VBA 
    ' rounds.  The VBA Fix function truncates like FORTRAN. 
n = Fix(((1.2826 + k) / delta) ^ 2 + 0.5) 
nmin = n - 10 
If nmin <= 0 Then 
nmin = 1 
End If 
nmax = n + 10 
stepval(1) = 0.5 
stepval(2) = 0.1 
stepval(3) = 0.01 
For i = nmin To nmax 
k = 0.5 
For j = 1 To 3 
bestfn = 1E+38 
Do Until objfn > bestfn 
arg = -k 
a = 2 * WorksheetFunction.NormSDist(arg) 
arg = delta * Sqr(i) - k 
p = WorksheetFunction.NormSDist(arg) 
h = Sqr((a * a3p + a1 + a2 * i) / _ 
(lambda * a4 * (1 / p - 0.5))) 
b = h * (1/p - 0.5 + lambda*h/12) + g*i + d 
objfn = (a4*lambda*b + a*a3p/h + lambda*a3) / _ 
(lambda*b + 1) + (a1 + a2*i)/h 
If objfn <= bestfn Then 
bestfn = objfn 
besta = a 
bestp = p 
bestk = k 
besth = h 
k = k + stepval(j) 
End If 
Loop 
k = bestk - stepval(j) 
Next j 
' Write outputs to the worksheet 
ActiveCell.Offset(row, 0).Value = i 
ActiveCell.Offset(row, 1).Value = bestk 
ActiveCell.Offset(row, 2).Value = besth 
ActiveCell.Offset(row, 3).Value = besta 
ActiveCell.Offset(row, 4).Value = bestp 
ActiveCell.Offset(row, 5).Value = bestfn 
' Format numbers with appropriate precision 
ActiveCell.Offset(row, 1).NumberFormat = "0.00" 
ActiveCell.Offset(row, 2).NumberFormat = "0.00" 
ActiveCell.Offset(row, 3).NumberFormat = "0.0000" 
ActiveCell.Offset(row, 4).NumberFormat = "0.0000" 
ActiveCell.Offset(row, 5).NumberFormat = "0.00" 
row = row + 1 
Next i 
End Sub 
Function ordn(z As Double) As Double 
ordn = 0.39894228 * Exp(-z * z / 2) 
End Function
Appendix D — AS 223 Subroutines for Optimum Ridge Parameter Selection as 
Originally Implemented in FORTRAN 
SUBROUTINE ORPS1(ALPHA, LAMDA, DELTA, IP, SIGMA, KNEW, 
                FM10, FM1K, FM20, FM2K, ITER, IFAULT) 
    ALGORITHM AS223  APPL. STATIST. (1987) VOL. 36, NO. 1 
    Calculates the optimum ridge parameter under the criterion 
    of minimizing the mean squared error of parameter estimation 
INTEGER FM20, IMAX, IP, ITER, IFAULT 
REAL ALPHA(IP), LAMDA(IP), DELTA, K, KNEW, KOLD, DK, FM10, 
    FM1K, FM2K, DFM1K, DDFM1K, S, SIGMA 
REAL ZERO 
FM1(X, Y) = (Y * S**2 + (X * K)**2) / ((Y + K)**2 * S**2) 
FM2(X, Y) = Y * FM1(X, Y) 
DFM1(X, Y) = Y * (X**2 * K - S**2) / (Y + K)**3 
DDFM1(X, Y) = Y * (Y * X**2 - 2.0 * X**2 * K + 3.0 * S**2) / 
                 (Y + K)**4 
DATA ZERO/0.0/ 
IFAULT = 1 
IF (DELTA .LE. ZERO) RETURN 
IFAULT = 2 
IF (SIGMA .LE. ZERO) RETURN 
IFAULT = 3 
DO 10 J = 1, IP 
IF (LAMDA(J) .LE. ZERO) RETURN 
10 CONTINUE 
IFAULT = 0 
K = ZERO 
FM10 = ZERO 
S = SIGMA 
DO 20 J = 1, IP 
FM10 = FM10 + FM1(ALPHA(J), LAMDA(J)) 
20 CONTINUE 
FM20 = IP 
ITER = 0 
IMAX = 20 
KNEW = ZERO 
DO 40 I = 1, IMAX 
ITER = ITER + 1 
FM1K = ZERO 
FM2K = ZERO 
DFM1K = ZERO 
DDFM1K = ZERO 
DO 30 J = 1, IP 
FM1K = FM1K + FM1(ALPHA(J), LAMDA(J)) 
FM2K = FM2K + FM2(ALPHA(J), LAMDA(J)) 
DFM1K = DFM1K + DFM1(ALPHA(J), LAMDA(J)) 
DDFM1K = DDFM1K + DDFM1(ALPHA(J), LAMDA(J)) 
30   CONTINUE 
KOLD = KNEW 
KNEW = KOLD - DFM1K / DDFM1K 
K = KNEW 
DK = ABS(KNEW - KOLD) 
IF (DK .LE. DELTA) GO TO 50 
40 CONTINUE 
50 RETURN 
END 
SUBROUTINE ORPS2(ALPHA, LAMDA, DELTA, IP, SIGMA, KNEW, 
                FM10, FM1K, FM20, FM2K, ITER, IFAULT) 
    ALGORITHM AS223  APPL. STATIST. (1987) VOL. 36, NO. 1 
    Calculates the optimum ridge parameter under the criterion 
    of minimizing the mean squared error of prediction. 
INTEGER FM20, IMAX, IP, ITER, IFAULT 
REAL ALPHA(IP), LAMDA(IP), DELTA, K, KNEW, KOLD, DK, FM10, 
    FM1K, FM2K, DFM2K, DDFM2K, S, SIGMA 
REAL ZERO 
FM1(X, Y) = (Y * S**2 + (X * K)**2) / ((Y + K)**2 * S**2) 
FM2(X, Y) = Y * FM1(X, Y) 
DFM1(X, Y) = Y * (X**2 * K - S**2) / (Y + K)**3 
DFM2(X, Y) = Y * DFM1(X, Y) 
DDFM1(X, Y) = Y * (Y * X**2 - 2.0 * X**2 * K + 3.0 * S**2) / 
                 (Y + K)**4 
DDFM2(X, Y) = Y * DDFM1(X, Y) 
DATA ZERO/0.0/ 
IFAULT = 1 
IF (DELTA .LE. ZERO) RETURN 
IFAULT = 2 
IF (SIGMA .LE. ZERO) RETURN 
IFAULT = 3 
DO 10 J = 1, IP 
IF (LAMDA(J) .LE. ZERO) RETURN 
10 CONTINUE 
IFAULT = 0 
K = ZERO 
FM10 = ZERO 
S = SIGMA 
DO 20 J = 1, IP 
FM10 = FM10 + FM1(ALPHA(J), LAMDA(J)) 
20 CONTINUE 
FM20 = IP 
ITER = 0 
IMAX = 20 
KNEW = ZERO 
DO 40 I = 1, IMAX 
ITER = ITER + 1 
FM1K = ZERO 
FM2K = ZERO 
DFM2K = ZERO 
DDFM2K = ZERO 
DO 30 J = 1, IP 
FM1K = FM1K + FM1(ALPHA(J), LAMDA(J)) 
FM2K = FM2K + FM2(ALPHA(J), LAMDA(J)) 
DFM2K = DFM2K + DFM2(ALPHA(J), LAMDA(J)) 
DDFM2K = DDFM2K + DDFM2(ALPHA(J), LAMDA(J)) 
30   CONTINUE 
KOLD = KNEW 
KNEW = KOLD - DFM2K / DDFM2K 
K = KNEW 
DK = ABS(KNEW - KOLD) 
IF (DK .LE. DELTA) GO TO 50 
40 CONTINUE 
50 RETURN 
END 
Appendix E — AS 223 Subroutines for Optimum Ridge Parameter Selection as Re-
written in VBA 
Option Explicit 
' Global constants 
Const MAX_ARRAY As Integer = 1000 
Const BUTTONS As Integer = vbOKOnly + vbExclamation 
Const TITLE As String = "Input Error" 
Const ERROR1 As String = "Please make sure delta > 0." 
Const ERROR2 As String = "Please make sure sigma > 0." 
Const ERROR3 As String = "Please make all lambda values > 0." 
Const ORPS_ONE As Boolean = True 
Const ORPS_TWO As Boolean = False 
' Global variables 
Dim alpha(1 To MAX_ARRAY) As Double 
Dim lambda(1 To MAX_ARRAY) As Double 
Dim delta As Double, sigma As Double 
Dim k As Double, s As Double 
Dim ip As Integer 
Function FM1(x As Double, y As Double) As Double 
FM1 = (y * s ^ 2 + (x * k) ^ 2) / ((y + k) ^ 2 * s ^ 2) 
End Function 
Function FM2(x As Double, y As Double) As Double 
FM2 = y * FM1(x, y) 
End Function 
Function DFM1(x As Double, y As Double) As Double 
DFM1 = y * (x ^ 2 * k - s ^ 2) / (y + k) ^ 3 
End Function 
Function DDFM1(x As Double, y As Double) As Double 
DDFM1 = y * (y * x^2 - 2 * x^2 * k + 3 * s^2) / (y + k)^4 
End Function 
Function DFM2(x As Double, y As Double) As Double 
DFM2 = y * DFM1(x, y) 
End Function 
Function DDFM2(x As Double, y As Double) As Double 
DDFM2 = y * DDFM1(x, y) 
End Function 
Documents you may be interested
Documents you may be interested