#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 200
#define ED 0.5e-12
#define ENR 0.5e-16
//-------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------
float bisection(float (*f)(float),float *a,float *b);
float stshmeiou(float (*f)(float),float (*g)(float),float *x);
float newton(float (*f)(float),float (*parf)(float),float *x);
float temnousas(float(*f)(float),float *x,float *y);
int ebisection(float (*f)(float),float *a,float *b);
int estshmeiou(float (*f)(float),float (*g)(float),float *x);
int enewton(float (*f)(float),float (*parf)(float),float *x);
int etemnousas(float(*f)(float),float *x,float *y);
float nbisection(float (*f)(float),float *a,float *b);
float nnewton(float (*f)(float),float (*parf)(float),float *x);
float f1(float x);
float f2(float x);
float f3(float x);
float g1(float x);
float g2(float x);
float g3(float x);
float parf1(float x);
float parf2(float x);
float parf3(float x);
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
int main(void)
{
int epilogi;
float a1,b1,a2,b2,a3,b3,q1,q2,q3,s1,s2,s3,x1,x2,x3,n1,n2,n3,t1,t2,t3,y1,y2,y3;
float x01,x02,x03,x11,x12,x13,y01,y02,y03,y11,y12,y13,z01,z02,z03,z11,z12,z13,w1,w2,w3;
char xar;
xar='n';
while(xar=='n')
{
printf("-----------------------------------ASKHSH 1----------------------------------");
printf("-----------------------------------------------------------------------------------");
printf("\nPROSEGGISH TIMHS X[N] THS RIZAS J");
printf("\nPATHSTE:");
printf("\n1.GIA F1");
printf("\n2.GIA F2");
printf("\n3.GIA F3");
printf("\n4.GIA TAXYTHTA SYGKLISHS");
printf("\n5.EMFANISH APOTELESMATON");
printf("\n6.METHODOS DIXOTOMISIS-NR\n");
scanf("\n%d",&epilogi);
switch(epilogi)
{
case 1:
a1=-1;
b1=2;
x1=-1;
y1=2;
q1=bisection(f1,&a1,&b1);
printf("H prosegisi tis rizas me thn methodo ths dixotomisis\ngia tin f1(x) einai q1=%lf\n",q1);
s1=stshmeiou(f1,g1,&x1);
printf("\nH prosegisi tis rizas me thn methodo tou statherou shmeiou\ngia tin f1(x) einai s1=%lf\n",s1);
n1=newton(f1,parf1,&x1);
printf("\nH prosegisi tis rizas me thn methodo NR\ngia tin f1(x) einai n1=%lf\n",n1);
t1=temnousas(f1,&x1,&y1);
printf("\nH prosegisi tis rizas me thn methodo ths temnousas\ngia tin f1(x) einai t1=%lf\n",t1);
break;
case 2:
a2=0;
b2=1;
x2=0.5;
y2=1;
q2=bisection(f2,&a2,&b2);
printf("H prosegisi tis rizas me thn methodo ths dixotomisis\ngia tin f2(x) einai q2=%lf\n",q2);
s2=stshmeiou(f2,g2,&x2);
printf("\nH prosegisi tis rizas me thn methodo tou statherou shmeiou\ngia tin f2(x) einai s2=%lf\n",s2);
n2=newton(f2,parf2,&x2);
printf("\nH prosegisi tis rizas me thn methodo NR\ngia tin f2(x) einai n2=%lf\n",n2);
t2=temnousas(f2,&x2,&y2);
printf("\nH prosegisi tis rizas me thn methodo ths temnousas\ngia tin f2(x) einai t2=%lf\n",t2);
break;
case 3:
a3=4;
b3=5;
x3=4;
y3=5;
q3=bisection(f3,&a3,&b3);
printf("\nH prosegisi tis rizas me thn methodo ths dixotomisis\ngia tin f3(x) einai q3=%lf\n",q3);
s3=stshmeiou(f3,g3,&x3);
printf("\nH prosegisi tis rizas me thn methodo tou statherou shmeiou\ngia tin f3(x) einai s3=%lf\n",s3);
n3=newton(f3,parf3,&x3);
printf("\nH prosegisi tis rizas me thn methodo NR\ngia tin f3(x) einai n3=%lf\n",n3);
t3=temnousas(f3,&x3,&y3);
printf("\nH prosegisi tis rizas me thn methodo ths temnousas\ngia tin f3(x) einai t3=%lf\n",t3);
break;
case 4:
a1=-1;
b1=2;
x1=-1;
y1=2;
a2=0;
b2=1;
x2=0.5;
y2=1;
a3=4;
b3=5;
x3=4;
y3=5;
printf("\nO ARITHMOS EPANALIJEON TON METHODON EINAI:");
getchar();
printf("\nGIA F1:");
printf("\nDIXOTOMISI:%d",ebisection(f1,&a1,&b1));
printf("\nSTSHMEIOU:%d",estshmeiou(f1,g1,&x1));
printf("\nNR:%d",enewton(f1,parf1,&x1));
printf("\nTEMNOUSA:%d",etemnousas(f1,&x1,&y1));
getchar();
printf("\nGIA F2:");
printf("\nDIXOTOMISI:%d",ebisection(f2,&a2,&b2));
printf("\nSTSHMEIOU:%d",estshmeiou(f2,g2,&x2));
printf("\nNR:%d",enewton(f2,parf2,&x2));
printf("\nTEMNOUSA:%d",etemnousas(f2,&x2,&y2));
getchar();
printf("\nGIA F3:");
printf("\nDIXOTOMISI:%d",ebisection(f3,&a3,&b3));
printf("\nSTSHMEIOU:%d",estshmeiou(f3,g3,&x3));
printf("\nNR:%d",enewton(f3,parf3,&x3));
printf("\nTEMNOUSA:%d",etemnousas(f3,&x3,&y3));
break;
case 5:
a1=-1;
b1=2;
x01=-1;
x02=1.5;
x03=0.5;
x11=0;
x12=1;
x13=2;
a2=0;
b2=1;
y01=0.3;
y02=0.5;
y03=0.7;
y11=0;
y12=0.3;
y13=1;
a3=4;
b3=5;
z01=4;
z02=4.3;
z03=4.5;
z11=4.3;
z12=4.5;
z13=4.8;
printf("\n--------------------------------------------------------------------");
printf("\n--------------------------------------------------------------------");
printf("\n || PINAKAS APOTELESMATON ||");
printf("\n--------------------------------------------------------------------");
printf("\n || METHODOS ||");
printf("\n--------------------------------------------------------------------");
printf("\n || I || II || III || IV ||");
printf("\n--------------------------------------------------------------------");
printf("\n ||Xo|Xn|F(Xn)|n||Xo|Xn|F(Xn)|n||Xo|Xn|F(Xn)|n||Xo|X1|Xn|F(Xn)|n||");
printf("\n--------------------------------------------------------------------");
printf("\n ||-|%.2f|%2.f|%d||-1 |%.2f|%2.f|%d||-1 |%.2f|%2.f|%d||-1 |0|%.2f|%2.f|%d||",bisection(f1,&a1,&b1),f1(bisection(f1,&a1,&b1)),ebisection(f1,&a1,&b1),stshmeiou(f1,g1,&x01),f1(stshmeiou(f1,g1,&x01)),estshmeiou(f1,g1,&x01),newton(f1,parf1,&x01),f1(newton(f1,parf1,&x01)),enewton(f1,parf1,&x01),temnousas(f1,&x01,&x11),f1(temnousas(f1,&x01,&x11)),etemnousas(f1,&x01,&x11));
printf("\n F1||-|%.2f|%2.f|%d||1.5|%.2f|%2.f|%d||1.5|%.2f|%2.f|%d||1.5|1|%.2f|%2.f|%d||",bisection(f1,&a1,&b1),f1(bisection(f1,&a1,&b1)),ebisection(f1,&a1,&b1),stshmeiou(f1,g1,&x02),f1(stshmeiou(f1,g1,&x02)),estshmeiou(f1,g1,&x02),newton(f1,parf1,&x02),f1(newton(f1,parf1,&x02)),enewton(f1,parf1,&x02),temnousas(f1,&x02,&x12),f1(temnousas(f1,&x02,&x12)),etemnousas(f1,&x02,&x12));
printf("\n ||-|%.2f|%2.f|%d||0.5|%.2f|%2.f|%d||0.5|%.2f|%2.f|%d||0.5|2|%.2f|%2.f|%d||",bisection(f1,&a1,&b1),f1(bisection(f1,&a1,&b1)),ebisection(f1,&a1,&b1),stshmeiou(f1,g1,&x03),f1(stshmeiou(f1,g1,&x03)),estshmeiou(f1,g1,&x03),newton(f1,parf1,&x03),f1(newton(f1,parf1,&x03)),enewton(f1,parf1,&x03),temnousas(f1,&x03,&x13),f1(temnousas(f1,&x03,&x13)),etemnousas(f1,&x03,&x13));
printf("\n--------------------------------------------------------------------");
printf("\n ||-|%.2f|%2.f|%d||0.3|%.2f|%2.f|%d||0.3|%.2f|%2.f|%d||0.3|0|%.2f|%2.f|%d||",bisection(f2,&a2,&b2),f2(bisection(f2,&a2,&b2)),ebisection(f2,&a2,&b2),stshmeiou(f2,g2,&y01),f2(stshmeiou(f2,g2,&y01)),estshmeiou(f2,g2,&y01),newton(f2,parf2,&y01),f2(newton(f2,parf2,&y01)),enewton(f2,parf2,&y01),temnousas(f2,&y01,&y11),f2(temnousas(f2,&y01,&y11)),etemnousas(f2,&y01,&y11));
printf("\n F2||-|%.2f|%2.f|%d||0.5|%.2f|%2.f|%d||0.5|%.2f|%2.f|%d||0.5|0.3|%.2f|%2.f|%d||",bisection(f2,&a2,&b2),f2(bisection(f2,&a2,&b2)),ebisection(f2,&a2,&b2),stshmeiou(f2,g2,&y02),f2(stshmeiou(f2,g2,&y02)),estshmeiou(f2,g2,&y02),newton(f2,parf2,&y02),f2(newton(f2,parf2,&y02)),enewton(f2,parf2,&y02),temnousas(f2,&y02,&y12),f2(temnousas(f2,&y02,&y12)),etemnousas(f2,&y02,&y12));
printf("\n ||-|%.2f|%2.f|%d||0.7|%.2f|%2.f|%d||0.7|%.2f|%2.f|%d||0.7|1|%.2f|%2.f|%d||",bisection(f2,&a2,&b2),f2(bisection(f2,&a2,&b2)),ebisection(f2,&a2,&b2),stshmeiou(f2,g2,&y03),f2(stshmeiou(f2,g2,&y03)),estshmeiou(f2,g2,&y03),newton(f2,parf2,&y03),f2(newton(f2,parf2,&y03)),enewton(f2,parf2,&y03),temnousas(f2,&y03,&y13),f2(temnousas(f2,&y03,&y13)),etemnousas(f2,&y03,&y13));
printf("\n--------------------------------------------------------------------");
printf("\n ||-|%.2f|%2.f|%d||4 |%.2f|%2.f|%d||4 |%.2f|%2.f|%d||4|4.3|%.2f|%2.f|%d||",bisection(f3,&a3,&b3),f3(bisection(f3,&a3,&b3)),ebisection(f3,&a3,&b3),stshmeiou(f3,g3,&z01),f3(stshmeiou(f3,g3,&z01)),estshmeiou(f3,g3,&z01),newton(f3,parf3,&z01),f3(newton(f3,parf3,&z01)),enewton(f3,parf3,&z01),temnousas(f3,&z01,&z11),f3(temnousas(f3,&z01,&z11)),etemnousas(f3,&z01,&z11));
printf("\n F3||-|%.2f|%2.f|%d||4.3|%.2f|%2.f|%d||4.3|%.2f|%2.f|%d||4.3|4.5|%.2f|%2.f|%d||",bisection(f3,&a3,&b3),f3(bisection(f3,&a3,&b3)),ebisection(f3,&a3,&b3),stshmeiou(f3,g3,&z02),f3(stshmeiou(f3,g3,&z02)),estshmeiou(f3,g3,&z02),newton(f3,parf3,&z02),f3(newton(f3,parf3,&z02)),enewton(f3,parf3,&z02),temnousas(f3,&z02,&z12),f3(temnousas(f3,&z02,&z12)),etemnousas(f3,&z02,&z12));
printf("\n ||-|%.2f|%2.f|%d||4.5|%.2f|%2.f|%d||4.5 |%.2f|%2.f|%d||4.5|4.8|%.2f|%2.f|%d||",bisection(f3,&a3,&b3),f3(bisection(f3,&a3,&b3)),ebisection(f3,&a3,&b3),stshmeiou(f3,g3,&z03),f3(stshmeiou(f3,g3,&z03)),estshmeiou(f3,g3,&z03),newton(f3,parf3,&z03),f3(newton(f3,parf3,&z03)),enewton(f3,parf3,&z03),temnousas(f3,&z03,&z13),f3(temnousas(f3,&z03,&z13)),etemnousas(f3,&z03,&z13));
printf("\n--------------------------------------------------------------------");
printf("\n--------------------------------------------------------------------");
break;
case 6:
a1=-1;
b1=2;
a2=0;
b2=1;
a3=4;
b3=5;
w1=nbisection(f1,&a1,&b1);
w2=nbisection(f2,&a2,&b2);
w3=nbisection(f3,&a3,&b3);
printf("\nF1:");
printf("\nH proseggistiki timh ths rizas j einai:");
printf("\n%lf",nnewton(f1,parf1,&w1));
printf("\n-----------------------------------------");
printf("\nF2:");
printf("\nH proseggistiki timh ths rizas j einai:");
printf("\n%lf",nnewton(f2,parf2,&w2));
printf("\n-----------------------------------------");
printf("\nF3:");
printf("\nH proseggistiki timh ths rizas j einai:");
printf("\n%lf",nnewton(f3,parf3,&w3));
printf("\n-----------------------------------------");
break;
default:
printf("O arithmos den brisketai metaji 1 kai 6");
break;
}
printf("\nGia synexeia patiste n(ai) diaforetika o(xi):");
scanf("\n%c",&xar);
getchar();
}
return 0;
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float bisection(float (*f)(float),float *a,float *b)
{
int m;
float x,g,h;
float c,r;
c=(*a+*b)/2;
//printf("%lf",c);
m=0;
while(((*b-*a)>0) && ((*f)(c)!=0) && m<MAX)
{
//printf("%lf",c);
c=(*a+*b)/2;
g=(*f)(*a);
r=(*f)(*b);
h=(*f)(c);
m++;
if(h==0)
{
x=c;
}
else if(g*h<0 )
{
*b=c;
}
else if(r*h<0)
{
*a=c;
}
else if(g*h>0 && r*h>0)
{
printf("h methodos tis dix den paizei");
return (*a+*b)/2;
}
}
x=(*b+*a)/2;
return (x);
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float stshmeiou(float (*f)(float),float (*g)(float),float *x)
{
int m=0;
float p,k;
p=(*g)(*x);
//printf("p=%lf",p);
while(fabs((*f)(p))>0 && m<MAX)
{
//printf("p=%lf",p);
m++;
k=(*g)(p);
p=k;
}
return p;
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float newton(float (*f)(float),float (*parf)(float),float *x)
{
float o,p;
float k,l;
int m=0;
o=(*x);
if((*parf)(o)!=0)
{
p=o-(*f)(o)/(*parf)(o);
//printf("p=%lf",p);
while(fabs((p-o)/o)>0 && fabs((*f)(p))>0 && m<MAX && (*parf)(o)!=0)
{
//printf("p=%lf",p);
m++;
k=(*f)(p);
l=(*parf)(p);
o=p;
p=o-k/l;
}
}
else
{
printf("H methodos NR den paizei");
}
return p;
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float temnousas(float(*f)(float),float *x,float *y)
{
float o,p,k,w,l;
int m=0;
o=(*x);
w=(*y);
if((*f)(o)!=(*f)(w))
{
p=o-((*f)(o)*(o-w)/((*f)(o)-(*f)(w)));
while(fabs((p-o)/o)>0 && fabs((*f)(p))>0 && (*f)(o)!=(*f)(w))
{
//printf("p=%lf",p);
k=(*f)(p);
l=(*f)(o);
w=o;
o=p;
p=o-(k*(o-w)/(k-l));
}
}
else
{
printf("H methodos tis temnousas den paizei");
}
return p;
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
int ebisection(float (*f)(float),float *a,float *b)
{
int m;
float x,g,h;
float c,r;
c=(*a+*b)/2;
//printf("%lf",c);
m=0;
while(((*b-*a)>0) && ((*f)(c)!=0) && m<MAX)
{
//printf("%lf",c);
c=(*a+*b)/2;
g=(*f)(*a);
r=(*f)(*b);
h=(*f)(c);
m++;
if(h==0)
{
return (m);
x=c;
}
else if(g*h<0 )
{
*b=c;
}
else if(r*h<0)
{
*a=c;
}
else if(g*h>0 && r*h>0)
{
return (m);
printf("h methodos tis dix den paizei");
//return (*a+*b)/2;
}
}
x=(*b+*a)/2;
return (m);
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
int estshmeiou(float (*f)(float),float (*g)(float),float *x)
{
int m;
float p,k;
p=(*g)(*x);
//printf("p=%lf",p);
m=0;
while(fabs((*f)(p))>0 && m<MAX)
{
//printf("p=%lf",p);
m++;
k=(*g)(p);
p=k;
}
return m;
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
int enewton(float (*f)(float),float (*parf)(float),float *x)
{
float o,p;
float k,l;
int m;
o=(*x);
if((*parf)(o)!=0)
{
p=o-(*f)(o)/(*parf)(o);
//printf("p=%lf",p);
m=0;
while(fabs((p-o)/o)>0 && fabs((*f)(p))>0 && m<MAX && (*parf)(o)!=0)
{
//printf("p=%lf",p);
m++;
k=(*f)(p);
l=(*parf)(p);
o=p;
p=o-k/l;
}
}
else
{
printf("H methodos NR den paizei");
}
return m;
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
int etemnousas(float(*f)(float),float *x,float *y)
{
float o,p,k,w,l;
int m;
o=(*x);
w=(*y);
if((*f)(o)!=(*f)(w))
{
p=o-((*f)(o)*(o-w)/((*f)(o)-(*f)(w)));
m=0;
while(fabs((p-o)/o)>0 && fabs((*f)(p))>0 && (*f)(o)!=(*f)(w))
{
//printf("p=%lf",p);
m++;
k=(*f)(p);
l=(*f)(o);
w=o;
o=p;
p=o-(k*(o-w)/(k-l));
}
}
else
{
printf("H methodos tis temnousas den paizei");
}
return m;
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float nnewton(float (*f)(float),float (*parf)(float),float *x)
{
float o,p;
float k,l;
int m=0;
o=(*x);
if((*parf)(o)!=0)
{
p=o-(*f)(o)/(*parf)(o);
//printf("p=%lf",p);
while(fabs((p-o)/o)>ENR && fabs((*f)(p))>ENR && m<MAX && (*parf)(o)!=0)
{
//printf("p=%lf",p);
m++;
k=(*f)(p);
l=(*parf)(p);
o=p;
p=o-k/l;
}
}
else
{
printf("H methodos NR den paizei");
}
return p;
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float nbisection(float (*f)(float),float *a,float *b)
{
int m;
float x,g,h;
float c,r;
c=(*a+*b)/2;
//printf("%lf",c);
m=0;
while(((*b-*a)>ED) && ((*f)(c)!=0) && m<MAX)
{
//printf("%lf",c);
c=(*a+*b)/2;
g=(*f)(*a);
r=(*f)(*b);
h=(*f)(c);
m++;
if(h==0)
{
x=c;
}
else if(g*h<0 )
{
*b=c;
}
else if(r*h<0)
{
*a=c;
}
else if(g*h>0 && r*h>0)
{
printf("h methodos tis dix den paizei");
return (*a+*b)/2;
}
}
x=(*b+*a)/2;
return (x);
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float f1(float x)
{
return (x*x*x*x-x*x*x-3*x*x+5*x-2);
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float f2(float x)
{
return (exp(x)-5*x*x);
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float f3(float x)
{
return (tan(x)-(0.5)*x);
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float g1(float x)
{
return (((-4)*x*x*x+3*x*x+6*x)/5);
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float g2(float x)
{
return (sqrt((exp(x)/5)));
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float g3(float x)
{
return (tan(x)/0.5);
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float parf1(float x)
{
return (4*x*x*x-3*x*x-6*x+5);
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float parf2(float x)
{
return (exp(x)-10*x);
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
float parf3(float x)
{
return (1/(cos(x)*cos(x))-(0.5));
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
//------------------------------------- END ------------------------------------------------