Advertisement
Guest User

Untitled

a guest
Feb 21st, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.33 KB | None | 0 0
  1. #include <math.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <windows.h>
  5.  
  6. #define N 12
  7. int fnumber(double x);
  8. double absolute_error(double x, double rel_error);
  9. double relative_error(double x);
  10. double pow_absolute(double x, int step, double x_abs);
  11. double exp_absolute(double x1, double x2, double x_abs);
  12. double mul_absolute(double x1, double x2, double x_abs);
  13. double F(double x1, double x2, double x3);
  14. double F_absolute(double x1, double x2, double x3, double x_abs);
  15. double ctg(double x);
  16.  
  17. int main(void){
  18. SetConsoleCP(1251);
  19. SetConsoleOutputCP(1251);
  20.  
  21. double x1=1.51,x2=2.15,x3= 0.43, abs_x = N * 0.001;
  22. printf("x1 = %f\tx2 = %f\tx3 = %f",x1,x2,x3);
  23. puts("\n\nВідносні похибки: ");
  24. printf("x1 = %.5f %%\tx2 = %.5f %%\tx3 = %.5f %%\n",relative_error(x1)*100,relative_error(x2)*100,relative_error(x3)*100);
  25. puts("\nАбсолютні похибки: ");
  26. printf("x1 = %.5f \tx2 = %.5f \tx3 = %.5f\n",relative_error(x1)*x1,relative_error(x2)*x2,relative_error(x3)*x3);
  27.  
  28. double f, abs_f;
  29. f = F(x1,x2,x3);
  30. abs_f= F_absolute(x1,x2,x3, abs_x);
  31. printf("\nПохибки F при дельта Х = %.5f Абсолютна = %.5f Відносна = %.5f",f,abs_f,abs_f/f);
  32.  
  33. puts("\nЗмінюємо похибки Х:\n");
  34. int i;
  35. for(i=1;i<=N;i++){
  36. abs_x = N * pow(10, -1 * (3 + i*0.1));
  37. abs_f= F_absolute(x1,x2,x3, abs_x);
  38. printf("Абсолютна = %.5f Відносна = %.5f Похибка Х= %.5f\n",abs_f,abs_f/f, abs_x);
  39. }
  40.  
  41.  
  42. return 0;
  43. }
  44.  
  45. //відносна похибка
  46. double relative_error(double x){
  47. double x_cp = x;
  48. double count = 0;
  49. while (((int)x_cp - x_cp) != 0){
  50. x_cp *= 10;
  51. count++;
  52. }
  53. if (count == 0){ return 0.5; }
  54. double znach = (double)fnumber(x);
  55.  
  56. return (1 / (2 * (znach))) / (pow(10, count));
  57. }
  58.  
  59. //перша значуща цифра
  60. int fnumber(double x){
  61. x = fabs(x);
  62. if ((int)x >= 1){
  63. while ((int)(x / 10) != 0){
  64. x /= 10;
  65. }
  66. }
  67. else{
  68. while ((int)x == 0){
  69. x *= 10;
  70. }
  71. }
  72. return (int)x;
  73. }
  74.  
  75. //знаходження абс. степеня
  76. double pow_absolute(double x, int step, double x_abs){
  77. return step*pow(x, step - 1)*x_abs;
  78. }
  79.  
  80. //знаходження абс. множення
  81. double mul_absolute(double x1, double x2, double x_abs){
  82. double A = (x1 + x_abs)*(x2 + x_abs);
  83. double u = x1*x2;
  84. return fabs(A - u);
  85. }
  86.  
  87. //знаходження абс. котангенса
  88. double ctg_absolute(double x2, double x3, double x_abs){
  89. //exp(8*x2 - x1)
  90. return 20*(fabs(-1/pow(sin(x2-x3),2))*x_abs) + (fabs(-1/pow(sin(x2-x3),2)-1)*x_abs);
  91. }
  92.  
  93. //абсолютна похибка величини F
  94. double F_absolute(double x1, double x2, double x3, double x_abs){
  95. return 8 * pow_absolute(x1, 2, x_abs) +
  96. 6 * pow_absolute(x2, 2, x_abs) +
  97. 4 * pow_absolute(x3, 2,x_abs) +
  98. 6 * mul_absolute(x2,x3,x_abs) +
  99. 4*x_abs +
  100. 20*ctg_absolute(x2,x3,x_abs);
  101. }
  102.  
  103. //значення величини F
  104. double F(double x1, double x2, double x3){
  105. return 8 * pow(x1, 2) + 6 * pow(x2, 2) + 4 * pow(x3, 2) - 6 * x2*x3 - 4*x1 + 20*ctg(x2 - x3);
  106.  
  107. }
  108.  
  109. double ctg(double x )
  110. {
  111. return cos( x )/sin( x );
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement