Advertisement
Guest User

styczne

a guest
Jun 21st, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.86 KB | None | 0 0
  1. // przykladowe uruchomienie(należy dopisać -lm przy kompilacji)
  2. // gcc -Wall -o progst styczne.c -lm
  3. // ./progst
  4. #include<stdio.h>
  5. #include<stdlib.h>
  6. #include<string.h>
  7. #include<math.h>
  8.  
  9. //wyliczenie wartości funkcji w punkcie x, r-maks potęga funkcji, arg-wartość x, tab-tablica współczynników funkcji
  10. float funcArg(int r, float arg, float tab[20])
  11. {
  12.     float result = 0;
  13.     int i;
  14.  
  15.     for(i=0; i<=r; i++)
  16.         result += pow(arg,i)*tab[i];
  17.    
  18.     return result;
  19. }
  20.  
  21. //wartość pierwszej pochodnej funkcji w x
  22. float deriv(int r, float arg, float tab[20])
  23. {
  24.     float result = 0;
  25.     int i;
  26.  
  27.     for(i=1; i<=r; i++)
  28.         result += pow(arg,i-1)*tab[i]*i;
  29.    
  30.     return result;
  31. }
  32.  
  33. //wartość drugiej pochodnej funkcji w x
  34. float deriv2(int r, float arg, float tab[20])
  35. {
  36.     float result = 0;
  37.     int i;
  38.  
  39.     for(i=2; i<=r; i++)
  40.         result += pow(arg,i-2)*tab[i]*i*(i-1);
  41.    
  42.     return result;
  43. }
  44.  
  45.  
  46. int main()
  47. {
  48.     float a, b, E, wsp[20], x, y, y1a, y1z,y2z,z;
  49.     int i, n;
  50.  
  51.     printf("Jakiego rzędu ma być wielomian?:");
  52.     scanf("%d",&n);
  53.  
  54.     for(i=0; i<=n; i++)
  55.     {
  56.         printf("Podaj współczynnik znajdujący się przy [%d] potędze: ",i);
  57.         scanf("%f",&wsp[i]);
  58.     }
  59.    
  60.     printf("Podaj granice przedziału:\n");
  61.     printf("a = ");
  62.     scanf("%f",&a);
  63.     printf("b = ");
  64.     scanf("%f",&b);
  65.     printf("Dokładność ɛ: ");
  66.     scanf("%f",&E);
  67.    
  68.     z = (a + b)/2;
  69.    
  70.     //obliczenie wartości pierwszej i drugiej pochodnej w punkcie z
  71.     y1z = deriv(n,z,wsp);
  72.     y2z = deriv2(n,z,wsp);
  73.  
  74.     //algorytm z instrukcji
  75.     y = funcArg(n,a,wsp);
  76.     y1a = deriv(n,a,wsp);
  77.    
  78.     x = a;
  79.     if(y1z*y2z < 0)
  80.     {
  81.         while(fabs(y) > E) //fabs - wyznaczanie wartości bezwzględnej z liczby typu float
  82.         {                  
  83.             x = x - y/y1a;
  84.             y = funcArg(n,x,wsp);
  85.             y1a = deriv(n,x,wsp);      
  86.         }
  87.     } else printf("Funkcja nie ma pierwiastków w zadanym przedziale");
  88.  
  89.     printf("Pierwiastek x: %0.3f\n", x);
  90.    
  91.     return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement