|
Functions
How to evolve a function from a table of values. Using Critticall. Here is how:
$DECLAREINT SSxx SSyy SSxy alien num1024 num0 tmp tmp1 tmp2 tmpi tmps distant xp yp i N
$DECLAREINT fx index funval
$DIMENSION X[10] Y[10]
$ENHANCING OFF
$PENVAL alien
$RESVAR X[] SSxx SSyy SSxy alien num1024 num0 tmp tmp1 tmp2 tmpi tmps distant xp yp i N
$SHOWVAR Y[] alien
// !-----------------------------------------------------------------!
$WEIGHTS commands = 0 // ! We will consider any computing light weight. It is alien !
// ! variable, which is penalized here. !
// !-----------------------------------------------------------------!
N=9;
num0=0;
fx=2; X[index]=fx; index++; // !-----------------------------------------------------------------!
fx=3; X[index]=fx; index++; // ! !
fx=5; X[index]=fx; index++; // ! !
fx=7; X[index]=fx; index++; // ! !
fx=11; X[index]=fx; index++; // ! Initial values (primes in this case) set to X[] form 2 to 29. !
fx=13; X[index]=fx; index++; // ! !
fx=17; X[index]=fx; index++; // ! !
fx=19; X[index]=fx; index++; // ! !
fx=23; X[index]=fx; index++; // ! !
fx=29; X[index]=fx; // !-----------------------------------------------------------------!
for (i=num0; i<=N; i++) {
funval=i; // f(x)=x assumption
$BES
// !-----------------------------------------------------------------!
// ! !
// ! !
// ! Here, we hope, a function will evolve! Using X[] as an example. !
// ! !
// ! !
// !-----------------------------------------------------------------!
$EES
Y[i]=funval; // y=f(x) setting
}
Xp=0; // !-----------------------------------------------------------------!
Yp=0; // ! !
for (i=num0; i<=N; i++) { // ! !
tmp=X[i]; // ! !
Xp=Xp+tmp; // ! !
tmp=Y[i]; // ! !
Yp=Yp+tmp; // ! !
} // ! !
Xp=Xp/N; // ! !
Yp=Yp/N; // ! !
SSxx=0; // ! !
SSyy=0; // ! !
SSxy=0; // ! !
for (i=num0; i<=N; i++) { // ! !
//SSxx=SSxx+(X(i)-Xp)^2 // ! !
tmp=X[i]; // ! !
tmp=tmp-Xp; // ! !
tmp=tmp*tmp; // ! Correlation between X[], which is set at the beginning, and !
SSxx=SSxx+tmp; // ! Y[] which has to be calculated inside the (evolving) !
// ! $BES - $EES segment. !
//SSyy=SSyy+(Y(i)-Yp)^2 // ! !
tmp=Y[i]; // ! !
tmp=tmp-Yp; // ! !
tmp=tmp*tmp; // ! !
SSyy=SSyy+tmp; // ! !
// ! !
//SSxy=SSxy+(X(i)-Xp)*(Y(i)-Yp) // ! !
tmp1=X[i]; // ! !
tmp1=tmp1-Xp; // ! !
tmp2=Y[i]; // ! !
tmp2=tmp2-Yp; // ! !
tmp=tmp1*tmp2; // ! !
SSxy=SSxy+tmp; // ! !
} // ! !
num1024=1024; // ! !
SSxx=sqrt(SSxx); // ! !
SSyy=sqrt(SSyy); // ! !
tmpi=SSxx*SSyy; // ! !
// ! !
tmp1=SSxy/tmpi; // ! !
tmp1=tmp1*num1024; // !-----------------------------------------------------------------!
alien=num1024-tmp1; // More alien, if there is a small correlation.
distant=0; // !-----------------------------------------------------------------!
for (i=num0; i<=N; i++) { // ! !
tmp1=X[i]; // ! !
tmp2=Y[i]; // ! Correlation may be perfect, but values still might be different.!
if (tmp1!=tmp2) { // ! Add that on the top of 1-r. !
distant++; // ! !
} // ! !
} // !-----------------------------------------------------------------!
alien=alien+distant; // How alien arrays X[] and Y[] are
alien=alien*num1024; // Just lift that some more
After an hour or so:
funval*=3;
acritticall1=y[dummy];
funval=funval-acritticall1;
if (dummy!=acritticall2) {
acritticall1=-2;
}
acritticall2<<=4;
y[dummy]=-acritticall1;
funval|=1;
That is what we've got! It's 100% correct, regarding given numbers, of course.
|