Advertisement
Guest User

Untitled

a guest
Dec 12th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.65 KB | None | 0 0
  1. #define _USE_MATH_DEFINES
  2. #include<iostream>
  3. #include<cmath>
  4. #include<iomanip>
  5. #include<windows.h>
  6.  
  7. using namespace std;
  8.  
  9. double f(double l, int a) //f(x)
  10. {
  11. double x;
  12. switch(a)
  13. {
  14. case 1:
  15. x=((l-4.67)*pow(l+7.36,3))*1.0; //funkcja z zajec
  16. break;
  17. case 2:
  18. x=(2+cos(M_PI/2)*l-2*l)*1.0; //zadana funkcja niealgebraiczna
  19. break;
  20. case 3:
  21. x=(32*pow(l,3)-pow(l,2)+1)*1.0; //funkcja algebraiczna 3st.
  22. break;
  23. }
  24. return x;
  25. }
  26.  
  27. double fp(double l, int a) //f'(x)
  28. {
  29. double x;
  30. switch(a)
  31. {
  32. case 1:
  33. x=(pow(l+7.36,3)+3*(l-4.67)*pow(l+7.36,2))*1.0;
  34. break;
  35. case 2:
  36. x=-2;
  37. break;
  38. case 3:
  39. x=(96*pow(l,2)-2*l)*1.0;
  40. break;
  41. }
  42. return x;
  43. }
  44.  
  45. double wd(double l, int a) //wartosc dokladna f(x)
  46. {
  47. double x;
  48. switch(a)
  49. {
  50. case 1:
  51. if(l>-8 && l<-6)
  52. {x=-7.3600000000000000000000;}
  53. else
  54. {x=4.6700000000000000000000;}
  55. break;
  56. case 2:
  57. x=1.00000000000000000000;
  58. break;
  59. case 3:
  60. x=-0.30490049685893966003;
  61. break;
  62. }
  63. return x;
  64. }
  65.  
  66. double u(double l, int a) //u(x)
  67. {
  68. return (f(l,a)/fp(l,a));
  69. }
  70.  
  71. void info(int a) //info o testowanej funkcji
  72. {
  73. switch(a)
  74. {
  75. case 1:
  76. cout<<"Testowana funkcja: f(x)=(x-4.67)*(x+7.36)^3"<<endl;
  77. break;
  78. case 2:
  79. cout<<"Testowana funkcja: f(x)=2+cos(pi/2)x-2x"<<endl;
  80. break;
  81. case 3:
  82. cout<<"Testowana funkcja: f(x)=32x^3-x^2+1"<<endl;
  83. break;
  84. }
  85. }
  86.  
  87.  
  88. int main()
  89. {
  90. bool work=true;
  91. char key;
  92. double e,x,w,h,l,p;
  93. int licznik,a;
  94. cout<<setprecision(20);
  95. cout<<"Wybierz testowana funkcje:"<<endl<<" *f(x)=(x-4.67)*(x+7.36)^3 -> [1]"<<endl<<" *f(x)=2+cos(pi/2)x-2x -> [2]"<<endl<<" *f(x)=32x^3-x^2+1 -> [3]"<<endl<<">";
  96. cin>>a;
  97. system("cls");
  98. while(work==true)
  99. {
  100. licznik=0;
  101. cout<<endl<<"Podaj liczbe poczatkowa x: "; cin>>l;
  102. cout<<"Podaj liczbe tolerancji e: "; cin>>e;
  103. cout<<endl<<"Metoda Newtona: "<<endl;
  104. x=l;
  105. do
  106. {
  107. h=-1.0*(f(x,a)/fp(x,a));
  108. x+=h*1.0;
  109. w=fabs(h/x)*1.0;
  110. licznik++;
  111. }
  112. while(w>=e);
  113. cout<<endl;
  114. info(a);
  115. cout<<" *Liczba poczatkowa x: "<<l<<endl;
  116. cout<<" *Liczba tolerancji e: "<<e<<endl;
  117. cout<<" *Wynik: "<<x<<endl<<" *Ilosc iteracji: "<<licznik<<endl;
  118. if(wd!=0)
  119. {
  120. cout<<" *Blad wzgledny: "<<fabs(x-wd(x,a))/fabs(wd(x,a))<<endl;
  121. }
  122. else
  123. {
  124. cout<<" *Blad bezwzgledny: "<<fabs(x-wd(x,a))<<endl;
  125. }
  126.  
  127. cout<<endl<<"----------------------------------------------"<<endl;
  128.  
  129. licznik=0;
  130. x=l;
  131. p=(1/2.0)*(1-sqrt(5));
  132. cout<<endl<<"Metoda wielopunktowa: "<<endl;
  133. do
  134. {
  135. h=-(1.0/(p*p))*(f(x+p*u(x,a),a)/fp(x,a));
  136. x+=h*1.0;
  137. w=fabs(h/x)*1.0;
  138. licznik++;
  139.  
  140. }
  141. while(w>=e);
  142. cout<<endl;
  143. info(a);
  144. cout<<" *Liczba poczatkowa x: "<<l<<endl;
  145. cout<<" *Liczba tolerancji e: "<<e<<endl;
  146. cout<<" *Wynik: "<<x<<endl<<" *Ilosc iteracji: "<<licznik<<endl;
  147. if(wd!=0)
  148. {
  149. cout<<" *Blad wzgledny: "<<fabs(x-wd(x,a))/fabs(wd(x,a))<<endl;
  150. }
  151. else
  152. {
  153. cout<<" *Blad bezwzgledny: "<<fabs(x-wd(x,a))<<endl;
  154. }
  155. cout<<endl<<endl<<"Uruchomic ponownie?[t/n]: "; cin>>key;
  156. if(key!='t' && key!='T') {work=false;}
  157. }
  158. return 0;
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement