Advertisement
Guest User

Untitled

a guest
Dec 14th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.45 KB | None | 0 0
  1. #include "code.h"
  2.  
  3. // исходная функция
  4. double f(double x) {
  5.   return pow(x, 2) * cos(x) + pow(x, 3) * exp(-x);
  6. }
  7.  
  8. // сохраняем точки исходной функции
  9. void generate(double a, double b, double h, const char* filename) {
  10.   FILE* data = fopen(filename, "w");
  11.   for (double x = a; x <= b; x += h) {
  12.     fprintf(data, "%f;%f\n", x, f(x));
  13.   }
  14.   fclose(data);
  15. }
  16.  
  17. Polynom* polynom(int n) {
  18.   Polynom* p = (Polynom*)malloc(sizeof(struct Polynom));
  19.   p->n = n;
  20.   p->k = (double*)malloc((n+1)*sizeof(double));
  21.  
  22.   for (int i = 0; i <= n; ++i) {
  23.     p->k[i] = 0;
  24.   }
  25.  
  26.   return p;
  27. }
  28.  
  29. void free_polynom(Polynom* p) {
  30.     free(p->k);
  31.     free(p);
  32. }
  33.  
  34. // копируем source в dest
  35. void copy(Polynom* dest, Polynom* source) {
  36.   if (dest->n != source->n) {
  37.       return;
  38.   }
  39.  
  40.   for (int i = 0; i <= dest->n; ++i) {
  41.     dest->k[i] = source->k[i];
  42.   }
  43. }
  44.  
  45. // вывод полинома
  46. void print(Polynom* p) {
  47.   for (int i = 0; i <= p->n; ++i) {
  48.     printf("%f * x^%d\n", p->k[i], i);
  49.   }
  50. }
  51.  
  52. // значение полинома p в точке x
  53. double apply(Polynom* p, double x) {
  54.   double result = p->k[p->n];
  55.   for (int i = p->n - 1; i >= 0; --i) {
  56.     result = result * x + p->k[i];
  57.   }
  58.   return result;
  59. }
  60.  
  61. // интерполяция полиномом n-ой степени
  62. // набора из k точек points
  63. Polynom* solve(Point* points, int k, int n) {
  64.     return polynom(n);
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement