Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- typedef double(*fun)(double x);
- double f(double x)
- {
- return 0.1*pow(x,2)-x*log(x);
- }
- double g(double x)
- {
- return tan(x)-(1/3.0)*pow(tan(x),3)+(1/5.0)*pow(tan(x),5)-(1/3.0);
- }
- double f1(fun f, double x)
- {
- double h = 0.0000001;
- return (f(x+h)-f(x))/h;
- }
- double f2(fun f, double x)
- {
- double h = 0.0000001;
- return (f(x-h)+f(x+h)-2*f(x))/(h*h);
- }
- double epsilon()
- {
- long double x=1;
- for (;1+x/2 !=1;x=x/2){}
- return x;
- }
- double dihotomiya(double A, double B, fun f)
- {
- double eps=epsilon()*100;
- double a=A;
- double b=B;
- while(fabs(a-b) >eps )
- {
- if( f(a)*f((a+b)/2) > 0 )
- a=(a+b)/2;
- else
- b=(a+b)/2;
- }
- return (a+b)/2;
- }
- double interaziya(double A,double B, fun f)
- {
- double x=(A+B)/2;
- double a=A;
- int flag=0;
- long double eps=epsilon()*1e10;
- while(a<=B)
- {
- if(f1(f,a)<1)
- flag=1;
- a=a+eps;
- }
- while(fabs(f(x)) > eps && flag==1)
- x=(fabs(f(x))-x);
- if(flag==1)
- printf("Iteration: %f\n", x);
- else
- printf("Iteration: Don't exist\n");
- }
- double newton(double A,double B,fun f)
- {
- double x=(A+B)/2;
- double temp=0;
- double a=A;
- long double eps=epsilon()*1e10;
- int flag=0;
- while(a<=B)
- {
- if(fabs(f(a)*f2(f,a))< pow(f1(f,a),2))
- flag=1;
- a=a+eps;
- }
- while(fabs(f(x)) > eps && flag ==1)
- x=x-f(x)/f1(f,x);
- if(flag==1)
- printf("Newton: %f\n", x);
- else
- printf("Newton: Don't exist\n");
- }
- int main()
- {
- long i;
- printf("Computer epsilon: %e\n", epsilon());
- printf("Variant 20\n");
- printf("Dichotomy: %f\n", dihotomiya(1, 2,f));
- interaziya(1, 2,f);
- newton(1, 2,f);
- printf("Variant 21\n");
- printf("Dichotomy: %f\n", dihotomiya(0, 0.8, g));
- interaziya(0, 0.8, g);
- newton(0, 0.8, g);
- scanf("%d",&i);
- return 0;
- }
Add Comment
Please, Sign In to add comment