Advertisement
Guest User

Untitled

a guest
Dec 17th, 2014
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.40 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5.  
  6. int n,m;
  7. double x[40], y[40], a[40], b[40], r[40], mat[40][40], sol[40], sol2[40][5];
  8.  
  9. void sistema()
  10. {
  11.     int i,j;
  12.     for(i=0; i<n; i++)
  13.     {
  14.         for(j=0; j<n; j++)
  15.         {
  16.             mat[i][j] = pow(x[i],j);
  17.         }
  18.         r[i] = y[i];
  19.     }
  20. }
  21.  
  22. void resolversistema()
  23. {
  24.     int i,k,j;
  25.     double s;
  26.     for(i=0;i<n;i++)
  27.     {
  28.     sol[i]=x[i];
  29.     }
  30.     sol[n-1]=r[n-1]/mat[n-1][n-1];
  31.     for(k=n-2; k>=0; k--)
  32.     {
  33.         s=0;
  34.         for(j=k+1; j<n; j++)
  35.             s+=mat[k][j]*sol[j];
  36.         sol[k]=(r[k]-s)/mat[k][k];
  37.     }
  38. }
  39.  
  40. void escalonamento()
  41. {
  42.     int i,j,k;
  43.     double mult;
  44.     for(k=0; k<(n-1); k++)
  45.     {
  46.         for(i=k+1; i<n; i++)
  47.         {
  48.             mult=mat[i][k]/mat[k][k];//multiplicador
  49.             for(j=k+1; j<n; j++)
  50.             {
  51.                 mat[i][j] = mat[i][j]-mult*mat[k][j];
  52.                 //imprimeMatriz();
  53.             }
  54.             r[i]=r[i]-mult*r[k];
  55.             mat[i][k]=0;
  56.         }
  57.     }
  58. }
  59.  
  60. double fx(double x)
  61. {
  62.         int i;
  63.         double f=0;
  64.         for(i=0;i<n;i++)
  65.         {
  66.                 f = f+ (sol[i]*pow(x,i));
  67.         }
  68.         return f;
  69. }
  70.  
  71. double integralsimpson(double a, double b, int partes)
  72. {
  73.         double h, s, f, rr, fa, fb, x;
  74.         int i;
  75.         h=(b-a)/partes;
  76.         x=a;
  77.         s=0;
  78.         for(i=0;i<(partes-1)/2;i++)
  79.         {
  80.                 x=x+h;
  81.                 f=fx(x);
  82.                 s=s +(4*f);
  83.                 x=x+h;
  84.                 f=fx(x);
  85.                 s=s+ (2*f);
  86.         }
  87.         fa=fx(a);
  88.         fb=fx(b);
  89.         s = s + fa + fb;
  90.         rr=(h/3)*s;
  91.         printf("\n%lf", rr);
  92.         return rr;
  93. }
  94.  
  95. double integraltrapezio(double a, double b, double partes)
  96. {
  97.         double h, s, f, rr, fa, fb, x;
  98.         int i;
  99.         h=(b-a)/partes;
  100.         x=a;
  101.         s=0;
  102.         for(i=0;i<partes-1;i++)
  103.         {
  104.                 x=x+h;
  105.                 f=fx(x);
  106.                 s=s+2*f;
  107.         }
  108.         fa=fx(a);
  109.         fb=fx(b);
  110.         s=s+ fa +fb;
  111.         rr=(h/2)*s;
  112.         printf("\n%lf\n", rr);
  113.         return rr;
  114. }
  115. main()
  116. {
  117.         int i, j,V;
  118.         double aux;
  119.         FILE *dados,*saida;
  120.         dados=fopen("entrada.txt", "r");
  121.         saida=fopen("resultado.txt", "w");
  122.         if(dados==NULL)
  123.         {
  124.                 printf("\n Erro ao abrir arquivo");
  125.         }
  126.         else
  127.         {
  128.                 fscanf(dados, "%d", &n);
  129.                 for(i=0;i<n;i++)
  130.                 {
  131.                         fscanf(dados, "%lf", &x[i]);
  132.                         fscanf(dados, "%lf", &y[i]);
  133.                 }
  134.                 fscanf(dados, "%d", &m);
  135.                 printf("valor de m: %d", m);
  136.                 for(i=0;i<m;i++)
  137.                 {
  138.                         fscanf(dados, "%lf", &a[i]);
  139.                         fscanf(dados, "%lf", &b[i]);
  140.                 }
  141.             for(i=0;i<m;i++)
  142.               printf("%lf ", b[i]);
  143.                 sistema();
  144.                 escalonamento();
  145.                 resolversistema();    
  146.                 fprintf(saida,"POLINOMIO INTERPOLADOR\np(x)= ");
  147.                 for(i=n-1;i>=0;i--)
  148.                 {
  149.                    fprintf(saida,"%lf", sol[i]);
  150.                    
  151.                    if(i)
  152.                      fprintf(saida, " X");
  153.                    if(i>1)
  154.                       fprintf(saida, "^%d", i);
  155.                    if(i<=n-1 && i!=0)
  156.                       fprintf(saida, " + ");
  157.             }
  158.            
  159.             fprintf(saida,"\n\nAPROXIMACOES\n");
  160.            
  161.             for(i=0;i<m;i++)
  162.             {
  163.                 sol2[i][0]=integraltrapezio(a[i],b[i], 10);
  164.             }
  165.            
  166.             for(i=0;i<m;i++)
  167.             {
  168.                 sol2[i][1]=integraltrapezio(a[i],b[i], 100);
  169.             }
  170.            
  171.             for(i=0;i<m;i++)
  172.             {
  173.                 sol2[i][2]=integraltrapezio(a[i],b[i], 1000);
  174.             }
  175.             for(i=0;i<m;i++)
  176.             {
  177.                 sol2[i][3]=integralsimpson(a[i],b[i], 10);
  178.             }
  179.            
  180.             for(i=0;i<m;i++)
  181.             {
  182.                sol2[i][4]=integralsimpson(a[i],b[i], 100);
  183.             }
  184.            
  185.             for(i=0;i<m;i++)
  186.             {
  187.                  sol2[i][5]=integralsimpson(a[i],b[i], 1000);
  188.             }
  189.            
  190.             printf("%lf", sol2[0][0]);
  191.            
  192.             for(i=0;i<m;i++)
  193.             {
  194.                 for(j=0;j<6;j++)
  195.                 {
  196.                         printf("%lf ",&sol2[i][j]);
  197.                 }
  198.                 printf("\n");
  199.             }
  200.             printf("%lf", sol2[0][0]);
  201.             for(i=0;i<m;i++)
  202.             {
  203.                 V=10;
  204.                 for(j=0;j<6;j++)
  205.                 {
  206.                         if(j==0 || j==1 || j==2)
  207.                         {
  208.                        
  209.                          fprintf(saida,"{T(%d,%d)}=%lf  ",i+1,V,sol2[i][j]);
  210.                          V=V*10;
  211.                         }
  212.                    
  213.                         else
  214.                         {
  215.                             V=pow(10,(j-2));
  216.                             fprintf(saida,"{S(%d,%d)}=%lf  ",i+1,V,sol2[i][j]);
  217.                        
  218.                         }
  219.                        
  220.                 }
  221.                 fprintf(saida,"\n");
  222.             }
  223.             fprintf(saida,"%lf", sol2[0][0]);
  224.             printf("\nTudo calculado. Pode fechar, amigo.");
  225.     }
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement