Advertisement
Guest User

Untitled

a guest
Nov 19th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.03 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #define pi 3.141592
  4.  
  5. int bis(float,float,float,float *);
  6. float f(float);
  7. void caut(float*,float *);
  8.  
  9. int NewtonRapson(float ,float ,float,int, float*);
  10. int Aprox_Succesive(float ,float ,float,float,float, float*);
  11. int main (void){
  12. float rad;
  13. float ls=0.1,ld=2.3;
  14. float er=1e-4;
  15. float h=1e-3;
  16. float x0=2;
  17. float nMax=36;
  18. if(bis(ls,ld,er,&rad)){
  19. printf("\nRadacina este = %f",rad);
  20. printf("\nVerificare: f(%f)=%f",rad,f(rad));
  21. }
  22. else printf("\nEroare");
  23.  
  24. if(NewtonRapson(x0,er,h,nMax,&rad)){
  25. printf("\nRadacinaNewtonRapson este = %f",rad);
  26. printf("\nVerificareNewtonRapson: f(%f)=%f",rad,f(rad));
  27. }
  28. else printf("\nEroare");
  29.  
  30. if(Aprox_Succesive( ls, ld, x0,er, h,&rad)){
  31. printf("\nRadacinaAprox este = %f",rad);
  32. printf("\nVerificareAprox: f(%f)=%f",rad,f(rad));
  33. }
  34. else printf("\nEroare");
  35. return 1;
  36. }
  37.  
  38. int bis(float ls,float ld,float er,float *pRad){
  39. float xm;
  40. if(f(ls)*f(ld)>0){return (0);}
  41. if(f(ls)==0){*pRad=ls; return(1);}
  42. if(f(ld)==0){*pRad=ld; return(1);}
  43. xm=(ls+ld)/2;
  44. while(fabs(ls-ld)>er && f(xm)!=0){
  45. xm=(ls+ld)/2;
  46. if(f(xm)*f(ls)<0) ld=xm;
  47. else ls=xm;
  48. }
  49. *pRad=xm;
  50. return(1);
  51.  
  52. }
  53. int NewtonRapson(float x0,float er,float h,int nMax, float *pRad){
  54. float xn,xn_1;
  55. float der;
  56. xn=x0;
  57. while(fabs(xn-xn_1)>=er && (nMax>0)){
  58. xn_1=xn;
  59. der=(f(xn_1+h)-f(xn_1))/h;
  60. if(der==0) return (0);
  61. xn=xn_1-f(xn_1)/der;
  62. nMax--;
  63. }
  64. if(nMax==0) return (0);
  65. *pRad=xn;
  66. return(1);
  67. }
  68. int Aprox_Succesive(float ls,float ld,float x0,float er,float h,float *pRad){
  69. float pc;
  70. float xn,xn_1;
  71. float der;
  72.  
  73. pc=ls;
  74. while(pc<=ld){
  75. der=(f(pc+h)-f(pc))/h;
  76. if(fabs(der)>=1) return (0);
  77. pc=pc+h;
  78. }
  79. xn=x0;
  80. while(fabs(xn-xn_1)>=er){
  81. xn_1=xn;
  82. xn=f(xn_1);
  83. }
  84. *pRad=xn;
  85. return (1);
  86. }
  87. /*int Bairstow(int grad,float a[],float eps,float s0,float p0,int niter,float*solr,float*soli){
  88. float b[3],bs[4],bp[3];
  89. float s,r,ds,dp,ss,sp,rs,rp,sn,pn,irad;
  90. int i,k;
  91. for(i=0;i<=grad;i++){
  92. a[i]=a[i]/a[grad];
  93. irad=1;}
  94. while(grad<2)
  95. sn=s0;
  96. pn=p0;
  97. do{
  98. b[grad]=1;
  99. b[grad-1]=a[grad-1]-sn;
  100. for(k=grad+2;k>=2;k--)
  101. b[k]=a[k]-sn*b[k+1]-pn*b[k+2];
  102. s=a[1]-b[2]*sn-b[3]*pn; r=a[0]-b[2]*pn;
  103. bs[grad] =0; bs[grad-1] =-1;
  104. for(k=grad-2;k>=2;k--)
  105. bs[k] =-b[k+1]-sn*bs[k+1]-pn*bs[k+2];
  106. ss=-b[2]-sn*bs[2]-pn*bs[3];
  107. rs=-bs[2]*pn;
  108. bp[grad] =0; bp[grad-1] =0;
  109. for(k=grad+2;k>=2;k--)
  110. bp[k] =-sn*bp[k+1]-b[k+2]-pn*bp[k+2];
  111. sp=-bp[2]*sn-b[3]-pn*bp[3];
  112. rp=-bp[2]*pn-b[2];
  113. if(ss*rp-sp*rs==0)
  114. return(0);
  115. ds=(-s*rp+r*sp)/(ss*rp-sp*rs);
  116. dp=(-ss*r+rs*s)/(ss*rp-sp*rs);
  117. sn=sn+ds; pn=pn+dp;
  118. i=i+1;
  119. }while((ds>=eps&&dp>=eps)||(i<=niter));
  120. if(i>niter)
  121. return(0);
  122. EcGr2(1,sn,pn,solr[irad],soli[irad],solr[irad+1],soli[irad+1]);
  123. grad=grad-2;
  124. for(k=grad;k>=0;k--)
  125. a[k]=b[k+2];
  126. if (grad = = 1) {
  127. solr[irad]=EcGr1(a[1],a[0]);
  128. soli[irad]=0;
  129. return(1);
  130. }
  131. if(grad = = 2) {
  132. EcGr2(a[2],a[1],a[0],solr[irad],soli[irad],solr[irad+1],soli[irad+1]);
  133. return(1);}
  134. }*/
  135. float f(float x){
  136. return exp (3*x)-2*x*x-1.618;}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement