Помогите исправить ошибку вывода данных - C#

Узнай цену своей работы

Формулировка задачи:

Вот код, вроде получилось связать класс и main, но не выводятся значения. Помогите начинающему в этом деле
Листинг программы
  1. using System;
  2. namespace ConsoleApp
  3. {
  4. class CubicSpline
  5. {
  6. SplineTuple[] splines; // Сплайн
  7. // Структура, описывающая сплайн на каждом сегменте сетки
  8. private struct SplineTuple
  9. {
  10. public double a, b, c, d, x;
  11. }
  12. // Построение сплайна
  13. // x - узлы сетки, должны быть упорядочены по возрастанию, кратные узлы запрещены
  14. // y - значения функции в узлах сетки
  15. // n - количество узлов сетки
  16. public void BuildSpline(double[] x, double[] y, int n)
  17. {
  18. // Инициализация массива сплайнов
  19. splines = new SplineTuple[n];
  20. for (int i = 0; i < n; ++i)
  21. {
  22. splines[i].x = x[i];
  23. splines[i].a = y[i];
  24. }
  25. splines[0].c = splines[n - 1].c = 0.0;
  26. // Решение СЛАУ относительно коэффициентов сплайнов c[i] методом прогонки для трехдиагональных матриц
  27. // Вычисление прогоночных коэффициентов - прямой ход метода прогонки
  28. double[] alpha = new double[n - 1];
  29. double[] beta = new double[n - 1];
  30. alpha[0] = beta[0] = 0.0;
  31. for (int i = 1; i < n - 1; ++i)
  32. {
  33. double hi = x[i] - x[i - 1];
  34. double hi1 = x[i + 1] - x[i];
  35. double A = hi;
  36. double C = 2.0 * (hi + hi1);
  37. double B = hi1;
  38. double F = 6.0 * ((y[i + 1] - y[i]) / hi1 - (y[i] - y[i - 1]) / hi);
  39. double z = (A * alpha[i - 1] + C);
  40. alpha[i] = -B / z;
  41. beta[i] = (F - A * beta[i - 1]) / z;
  42. }
  43. // Нахождение решения - обратный ход метода прогонки
  44. for (int i = n - 2; i > 0; --i)
  45. {
  46. splines[i].c = alpha[i] * splines[i + 1].c + beta[i];
  47. }
  48. // По известным коэффициентам c[i] находим значения b[i] и d[i]
  49. for (int i = n - 1; i > 0; --i)
  50. {
  51. double hi = x[i] - x[i - 1];
  52. splines[i].d = (splines[i].c - splines[i - 1].c) / hi;
  53. splines[i].b = hi * (2.0 * splines[i].c + splines[i - 1].c) / 6.0 + (y[i] - y[i - 1]) / hi;
  54. }
  55. }
  56. // Вычисление значения интерполированной функции в произвольной точке
  57. public double Interpolate(double x)
  58. {
  59. if (splines == null)
  60. {
  61. return double.NaN; // Если сплайны ещё не построены - возвращаем NaN
  62. }
  63. int n = splines.Length;
  64. SplineTuple s;
  65. if (x <= splines[0].x) // Если x меньше точки сетки x[0] - пользуемся первым эл-тов массива
  66. {
  67. s = splines[0];
  68. }
  69. else if (x >= splines[n - 1].x) // Если x больше точки сетки x[n - 1] - пользуемся последним эл-том массива
  70. {
  71. s = splines[n - 1];
  72. }
  73. else // Иначе x лежит между граничными точками сетки - производим бинарный поиск нужного эл-та массива
  74. {
  75. int i = 0;
  76. int j = n - 1;
  77. while (i + 1 < j)
  78. {
  79. int k = i + (j - i) / 2;
  80. if (x <= splines[k].x)
  81. {
  82. j = k;
  83. }
  84. else
  85. {
  86. i = k;
  87. }
  88. }
  89. s = splines[j];
  90. }
  91. double dx = x - s.x;
  92. // Вычисляем значение сплайна в заданной точке по схеме Горнера (в принципе, "умный" компилятор применил бы схему Горнера сам, но ведь не все так умны, как кажутся)
  93. return s.a + (s.b + (s.c / 2.0 + s.d * dx / 6.0) * dx) * dx;
  94. }
  95. }
  96. class Program
  97. {
  98. static void Main()
  99. {
  100. double[] value = new double[20];
  101. double[] z = { 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8, 2 };
  102. double[] v = { -0.16, 0.1, 0.05, 0.19, 0.74, 1.06, 1.79, 2.22, 2.88, 3.63 };
  103. int t;
  104. double[] t1 = new double[20];
  105. double arg;
  106. double h = 0.1;
  107. var value1 = new CubicSpline() ;
  108. var value2 = new CubicSpline();
  109. value1.BuildSpline(z,v,10);
  110. value2.Interpolate(z[9]);
  111. Console.WriteLine("Интерполяция кубическим сплайном:");
  112. Console.ReadKey();
  113. }
  114. }
  115. }

Решение задачи: «Помогите исправить ошибку вывода данных»

textual
Листинг программы
  1. Console.WriteLine("Интерполяция кубическим сплайном:");

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.75 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы