Interpolacja.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace _08_Interpolacja
  7. {
  8. public class Interpolacja
  9. {
  10. int N;
  11. double X;
  12. double[] x;
  13. double[] y;
  14. public double WielLagr1(double[] x, double[] y, double X)
  15. {
  16. this.x = x;
  17. this.y = y;
  18. this.X = X;
  19. N = x.Length;
  20. double sum = 0;
  21. for (int i = 0; i < N; i++)
  22. sum += y[i] * u(i);
  23. return sum;
  24. }
  25. private double u(int i)
  26. {
  27. double w = 1;
  28. for (int j = 0; j < N; j++)
  29. if (j != i)
  30. w *= ((X - x[j]) / (x[i] - x[j]));
  31. return w;
  32. }
  33. private double omega()
  34. {
  35. double om = 1;
  36. foreach (double xi in x)
  37. om *= (X - xi);
  38. return om;
  39. }
  40. private double um(int i)
  41. {
  42. double w = 1/(X - x[i]);
  43. for (int j = 0; j < N; j++)
  44. if (j != i)
  45. w /= (x[i] - x[j]);
  46. return w;
  47. }
  48. public double WielLagr2(double[] x, double[] y, double X)
  49. {
  50. this.x = x;
  51. this.y = y;
  52. this.X = X;
  53. N = x.Length;
  54. double sum = 0;
  55. for (int i = 0; i < N; i++)
  56. sum += y[i] * um(i);
  57. return sum* omega();
  58. }
  59. }
  60. }