home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / CPROG / ANUMR5.ZIP / SHOTTEST.C < prev    next >
C/C++ Source or Header  |  1991-10-20  |  2KB  |  109 lines

  1. #include <math.h>
  2. #include <conio.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <alloc.h>
  6.  
  7. #include "anum.h"
  8. #include "sysio.h"
  9.  
  10. #define LFLOATALLOC(p,n) p=farcalloc(n, sizeof(double));
  11.  
  12. /*
  13.  
  14.  f(t, x, x') = x"
  15.  
  16. */
  17.  
  18. double f(double t, double x, double xprime)
  19.  
  20. {    double res;
  21.  
  22.     res=x/xprime;
  23.     res*=res*192;
  24.     return(res);
  25. }
  26.  
  27.  
  28.  
  29.  
  30. void results(int nret, int iter,
  31.         double *tval, double *xval, double *xprimeval)
  32.  
  33. {    int i;
  34.  
  35.     printf("\nResults after %d iteration%c :\n\n",
  36.         iter, (iter >=2 ? 's' : ' '));
  37.     puts("       T           X           X'");
  38.     puts("----------------------------------------");
  39.     for (i=0; i<nret; i++)
  40.         printf("% 10.5le  % 10.5le % 10.5le\n",
  41.                 *(tval+i), *(xval+i), *(xprimeval+i));
  42. }
  43.  
  44.  
  45.  
  46. void main(void)
  47.  
  48. {    double Tlb,Tub,lbXval,ubXval,slope0,tol;
  49.     int iter, maxiter;
  50.     double *tval, *xval, *xprimeval;
  51.     int nint,nret, errcode;
  52.  
  53.     clrscr();
  54.     puts("Test program for function shooting");
  55.     puts("----------------------------------\n");
  56.  
  57.     Tlb=1.0;
  58.     Tub=2.0;
  59.     lbXval=3.0;
  60.     ubXval=4.0;
  61.     slope0=5.0;
  62.     nret=6;
  63.     nint=7;
  64.     tol=1.e-8;
  65.     maxiter=100;
  66.  
  67.  
  68.  
  69.     printf("T lower bound          : %+10.5lf\n",Tlb);
  70.     printf("T upper bound          : %+10.5lf\n",Tub);
  71.     printf("X at T = %10.15lf      : %+10.5lf\n",lbXval);
  72.     printf("X at T = %10.15lf      : %+10.5lf\n",ubXval);
  73.     printf("Slope at T = %10.15lf  : %+10.5lf\n",slope0);
  74.  
  75.  
  76.     printf("Number of asked values : %3d\n",nret);
  77.     printf("Number of intervals    : %3d\n\n",nint);
  78.  
  79.     tval      = farcalloc(nret, sizeof(double));
  80.     xval      = farcalloc(nret, sizeof(double));
  81.     xprimeval = farcalloc(nret, sizeof(double));
  82.  
  83.  
  84.     if (tval==NULL || xval==NULL || xprimeval==NULL)
  85.     {    fputs("Not enough working core",stderr);
  86.         exit(-1);
  87.     }
  88.  
  89.  
  90.     shooting(Tlb, Tub, lbXval, ubXval, slope0,
  91.          nret,
  92.          tol, maxiter, nint,
  93.          &iter,
  94.          tval, xval, xprimeval,
  95.          &errcode,
  96.          f);
  97.  
  98.     SYSMSG(errcode, stderr);
  99.  
  100.     results( nret, iter, tval, xval, xprimeval);
  101.  
  102.     farfree(tval);
  103.     farfree(xval);
  104.     farfree(xprimeval);
  105.  
  106.  
  107. }
  108.  
  109.