Χρήστης:Theofiloskoss/Project
Εμφάνιση
Αριθμητική Ολοκλήρωση
Η αριθμητική Ολοκλήρωση στην εργασία γίνεται με :
- Απλο Κανόνα Τραπεζίου
- Σύνθετο κανόνα Τραπεζίου
- Απλό κανόνα του 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",×_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); }