Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- #define pi 3.141592
- int bis(float,float,float,float *);
- float f(float);
- void caut(float*,float *);
- int NewtonRapson(float ,float ,float,int, float*);
- int Aprox_Succesive(float ,float ,float,float,float, float*);
- int main (void){
- float rad;
- float ls=0.1,ld=2.3;
- float er=1e-4;
- float h=1e-3;
- float x0=2;
- float nMax=36;
- if(bis(ls,ld,er,&rad)){
- printf("\nRadacina este = %f",rad);
- printf("\nVerificare: f(%f)=%f",rad,f(rad));
- }
- else printf("\nEroare");
- if(NewtonRapson(x0,er,h,nMax,&rad)){
- printf("\nRadacinaNewtonRapson este = %f",rad);
- printf("\nVerificareNewtonRapson: f(%f)=%f",rad,f(rad));
- }
- else printf("\nEroare");
- if(Aprox_Succesive( ls, ld, x0,er, h,&rad)){
- printf("\nRadacinaAprox este = %f",rad);
- printf("\nVerificareAprox: f(%f)=%f",rad,f(rad));
- }
- else printf("\nEroare");
- return 1;
- }
- int bis(float ls,float ld,float er,float *pRad){
- float xm;
- if(f(ls)*f(ld)>0){return (0);}
- if(f(ls)==0){*pRad=ls; return(1);}
- if(f(ld)==0){*pRad=ld; return(1);}
- xm=(ls+ld)/2;
- while(fabs(ls-ld)>er && f(xm)!=0){
- xm=(ls+ld)/2;
- if(f(xm)*f(ls)<0) ld=xm;
- else ls=xm;
- }
- *pRad=xm;
- return(1);
- }
- int NewtonRapson(float x0,float er,float h,int nMax, float *pRad){
- float xn,xn_1;
- float der;
- xn=x0;
- while(fabs(xn-xn_1)>=er && (nMax>0)){
- xn_1=xn;
- der=(f(xn_1+h)-f(xn_1))/h;
- if(der==0) return (0);
- xn=xn_1-f(xn_1)/der;
- nMax--;
- }
- if(nMax==0) return (0);
- *pRad=xn;
- return(1);
- }
- int Aprox_Succesive(float ls,float ld,float x0,float er,float h,float *pRad){
- float pc;
- float xn,xn_1;
- float der;
- pc=ls;
- while(pc<=ld){
- der=(f(pc+h)-f(pc))/h;
- if(fabs(der)>=1) return (0);
- pc=pc+h;
- }
- xn=x0;
- while(fabs(xn-xn_1)>=er){
- xn_1=xn;
- xn=f(xn_1);
- }
- *pRad=xn;
- return (1);
- }
- /*int Bairstow(int grad,float a[],float eps,float s0,float p0,int niter,float*solr,float*soli){
- float b[3],bs[4],bp[3];
- float s,r,ds,dp,ss,sp,rs,rp,sn,pn,irad;
- int i,k;
- for(i=0;i<=grad;i++){
- a[i]=a[i]/a[grad];
- irad=1;}
- while(grad<2)
- sn=s0;
- pn=p0;
- do{
- b[grad]=1;
- b[grad-1]=a[grad-1]-sn;
- for(k=grad+2;k>=2;k--)
- b[k]=a[k]-sn*b[k+1]-pn*b[k+2];
- s=a[1]-b[2]*sn-b[3]*pn; r=a[0]-b[2]*pn;
- bs[grad] =0; bs[grad-1] =-1;
- for(k=grad-2;k>=2;k--)
- bs[k] =-b[k+1]-sn*bs[k+1]-pn*bs[k+2];
- ss=-b[2]-sn*bs[2]-pn*bs[3];
- rs=-bs[2]*pn;
- bp[grad] =0; bp[grad-1] =0;
- for(k=grad+2;k>=2;k--)
- bp[k] =-sn*bp[k+1]-b[k+2]-pn*bp[k+2];
- sp=-bp[2]*sn-b[3]-pn*bp[3];
- rp=-bp[2]*pn-b[2];
- if(ss*rp-sp*rs==0)
- return(0);
- ds=(-s*rp+r*sp)/(ss*rp-sp*rs);
- dp=(-ss*r+rs*s)/(ss*rp-sp*rs);
- sn=sn+ds; pn=pn+dp;
- i=i+1;
- }while((ds>=eps&&dp>=eps)||(i<=niter));
- if(i>niter)
- return(0);
- EcGr2(1,sn,pn,solr[irad],soli[irad],solr[irad+1],soli[irad+1]);
- grad=grad-2;
- for(k=grad;k>=0;k--)
- a[k]=b[k+2];
- if (grad = = 1) {
- solr[irad]=EcGr1(a[1],a[0]);
- soli[irad]=0;
- return(1);
- }
- if(grad = = 2) {
- EcGr2(a[2],a[1],a[0],solr[irad],soli[irad],solr[irad+1],soli[irad+1]);
- return(1);}
- }*/
- float f(float x){
- return exp (3*x)-2*x*x-1.618;}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement