Αριθμητική Ολοκλήρωση

Η αριθμητική Ολοκλήρωση στην εργασία γίνεται με :

  • Απλο Κανόνα Τραπεζίου
  • Σύνθετο κανόνα Τραπεζίου
  • Απλό κανόνα του Simpson
  • Σύνθετο κανόνα του Simpson
 #include<stdio.h>
 #include<stdlib.h>
 #include<math.h>
 void aptrap();
 void strap();
 void apsim();
 void ssim();
 int main(){
   int epil;
   printf(" \n\n*********************************** ");
   printf(" \n\n       ARITHMITIKH ANALYSH  ");
   printf(" \n\n       EARINO E3AMHNO 2009  ");
   printf("         23 IOUNIOY 2009  \n\n");
   printf("*********************************** ");
   printf(" \n\n      APITHMHTIKH OLOKLHRWSH  \n\n\n\n");
   printf("          EPILOGES  \n\n");
   printf("  1. APLOS KANONAS TRAPEZIOY  \n");
   printf("  2. SYNTHETOS KANONAS TRAPEZIOY  \n");
   printf("  3. APLOS KANONAS TOY SIMPSON  \n");
   printf("  4. SYNTHETOS KANONAS TOU SIMPSON  \n");
   printf("  ALLH EPILOGH --> E3ODOS  \n");
   printf("\n\n  DWSE EPILOGH ");
   scanf("%d",&epil);
   switch(epil){
                case 1 : aptrap();
                break;
                case 2 : strap();
                break;
                case 3 : apsim();
                break;
                case 4 : ssim();
                break;
                }
                return 0;
   }
   void aptrap(){
        float fa,fb,h,trap;
        printf(" APLOS KANONAS TRAPEZIOU \n");
        printf("DWSE TO f(a): ");
        scanf("%f",&fa);
        printf("DWSE TO f(b): ");
        scanf("%f",&fb);
        printf("DWSE TO  h: ");
        scanf("%f",&h);
        trap=(h/2)*(fa+fb);
        printf ("TO APOTELESMA EINAI %f: ",trap);
        system("pause");
            }
        
        
   void strap(){
        int n,i;
        float trap,sum=0,h;
        float *times_sunartisis;
        printf(" SYNTHETOS KANONAS TRAPEZIOY \n");
        printf(" DWSE TON ARITHMO TWN STOIXEIWN ");
        scanf("%d",&n);
        times_sunartisis=malloc(n*sizeof(float));
        if(!times_sunartisis){
                              printf(" Sfalma kata tin dhmiourgia tou Pinaka\n");
                              printf("to programma termatizei\n");
                              exit(-1);
                              }
        printf(" APODWSH STOIXEIWN \n");
        for(i=0;i<n;i++){
        printf("DWSE TO f(X%d)\n",i);
        scanf("%f",&times_sunartisis[i]);
        }
        printf("DWSE TO  h: ");
        scanf("%f",&h);
        for(i=1;i<n-2;i++){
        sum=sum+times_sunartisis[i];}
        trap=(h/2)*(times_sunartisis[0]+times_sunartisis[n-1]+sum);
        printf ("TO APOTELESMA EINAI %f: ",trap);
        system("pause");
        }
        
        
    void apsim(){
        float a,b,fa,fb,fab2,sim;
        printf(" APLOS KANONAS TOY SIMPSON \n");
        printf(" DWSE TO a");
        scanf("%f",&a);
        printf(" DWSE TO b");
        scanf("%f",&b);
        printf(" DWSE TO f(a)");
        scanf("%f",&fa);
        printf(" DWSE TO f(b)");
        scanf("%f",&fb);
        printf(" DWSE TO f(a+b)/2");
        scanf("%f",&fab2); 
        sim =((b-a)/6)*(fa+4*fab2+fb);
        printf ("TO APOTELESMA EINAI %f: ",sim); 
        system("pause");       
        } 
           
     void ssim(){
        int n,i;
        float sim,sum1=0,sum2=0,h,a,b;
        float *f;
        printf(" \n SYNTHETOS KANONAS TOU SIMPSON \n");
        printf("DWSE TO DIASTHMA\n");
        printf("A:");
        scanf("%f",&a);
        printf("B:");
        scanf("%f",&b);
        printf(" DWSE TON ARITHMO TWN STOIXEIWN (PREPEI NA EINAI PERITOS ARITHMOS)");
        scanf("%d",&n);
        f = malloc(n*sizeof(float));
        if(!f){
                 printf(" Sfalma kata tin dhmiourgia tou Pinaka\n");
                 printf("to programma termatizei\n");
                 exit(-1);
                 }
        h=(b-a)/(n-1);
        printf(" APODWSH STOIXEIWN \n");
        for(i=0;i<n;i++){
                         printf("DWSE TO f(%5.3f)\n",a);
                         scanf("%f",&f[i]);
                         a=a+h;
                         }
        for(i=1;i<=n-2;i=i+2){
                              sum1=sum1+f[i];
                              }
        for(i=2;i<=n-3;i=i+2){
                              sum2=sum2+f[i];
                              }
        sim=(h/3)*(f[0]+f[n-1]+4*sum1+2*sum2);
        printf ("TO APOTELESMA EINAI %f: ",sim);
        system("pause");
        }

Διαφορικές Εξισώσεις

Οι διαφορικές εξισώσεις επιλύονται με:

  • Μέθοδο Euler
  • Μέθοδο Heun
  • Μέθοδο Runge-kutta τέταρτης τάξης (στην εργασία γίνεται στην εξίσωση 2x-y)
 #include<stdio.h>
 #include<stdlib.h>
 #include<math.h>
 void euler();
 void heun();
 void runge_kutta();
 float f(float x,float y);
 int main(){
   int epil;
   printf(" \n\n*********************************** ");
   printf(" \n\n       ARITHMITIKH ANALYSH  ");
   printf(" \n\n       EARINO E3AMHNO 2009  ");
   printf("         22 IOUNIOY 2009  \n\n");
   printf("*********************************** ");
   printf(" \n\n   SYNHTHEIS DIAFORIKES E3ISWSEIS   \n");
   printf("       PROBLHMA ARXIKWN TIMWN   \n\n\n\n");
   printf("          EPILOGES  \n\n");
   printf("  1. METHODOS Euler  \n");
   printf("  2. METHODOS Heun  \n");
   printf("  3. METHODOS Runge-kutta 4hs TA3HS  \n");
   printf("  ALLH EPILOGH --> E3ODOS  \n");
   printf("\n\n  DWSE EPILOGH ");
   scanf("%d",&epil);
   switch(epil){
                case 1 : euler();
                break;
                case 2 : heun();
                break;
                case 3 : runge_kutta();
                break;
                }
                return 0;
   }
   void euler(){
        float x,y,h,xn,dy;
        int i,n;
        printf(" \n\n   METHODOS Euler\n\n \n");
        printf("   DWSE TO Xo: ");
        scanf("%f",&x);
        printf("   DWSE TO f(Xo): ");
        scanf("%f",&y);
        printf("   DWSE TO ALLO AKRO TOY  ");
        scanf("%f",&xn);
        printf("   DWSE TO  h: ");
        scanf("%f",&h);
        n=(int)((xn-x)/h+0.5);
        printf("\n\n BHMA      X          Y\n");
        printf("---------------------------\n");
        for(i=1;i<=n;i++){
                          dy = h*f(x,y);
                          x=x+h;
                          y=y+dy;
                          printf("  %d    %f    %f\n",i,x,y);
                          }
        system("pause");
            }
            
   void heun(){
        float x,y,h,xn,dy,dy2;
        int i,n;
        printf(" \n\n   METHODOS Heun\n\n \n");
        printf("   DWSE TO Xo: ");
        scanf("%f",&x);
        printf("   DWSE TO f(Xo): ");
        scanf("%f",&y);
        printf("   DWSE TO ALLO AKRO TOY  ");
        scanf("%f",&xn);
        printf("   DWSE TO  h: ");
        scanf("%f",&h);
        n=(int)((xn-x)/h+0.5);
        
        printf("\n\n BHMA      X          Y\n");
        printf("---------------------------\n");
        for(i=1;i<=n;i++){
                          dy = y+h*f(x,y);
                          dy2 =y+(h/2)*(f(x,y)+f((x+h),(dy)));
                          x=x+h;
                          y=dy2;
                          printf("  %d    %f    %f \n",i,x,y);
                          }
        system("pause");
            }     
        
    void runge_kutta(){
        float x,y,h,xn,k1,k2,k3,k4,dy;
        int i,n;
        printf(" \n\n   METHODOS Runge-kutta 4hs TA3HS\n\n \n");
        printf("   DWSE TO Xo: ");
        scanf("%f",&x);
        printf("   DWSE TO f(Xo): ");
        scanf("%f",&y);
        printf("   DWSE TO ALLO AKRO TOY  ");
        scanf("%f",&xn);
        printf("   DWSE TO  h: ");
        scanf("%f",&h);
        n=(int)((xn-x)/h+0.5);
        
        printf("\n\n BHMA      X          Y\n");
        printf("---------------------------\n");
        for(i=1;i<=n;i++){
                          k1=f(x,y);
                          k2=f((x+(h/2)),(y+(h/2)*k1));
                          k3=f((x+(h/2)),(y+(h/2)*k2));
                          k4=f((x+(h/2)),(y+(h*k3)));
                          dy =y+(h/6)*(k1+2*k2+2*k3+k4);
                          x=x+h;
                          y=dy;
                          printf("  %d    %f    %f\n",i,x,y);
                          }
        system("pause");
            }
            
                
   float f(float x,float y){
         return(2*x-y);
         }

Επίλυση μη γραμμικών εξισώσεων

H επίλυση μη γραμμικών εξισώσεων στην εργασία γίνεται με :

  • Μέθοδο διχοτόμησης
  • Μέθοδο Newton-Raphson
  • Μέθοδο χορδής
 #include<stdio.h>
 #include<stdlib.h>
 #include<math.h>
 void dixotomisi();
 void newton_raphson();
 void xordi();
 float synartisi(float);
 float paragwgos(float);
 int main(){
   int epil;
   printf(" \n\n********************************** ");
   printf(" \n\n       ARITHMITIKH ANALYSH  ");
   printf(" \n\n       EARINO E3AMHNO 2009  ");
   printf("         22 IOUNIOY 2009  \n\n");
   printf("********************************** ");
   printf(" \n\n  EPILYSH MH GRAMMIKWN E3ISWSEWN  \n\n\n");
   printf("          EPILOGES  \n\n");
   printf("  1. METHODOS DOXOTOMISIS  \n");
   printf("  2. METHODOS NEWTON - RAPHSON  \n");
   printf("  3. METHODOS XORDHS  \n");
   printf("  ALLH EPILOGH --> E3ODOS  \n");
   printf("\n\n  DWSE EPILOGH ");
   scanf("%d",&epil);
   switch(epil){
                case 1 : dixotomisi();
                break;
                case 2 : newton_raphson();
                break;
                case 3 : xordi();
                break;
                }
                return 0;
   }
 
 
   void dixotomisi(){
        int al=1;
        float fa,fb,a,b,x,fx,e=0.0001;
        printf(" METHODOS DOXOTOMISIS \n");
        printf("DWSE TO a: ");
        scanf("%f",&a);
        printf("DWSE TO b: ");
        scanf("%f",&b);
        x=(a+b)/2;
        fa=synartisi(a);
        fb=synartisi(b);
        fx=synartisi(x);
          if ((fa*fb)<0){
           while(al=1){
           fx=synartisi(x);
          
           if ((fabs(b-a)/2)<=e){
                                printf("H riza einai: %f ",x);
                                al=0;
                                system("pause");
                                break;
                                }
        
                                if((fa*fx)<0){
                                printf(" %f %f %f %f %f \n",a,b,fa,fb,x);
                                              b=x;
                                              fb=synartisi(b);}
                                else{
                                     printf(" %f %f %f %f %f \n",a,b,fa,fb,x);
                                    a=x;
                                    fa=synartisi(a);
                                    }
        x=(a+b)/2;                                                                           }
        fa=synartisi(a);
        fb=synartisi(b);
        fx=synartisi(x);
        printf(" %f %f %f %f %f \n",a,b,fa,fb,x);       
        }
       exit(0);
       }
       
         
      void newton_raphson(){
        int al=1;
        float fa,fp,fb,b,a,e=0.001;
        printf(" \n\nMETHODOS NEWTON - RAPHSON \n");
        printf("\nDWSE THN ARXIKH PROSEGGISH: ");
        scanf("%f",&a);
        
        fa=synartisi(a);
        fp=paragwgos(a);
        b = a -(fa/fp);
        fb=synartisi(b);
        printf("\n    Xo      f(Xo)    f'(Xo)     X1     f(X1)");
        printf("\n%f %f %f %f %f \n",a,fa,fp,b,fb);
        do
        {
        if (fb<e){
                  printf("\nH riza einai: %f \n",b);
                  system("pause");
                  break;}
                  else{
                       a=b;
                       fa=synartisi(a);
                       fp=paragwgos(a);
                       b=a-(fa/fp);
                       fb=synartisi(b);
                       printf("%f %f %f %f %f \n",a,fa,fp,b,fb);
                       }
                        
              }while(al=1);
              }
        
        
        
        void xordi(){
        int al=1;
        float fa,fc,fb,b,a,c,e=0.00001;
        printf(" \n\nMETHODOS XORDHS \n");
        printf("\nDWSE THN PRWTH ARXIKH PROSEGGISH: ");
        scanf("%f",&a);
        printf("\nDWSE THN DEUTERH ARXIKH PROSEGGISH: ");
        scanf("%f",&b);
        fa=synartisi(a);
        fb=synartisi(b);
        c=((a*fb-b*fa)/(fb-fa));
        fc=synartisi(c);
        printf("\n    Xo        X1      f(Xo)     f(X1)   X2       f(X2)");
        printf("\n%f %f %f %f %f %f\n",a,fa,b,fb,c,fc);
        do
        {
        if (fabs(fc)<e){
                  printf("\nH riza einai: %f \n",c);
                  system("pause");
                  break;}
                  else{
                       a=b;
                       b=c;
                       fa=synartisi(a);
                       fb=synartisi(b);
                       c=((a*fb-b*fa)/(fb-fa));
                       fc=synartisi(c);
                       printf("%f %f %f %f %f %f\n",a,fa,b,fb,c,fc);
                       }
                        
              }while(al=1);
              }
          
              
         float synartisi(float x){
         float y;
         y= x*x-25;
         return(y);
         }
         
         
         float paragwgos(float x){
         float y;
         y = 3*x*x-2;
         return(y);
         }