00001
00002
00003
00004
00005
00006
00007
00008 #include <df1b2fun.h>
00009
00010 df1b2variable * df3_one_variable::ind_var=0;
00011
00012 df3_one_variable::df3_one_variable(const df3_one_variable& x)
00013 {
00014 v[0]=x.v[0];
00015 v[1]=x.v[1];
00016 v[2]=x.v[2];
00017 v[3]=x.v[3];
00018 }
00019
00020 df3_one_vector::df3_one_vector(const df3_one_vector& m2)
00021 {
00022 index_min=m2.index_min;
00023 index_max=m2.index_max;
00024 shape=m2.shape;
00025 if (shape)
00026 {
00027 (shape->ncopies)++;
00028 }
00029 v = m2.v;
00030 }
00031
00032 df3_one_vector::~df3_one_vector()
00033 {
00034 deallocate();
00035 }
00036
00037 void df3_one_vector::deallocate(void)
00038 {
00039 if(shape)
00040 {
00041 if (shape->ncopies)
00042 {
00043 (shape->ncopies)--;
00044 }
00045 else
00046 {
00047 v = (df3_one_variable*) (shape->trueptr);
00048 delete [] v;
00049 v = NULL;
00050 delete shape;
00051 shape=0;
00052 }
00053 }
00054 }
00055
00056 dvector value(const df3_one_vector& v)
00057 {
00058
00059 int mmin=v.indexmin();
00060 int mmax=v.indexmax();
00061 dvector cv(mmin,mmax);
00062 for (int i=mmin;i<=mmax;i++)
00063 {
00064 cv(i)=value(v(i));
00065 }
00066 return cv;
00067 }
00068
00069 dvector first_derivatives(const df3_one_vector& v)
00070 {
00071
00072 int mmin=v.indexmin();
00073 int mmax=v.indexmax();
00074 dvector cv(mmin,mmax);
00075 for (int i=mmin;i<=mmax;i++)
00076 {
00077 cv(i)=*(v(i).get_udot());
00078 }
00079 return cv;
00080 }
00081
00082
00083 dvector second_derivatives(const df3_one_vector& v)
00084 {
00085
00086 int mmin=v.indexmin();
00087 int mmax=v.indexmax();
00088 dvector cv(mmin,mmax);
00089 for (int i=mmin;i<=mmax;i++)
00090 {
00091 cv(i)=*(v(i).get_udot2());
00092 }
00093 return cv;
00094 }
00095
00096 dvector third_derivatives(const df3_one_vector& v)
00097 {
00098
00099 int mmin=v.indexmin();
00100 int mmax=v.indexmax();
00101 dvector cv(mmin,mmax);
00102 for (int i=mmin;i<=mmax;i++)
00103 {
00104 cv(i)=*(v(i).get_udot3());
00105 }
00106 return cv;
00107 }
00108
00109
00110 void df3_one_vector::initialize(void)
00111 {
00112 int mmin=indexmin();
00113 int mmax=indexmax();
00114 for (int i=mmin;i<=mmax;i++)
00115 {
00116 (*this)(i)=0.0;
00117 }
00118 }
00119
00120 df3_one_vector::df3_one_vector(void)
00121 {
00122 allocate();
00123 }
00124
00125 df3_one_vector::df3_one_vector(int min,int max)
00126 {
00127 allocate(min,max);
00128 }
00129
00130 void df3_one_vector::allocate(int min,int max)
00131 {
00132 index_min=min;
00133 index_max=max;
00134 v=new df3_one_variable[max-min+1];
00135 if (v==0)
00136 {
00137 cerr << "error allocating memory in df3_one_vector" << endl;
00138 ad_exit(1);
00139 }
00140 if ( (shape=new vector_shapex(min,max,v)) == NULL)
00141 {
00142 cerr << "Error trying to allocate memory for df3_one_vector"
00143 << endl;;
00144 ad_exit(1);
00145 }
00146 v-=min;
00147 }
00148
00149 void df3_one_vector::allocate(void)
00150 {
00151 index_min=0;
00152 index_max=-1;
00153 v=0;
00154 shape=0;
00155 }
00156
00157
00158 dmatrix value(const df3_one_matrix& v)
00159 {
00160
00161 int rmin=v.indexmin();
00162 int rmax=v.indexmax();
00163 dmatrix cm(rmin,rmax);
00164 for (int i=rmin;i<=rmax;i++)
00165 {
00166 int cmin=v(i).indexmin();
00167 int cmax=v(i).indexmax();
00168 cm(i).allocate(cmin,cmax);
00169 for (int j=cmin;j<=cmax;j++)
00170 {
00171 cm(i,j)=value(v(i,j));
00172 }
00173 }
00174 return cm;
00175 }
00176
00177 dmatrix first_derivatives(const df3_one_matrix& v)
00178 {
00179
00180 int rmin=v.indexmin();
00181 int rmax=v.indexmax();
00182 dmatrix cm(rmin,rmax);
00183 for (int i=rmin;i<=rmax;i++)
00184 {
00185 int cmin=v(i).indexmin();
00186 int cmax=v(i).indexmax();
00187 cm(i).allocate(cmin,cmax);
00188 cm(i)=first_derivatives(v(i));
00189 }
00190 return cm;
00191 }
00192
00193
00194 dmatrix second_derivatives(const df3_one_matrix& v)
00195 {
00196 int rmin=v.indexmin();
00197 int rmax=v.indexmax();
00198 dmatrix cm(rmin,rmax);
00199 for (int i=rmin;i<=rmax;i++)
00200 {
00201 int cmin=v(i).indexmin();
00202 int cmax=v(i).indexmax();
00203 cm(i).allocate(cmin,cmax);
00204 cm(i)=second_derivatives(v(i));
00205 }
00206 return cm;
00207 }
00208
00209 dmatrix third_derivatives(const df3_one_matrix& v)
00210 {
00211 int rmin=v.indexmin();
00212 int rmax=v.indexmax();
00213 dmatrix cm(rmin,rmax);
00214 for (int i=rmin;i<=rmax;i++)
00215 {
00216 int cmin=v(i).indexmin();
00217 int cmax=v(i).indexmax();
00218 cm(i).allocate(cmin,cmax);
00219 cm(i)=third_derivatives(v(i));
00220 }
00221 return cm;
00222 }
00223
00224
00225 df3_one_matrix::df3_one_matrix(const df3_one_matrix& m2)
00226 {
00227 index_min=m2.index_min;
00228 index_max=m2.index_max;
00229 shape=m2.shape;
00230 if (shape)
00231 {
00232 (shape->ncopies)++;
00233 }
00234 v = m2.v;
00235 }
00236
00237 df3_one_matrix::~df3_one_matrix()
00238 {
00239 deallocate();
00240 }
00241
00242 void df3_one_matrix::deallocate(void)
00243 {
00244 if (shape)
00245 {
00246 if (shape->ncopies)
00247 {
00248 (shape->ncopies)--;
00249 }
00250 else
00251 {
00252 v = (df3_one_vector*) (shape->get_pointer());
00253 delete [] v;
00254 v=0;
00255 delete shape;
00256 shape=0;
00257 }
00258 }
00259 }
00260
00261
00262 void df3_one_matrix::initialize(void)
00263 {
00264 int mmin=indexmin();
00265 int mmax=indexmax();
00266 for (int i=mmin;i<=mmax;i++)
00267 {
00268 (*this)(i).initialize();
00269 }
00270 }
00271
00272
00273 df3_one_matrix::df3_one_matrix(int rmin,int rmax,int cmin,int cmax)
00274 {
00275 index_min=rmin;
00276 index_max=rmax;
00277 v=new df3_one_vector[rmax-rmin+1];
00278 if (v==0)
00279 {
00280 cerr << "error allocating memory in df3_one_matrix" << endl;
00281 ad_exit(1);
00282 }
00283 if ( (shape=new mat_shapex(v)) == NULL)
00284 {
00285 cerr << "Error trying to allocate memory for df3_one_vector"
00286 << endl;;
00287 }
00288 v-=rmin;
00289
00290 for (int i=rmin;i<=rmax;i++)
00291 {
00292 v[i].allocate(cmin,cmax);
00293 }
00294 }
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316 df3_one_variable& df3_one_variable::operator -= (double v)
00317 {
00318 *get_u() -= v;
00319 return *this;
00320 }
00321
00322
00323 df3_one_variable& df3_one_variable::operator -= (const df3_one_variable& v)
00324 {
00325 *get_u() -= *v.get_u();
00326
00327 *get_udot() -= *v.get_udot();
00328 *get_udot2() -= *v.get_udot2();
00329 *get_udot3() -= *v.get_udot3();
00330 return *this;
00331 }
00332
00333 df3_one_variable operator - (const df3_one_variable& v)
00334 {
00335 df3_one_variable z;
00336 *z.get_u() =- *v.get_u();
00337
00338 *z.get_udot() =- *v.get_udot();
00339 *z.get_udot2() =- *v.get_udot2();
00340 *z.get_udot3() =- *v.get_udot3();
00341 return z;
00342 }
00343
00344 df3_one_variable& df3_one_variable::operator += (const df3_one_variable& v)
00345 {
00346 *get_u() += *v.get_u();
00347
00348 *get_udot() += *v.get_udot();
00349 *get_udot2() += *v.get_udot2();
00350 *get_udot3() += *v.get_udot3();
00351 return *this;
00352 }
00353
00354 df3_one_variable sqrt(const df3_one_variable& x)
00355 {
00356 df3_one_variable z;
00357 double u=::sqrt(*x.get_u());
00358 double xinv=1.0/(*x.get_u());
00359 double zp=0.5/u;
00360 double zp2=-0.5*zp*xinv;
00361 double zp3=-1.5*zp2*xinv;
00362
00363 *z.get_u() = u;
00364
00365 *z.get_udot() = zp* *x.get_udot();
00366
00367 *z.get_udot2() = zp2 * square(*x.get_udot())
00368 + zp * *x.get_udot2();
00369
00370 *z.get_udot3() = zp3 * cube(*x.get_udot())
00371 + 3.0 * zp2 * *x.get_udot() * *x.get_udot2()
00372 + zp * *x.get_udot3();
00373
00374 return z;
00375 }
00376
00377
00378
00379 df3_one_variable exp(const df3_one_variable& x)
00380 {
00381 df3_one_variable z;
00382
00383 *z.get_u() = ::exp(*x.get_u());
00384
00385 *z.get_udot() = ::exp(*x.get_u())* *x.get_udot();
00386
00387 *z.get_udot2() = ::exp(*x.get_u())* square(*x.get_udot())
00388 + ::exp(*x.get_u())* *x.get_udot2();
00389
00390 *z.get_udot3() = ::exp(*x.get_u()) * cube(*x.get_udot())
00391 + 3.0 * ::exp(*x.get_u()) * *x.get_udot() * *x.get_udot2();
00392 + ::exp(*x.get_u()) * *x.get_udot3();
00393 return z;
00394 }
00395
00396 df3_one_variable log(const df3_one_variable& x)
00397 {
00398 df3_one_variable z;
00399
00400 double xp=1.0/(*x.get_u());
00401 double xp2=-square(xp);
00402 double xp3=-2.0*xp*xp2;
00403
00404 *z.get_u() = ::log(*x.get_u());
00405
00406 *z.get_udot() = xp * *x.get_udot();
00407
00408 *z.get_udot2() = xp2* square(*x.get_udot())
00409 + xp * *x.get_udot2();
00410
00411 *z.get_udot3() = xp3 * cube(*x.get_udot())
00412 + 3.0 * xp2 * *x.get_udot() * *x.get_udot2();
00413 + xp * *x.get_udot3();
00414 return z;
00415 }
00416
00417 df3_one_variable inv(const df3_one_variable& x)
00418 {
00419 df3_one_variable z;
00420 double xinv=1.0/(*x.get_u());
00421 double zp=-xinv*xinv;
00422 double zp2=-2.0*zp*xinv;
00423 double zp3=-3.0*zp2*xinv;
00424
00425 *z.get_u() = xinv;
00426 *z.get_udot() = zp * *x.get_udot();
00427
00428 *z.get_udot2() = zp2 * square(*x.get_udot())
00429 + zp * *x.get_udot2();
00430
00431 *z.get_udot3() = zp3 * cube(*x.get_udot())
00432 + 3.0 * zp2 * *x.get_udot() * *x.get_udot2()
00433 + zp * *x.get_udot3();
00434
00435 return z;
00436 }
00437
00438 df3_one_variable& df3_one_variable::operator = (const df3_one_variable& x)
00439 {
00440 *get_u() = *x.get_u();
00441 *get_udot() = *x.get_udot();
00442 *get_udot2() = *x.get_udot2();
00443 *get_udot3() = *x.get_udot3();
00444 return *this;
00445 }
00446
00447 df3_one_variable& df3_one_variable::operator = (double x)
00448 {
00449 *get_u() = x;
00450 *get_udot() = 0.0;
00451 *get_udot2() = 0.0;
00452 *get_udot3() = 0.0;
00453 return *this;
00454 }
00455
00456
00457 df3_one_variable operator * (const df3_one_variable& x,
00458 const df3_one_variable& y)
00459 {
00460 df3_one_variable z;
00461 *z.get_u() = *x.get_u() * *y.get_u();
00462 *z.get_udot() = *x.get_u() * *y.get_udot()
00463 + *x.get_udot() * *y.get_u();
00464
00465 *z.get_udot2() = *x.get_udot2() * *y.get_u()
00466 + 2.0 * *x.get_udot() * *y.get_udot()
00467 + *x.get_u() * *y.get_udot2();
00468
00469 *z.get_udot3() = *x.get_udot3() * *y.get_u()
00470 + 3.0 * *x.get_udot2() * *y.get_udot()
00471 + 3.0 * *x.get_udot() * *y.get_udot2()
00472 + *x.get_u() * *y.get_udot3();
00473 return z;
00474 }
00475
00476 df3_one_variable operator * (double x,
00477 const df3_one_variable& y)
00478 {
00479 df3_one_variable z;
00480 *z.get_u() = x * *y.get_u();
00481 *z.get_udot() = x * *y.get_udot();
00482
00483 *z.get_udot2() = x * *y.get_udot2();
00484
00485 *z.get_udot3() = x * *y.get_udot3();
00486 return z;
00487 }
00488
00489 df3_one_variable operator * (const df3_one_variable& x,
00490 double y)
00491 {
00492 df3_one_variable z;
00493 *z.get_u() = *x.get_u() * y;
00494 *z.get_udot() = *x.get_udot() * y;
00495
00496 *z.get_udot2() = *x.get_udot2() * y;
00497
00498 *z.get_udot3() = *x.get_udot3() * y;
00499 return z;
00500 }
00501
00502
00503 df3_one_variable operator / (const df3_one_variable& x,
00504 const df3_one_variable& y)
00505 {
00506 df3_one_variable u=inv(y);
00507 return x*u;
00508 }
00509
00510 df3_one_variable operator / (double x,
00511 const df3_one_variable& y)
00512 {
00513 df3_one_variable u=inv(y);
00514 return x*u;
00515 }
00516
00517 df3_one_variable operator + (double x,const df3_one_variable& y)
00518 {
00519 df3_one_variable z;
00520 *z.get_u() = x + *y.get_u();
00521 *z.get_udot() = *y.get_udot();
00522 *z.get_udot2() = *y.get_udot2();
00523 *z.get_udot3() = *y.get_udot3();
00524 return z;
00525 }
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556 df3_one_variable operator + (const df3_one_variable& y,
00557 const double x)
00558 {
00559 df3_one_variable z;
00560 *z.get_u() = x + *y.get_u();
00561 *z.get_udot() = *y.get_udot();
00562 *z.get_udot2() = *y.get_udot2();
00563 *z.get_udot3() = *y.get_udot3();
00564 return z;
00565 }
00566
00567 df3_one_variable operator + (const df3_one_variable& x,
00568 const df3_one_variable& y)
00569 {
00570 df3_one_variable z;
00571 *z.get_u() = *x.get_u() + *y.get_u();
00572 *z.get_udot() = *x.get_udot() + *y.get_udot();
00573 *z.get_udot2() = *x.get_udot2() + *y.get_udot2();
00574 *z.get_udot3() = *x.get_udot3() + *y.get_udot3();
00575 return z;
00576 }
00577
00578 df3_one_variable operator - (const df3_one_variable& x,
00579 const df3_one_variable& y)
00580 {
00581 df3_one_variable z;
00582 *z.get_u() = *x.get_u() - *y.get_u();
00583 *z.get_udot() = *x.get_udot() - *y.get_udot();
00584 *z.get_udot2() = *x.get_udot2() - *y.get_udot2();
00585 *z.get_udot3() = *x.get_udot3() - *y.get_udot3();
00586 return z;
00587 }
00588
00589 df3_one_variable operator - (const df3_one_variable& x,
00590 double y)
00591 {
00592 df3_one_variable z;
00593 *z.get_u() = *x.get_u() - y;
00594 *z.get_udot() = *x.get_udot();
00595 *z.get_udot2() = *x.get_udot2();
00596 *z.get_udot3() = *x.get_udot3();
00597 return z;
00598 }
00599
00600 df3_one_variable operator - (const df3_one_variable& x,
00601 const df3_one_variable& y);
00602 df3_one_variable operator / (const df3_one_variable& x,
00603 const df3_one_variable& y);
00604 df3_one_variable operator * (const df3_one_variable& x,
00605 const df3_one_variable& y);
00606
00607
00608 init_df3_one_variable::init_df3_one_variable(const df1b2variable& _v)
00609 {
00610 ADUNCONST(df1b2variable,v)
00611
00612
00613
00614
00615
00616
00617
00618
00619 ind_var=&v;
00620 *get_u() = *v.get_u();
00621 *get_udot() = 1.0;
00622 *get_udot2() = 0.0;
00623 *get_udot3() = 0.0;
00624 }
00625
00626 init_df3_one_variable::init_df3_one_variable(double v)
00627 {
00628 *get_u() = v;
00629 *get_udot() = 1.0;
00630 *get_udot2() = 0.0;
00631 *get_udot3() = 0.0;
00632 }
00633
00634 df3_one_variable::df3_one_variable(void)
00635 {
00636
00637
00638 }
00639
00640
00641 df3_one_matrix choleski_decomp(const df3_one_matrix& MM)
00642 {
00643
00644 df3_one_matrix & M= (df3_one_matrix &) MM;
00645 int rmin=M.indexmin();
00646 int cmin=M(rmin).indexmin();
00647 int rmax=M.indexmax();
00648 int cmax=M(rmin).indexmax();
00649 if (rmin !=1 || cmin !=1)
00650 {
00651 cerr << "minimum row and column inidices must equal 1 in "
00652 "df1b2matrix choleski_decomp(const df3_one_atrix& MM)"
00653 << endl;
00654 ad_exit(1);
00655 }
00656 if (rmax !=cmax)
00657 {
00658 cerr << "Error in df1b2matrix choleski_decomp(const df3_one_matrix& MM)"
00659 " Matrix not square" << endl;
00660 ad_exit(1);
00661 }
00662
00663 int n=rmax-rmin+1;
00664 df3_one_matrix L(1,n,1,n);
00665 #ifndef SAFE_INITIALIZE
00666 L.initialize();
00667 #endif
00668
00669 int i,j,k;
00670 df3_one_variable tmp;
00671
00672 if (value(M(1,1))<=0)
00673 {
00674 cerr << "Error matrix not positive definite in choleski_decomp"
00675 <<endl;
00676 ad_exit(1);
00677 }
00678
00679 L(1,1)=sqrt(M(1,1));
00680 for (i=2;i<=n;i++)
00681 {
00682 L(i,1)=M(i,1)/L(1,1);
00683 }
00684
00685 for (i=2;i<=n;i++)
00686 {
00687 for (j=2;j<=i-1;j++)
00688 {
00689 tmp=M(i,j);
00690 for (k=1;k<=j-1;k++)
00691 {
00692 tmp-=L(i,k)*L(j,k);
00693 }
00694 L(i,j)=tmp/L(j,j);
00695 }
00696 tmp=M(i,i);
00697 for (k=1;k<=i-1;k++)
00698 {
00699 tmp-=L(i,k)*L(i,k);
00700 }
00701
00702 if (value(tmp)<=0)
00703 {
00704 cerr << "Error matrix not positive definite in choleski_decomp"
00705 <<endl;
00706 ad_exit(1);
00707 }
00708
00709 L(i,i)=sqrt(tmp);
00710 }
00711
00712 return L;
00713 }
00714
00715 df1b2matrix& df1b2matrix::operator = (const df3_one_matrix& M)
00716 {
00717 int rmin=M.indexmin();
00718 int rmax=M.indexmax();
00719 if (rmin != indexmin() || rmax != indexmax())
00720 {
00721 cerr << "unequal shape in "
00722 "df1b2matrix& df1b2matrix::operator = (const df3_one_matrix& M)"
00723 << endl;
00724 ad_exit(1);
00725 }
00726
00727 for (int i=rmin;i<=rmax;i++)
00728 {
00729 (*this)(i)=M(i);
00730 }
00731 return *this;
00732 }
00733
00734
00735 df1b2vector& df1b2vector::operator = (const df3_one_vector& M)
00736 {
00737 int rmin=M.indexmin();
00738 int rmax=M.indexmax();
00739 if (rmin != indexmin() || rmax != indexmax())
00740 {
00741 cerr << "unequal shape in "
00742 "df1b2vector& df1b2vector::operator = (const df3_one_vector& M)"
00743 << endl;
00744 ad_exit(1);
00745 }
00746
00747 for (int i=rmin;i<=rmax;i++)
00748 {
00749 (*this)(i)=M(i);
00750 }
00751 return *this;
00752 }
00753
00754
00755 df1b2variable& df1b2variable::operator = (const df3_one_variable& v)
00756 {
00757 df1b2variable * px=df3_one_variable::ind_var;
00758
00759
00760 double df= *v.get_udot();
00761 double * xd=px->get_u_dot();
00762 double * zd=get_u_dot();
00763 *get_u()=*v.get_u();
00764 for (int i=0;i<df1b2variable::nvar;i++)
00765 {
00766 *zd++ = df * *xd++;
00767 }
00768
00769
00770
00771
00772
00773
00774
00775 f1b2gradlist->write_pass1(px,this,*v.get_udot(),*v.get_udot2(),
00776
00777 *v.get_udot3());
00778 return *this;
00779 }
00780
00781
00782 df1b2variable cumd_norm(const df1b2variable& _x)
00783 {
00784 df1b2variable z;
00785 init_df3_one_variable x(_x);
00786
00787 const double b1=0.319381530;
00788 const double b2=-0.356563782;
00789 const double b3=1.781477937;
00790 const double b4=-1.821255978;
00791 const double b5=1.330274429;
00792 const double p=.2316419;
00793
00794 if (value(x)>=0)
00795 {
00796 df3_one_variable u1=p*x;
00797 df3_one_variable u2=1.+p*x;
00798 df3_one_variable u=1./(1.+p*x);
00799 df3_one_variable y= ((((b5*u+b4)*u+b3)*u+b2)*u+b1)*u;
00800 df3_one_variable tmp1=-0.3989422804*exp(-.5*x*x);
00801 z=1.0+tmp1*y;
00802 }
00803 else
00804 {
00805 df3_one_variable w=-x;
00806 df3_one_variable u=1./(1+p*w);
00807 df3_one_variable y= ((((b5*u+b4)*u+b3)*u+b2)*u+b1)*u;
00808 df3_one_variable tmp1=0.3989422804*exp(-.5*x*x);
00809 z=tmp1*y;
00810 }
00811 return z;
00812 }
00813
00814 df1b2variable bounded_cumd_norm(const df1b2variable& _x, double beta)
00815 {
00816 df1b2variable z;
00817 init_df3_one_variable x(_x);
00818
00819 const double b1=0.319381530;
00820 const double b2=-0.356563782;
00821 const double b3=1.781477937;
00822 const double b4=-1.821255978;
00823 const double b5=1.330274429;
00824 const double p=.2316419;
00825
00826 if (value(x)>=0)
00827 {
00828 df3_one_variable u1=p*x;
00829 df3_one_variable u2=1.+p*x;
00830 df3_one_variable u=1./(1.+p*x);
00831 df3_one_variable y= ((((b5*u+b4)*u+b3)*u+b2)*u+b1)*u;
00832 df3_one_variable tmp1=-0.3989422804*exp(-.5*x*x);
00833 z=1.0+tmp1*y;
00834 }
00835 else
00836 {
00837 df3_one_variable w=-x;
00838 df3_one_variable u=1./(1+p*w);
00839 df3_one_variable y= ((((b5*u+b4)*u+b3)*u+b2)*u+b1)*u;
00840 df3_one_variable tmp1=0.3989422804*exp(-.5*x*x);
00841 z=tmp1*y;
00842 }
00843 z=beta*(z-0.5)+0.5;
00844 return z;
00845 }
00846
00847