Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- #include "f.h"
- int solve(double (*g)(double y),double (*f)(double t),double a,double b, double eps,double k)
- {
- double x1,x2,fx1,fx2,fc,c,n,otv,d,r;
- int i;
- x1=a;
- x2=a+k;
- n=(b-a)/k;
- for(i=2;i<=n;i++)
- {
- fx1=f(x1);
- fx2=f(x2);
- if(fx1*fx2<0)
- {
- while(x2-x1>eps)
- {
- c=(x1+x2)/2;
- if((x1==c)||(x2==c))
- {
- otv=c;
- printf("%lf\n",otv);
- break;
- }
- fc=f(c);
- if(fx1*fc<0)
- {
- x2=c;
- fx2=fc;
- }
- else
- {
- x1=c;
- fx1=fc;
- }
- }
- otv=c;
- printf("%lf\n",otv);
- }
- else
- {
- d=fun(g,x1,x2,eps,&r);
- if(fabs(d)<eps)
- {
- printf("%lf\n",r);
- }
- }
- x1=x2;
- x2=a+i*k;
- }
- return 0;
- }
- double fun(double(*f)(double y),double a,double b,double eps,double *x)
- {
- double x1,x2,fx1,fx2,alfa=2/(3-sqrt(5));
- x1=a+(b-a)/alfa;
- x2=b-(b-a)/alfa;
- fx1=f(x1);
- fx2=f(x2);
- while(fabs(a-b)>eps)
- {
- if(fabs(a-x1)<eps || fabs(x2-x1)<eps || fabs(b-x2)<eps)
- {
- *x=f(a);
- }
- if(fx1>fx2)
- {
- b=x2;
- x2=x1;
- x1=a+(b-a)/alfa;
- fx2=fx1;
- fx1=f(x1);
- }
- else
- {
- a=x1;
- x1=x2;
- x2=b-(b-a)/alfa;
- fx1=fx2;
- fx2=f(x2);
- }
- }
- *x=x1;
- return fx1;;
- }
- double g(double x)
- {
- return fabs(f(x));
- }
- double f(double x)
- {
- return x*x*(x-1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement