home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / CPROG / ANUMR5.ZIP / EDIS2TST.C < prev    next >
C/C++ Source or Header  |  1991-11-25  |  3KB  |  150 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.  
  11.  
  12.  
  13. /* Differential equation are defined as follows :
  14.  
  15.  
  16.     x" = f(v, v')
  17.      n
  18.  
  19.     with v = (t, x , x , ..., x , ..., x    )
  20.           1   2        n        nbeq
  21.  
  22.     and  v'= (1, x', x', ..., x', ..., x'   )
  23.           1   2        n        nbeq
  24.  
  25. */
  26.  
  27.  
  28. double bf1(double *v, double *vprime)
  29.  
  30. {    double t, res;
  31.  
  32.     t = *v;
  33.     res = -9.8 * (*(v+1)) / 0.6125 - 16.0 * (*(v+1) - *(v+2));
  34.     return(res);
  35. }
  36.  
  37.  
  38.  
  39. double bf2(double *vX, double *vXprime)
  40.  
  41. {    double t,res;
  42.  
  43.     t = *vX;
  44.     res = -9.8 * (*(vX+2)) / 0.6125 + 16.0 * (*(vX+1) - *(vX+2));
  45.     return(res);
  46. }
  47.  
  48.  
  49.  
  50.  
  51.  
  52. void results(int neq, int nret, double *matsol)
  53.  
  54. {    int i,j;
  55.  
  56.     for (i=0; i<neq; i++)
  57.     {    printf("\n       T          Value       \n");
  58.           puts("------------------------------");
  59.           for (j=0; j<nret; j++)
  60.             printf("% 10.5le  % 10.5le\n",
  61.                 *(matsol+j*(neq+1)),
  62.                 *(matsol+j*(neq+1)+i+1));
  63.     }
  64. }
  65.  
  66.  
  67.  
  68. void main(void)
  69.  
  70. {    double lb,ub,*initvalX, *initvalXprime, *matsolX, *matsolXprime;
  71.     int nint,nret,neq,i,errcode;
  72.     double (**tabfunc)(double *, double *);
  73.  
  74.     clrscr();
  75.     puts("Test program for function initcondsystem2");
  76.     puts("-----------------------------------------\n");
  77.  
  78.     neq = 2;
  79.     lb=3.0;
  80.     ub=4.0;
  81.  
  82.     if ((initvalX=farcalloc(neq,sizeof(double)))==NULL)
  83.     {    fputs("Not enough core", stderr);
  84.         exit(-1);
  85.     }
  86.  
  87.     if ((initvalXprime=farcalloc(neq,sizeof(double)))==NULL)
  88.     {    fputs("Not enough core", stderr);
  89.         exit(-1);
  90.     }
  91.  
  92.     tabfunc=farcalloc(neq,sizeof( double (*)() ));
  93.  
  94.     if (tabfunc==NULL)
  95.     {    fputs("Not enough core", stderr);
  96.         exit(-1);
  97.     }
  98.     *tabfunc = *bf1;
  99.     *(tabfunc+1) = *bf2;
  100.  
  101.  
  102.     *initvalX     =  5.0;
  103.     *(initvalX+1) =  7.0;
  104.     *initvalXprime     =  6.0;
  105.     *(initvalXprime+1) =  8.0;
  106.  
  107.  
  108.     nret=9;
  109.     nint=100;
  110.  
  111.     printf("Lower bound            : %+10.5lf\n",lb);
  112.     printf("Upper bound            : %+10.5lf\n",ub);
  113.  
  114.     for (i=0; i<neq; i++)
  115.         printf("x[%d] at t = %+lf     : %+10.5lf\n",i+1,lb,
  116.                             *(initvalX+i));
  117.     printf("Number of asked values : %3d\n",nret);
  118.     printf("Number of intervals    : %3d\n\n",nint);
  119.  
  120.     if ((matsolX=farcalloc((neq+1)*nret, sizeof(double)))==NULL)
  121.     {    fputs("Not enough core", stderr);
  122.         exit(-1);
  123.     }
  124.  
  125.     if ((matsolXprime=farcalloc((neq+1)*nret, sizeof(double)))==NULL)
  126.     {    fputs("Not enough core", stderr);
  127.         exit(-1);
  128.     }
  129.  
  130.     initcondsystem2(neq, lb, ub, initvalX, initvalXprime,
  131.             nret, nint,
  132.             matsolX, matsolXprime,
  133.             &errcode, tabfunc);
  134.  
  135.     SYSMSG(errcode, stderr);
  136.  
  137.     puts("Computed X(T) is as follows:\n");
  138.     results(neq, nret, matsolX);
  139.     puts("\n\nComputed X'(T) is as follows:\n");
  140.     results(neq, nret, matsolXprime);
  141.  
  142.     farfree(initvalX);
  143.     farfree(matsolX);
  144.     farfree(initvalXprime);
  145.     farfree(matsolXprime);
  146.     farfree(tabfunc);
  147.  
  148. }
  149.  
  150.