PURPOSE:
This program uses PROC EXPAND to calculate the approximate area under
the curve for some sample data. The sample data should consist of
(x,y) pairs.
DETAILS:
For this example, the sample data is generated from a high degree
polynomial. PROC EXPAND is then used to compute the approximate area
under the curve using each of the following methods:
a. Cubic Spline interpolation.
b. Trapezoid rule.
The exact area, given by the definite integral, is calculated
for the polynomial curve in order to assess the precision of the
approximations.
************************************************************************/
%let lower=-2;
%let upper=1;
%let interval=0.2;
* generate some data according to a high order polynomial;
data kvm;
do x=&lower to &upper by &interval;
y=15+(x-2)*(x-1.5)*(x-1)*(x-.5)*x*(x+.5)*(x+1)*(x+1.5)*(x+2);
output;
end;
proc sort;
by x;
/* PROC EXPAND will include a contribution for the last interval. For
an accurate approximation to the integral, we need to make sure that
this last contribution is negligible. So we'll append an additional
x value which is extremely close to the last x value. Of course, the
two Y values will be identical. But the result is that the last
interval is extremely short, so any contribution to the integral
approximation is negligible.
*/
data one;
set kvm end=eof;
output;
if eof then do;
x=x+(1e-10);
output;
end;
run;
proc print data=one(obs=50);
title 'First few observations of the original data';
run;
proc gplot data=one;
title 'original series';
plot y*x;
run;
proc expand data=one out=three method=spline ;
convert y=total/observed=(beginning,total) transformout=(sum);
id x;
run;
No comments:
Post a Comment