Численное интегрирование(проверить код) - C#

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

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

Здравствуйте! Помогите пожалуйста разобраться. Bm всегда выводит значение NaN. Где ошибка? И правильно ли вообще построен код?
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace ConsoleApplication1
  6. {
  7. class Program
  8. {
  9. static double V0,alfak,fk,lambda,gm,result,a0,b0,a,ak,bk,en,b,rect,e;
  10. static int i,j;
  11. static int nn = 100;
  12. static int ksi = 1;
  13. static double m;
  14.  
  15. public static double Psi(double m, double ksi)
  16. {
  17. double a = 0.0063f;
  18. double s = 0.2f;
  19. double Gamast = 2.5e6f;
  20. double Tau = 0.09f;
  21. if (ksi <= a * Math.PI / Tau)
  22. return 1 / m - (1 - s) * V0;
  23. else return Gamast / (m * Gamast);
  24.  
  25. }
  26. public static double P(double x)
  27. {
  28. double h = 0.0104f;
  29. return (2*h*Math.Abs(x))/(Math.Exp(2*Math.Abs(x))-1)*(1-Math.Exp(- Math.Abs(m)));
  30. }
  31. //подынтегральная функция
  32. public static double fx(double x)
  33. {
  34. int y = 0;
  35. double delta = 0.0116f;
  36. double l = 0.2502f;
  37. double Mu0 = 12.56e-7f;
  38. double B0=(2 * Mu0 * Math.Sign(m) * Math.Cosh(m * y)) / ((m - alfak) * Math.Sinh(Math.Abs(m) * delta)) * ((Math.Cos(m * l) - 1) + j * Math.Sin(m * l));
  39. return gm * B0 * fk;
  40. }
  41. //решение методом прямоугольников
  42. private void rectangls()
  43. {
  44. double s1;
  45. double s2;
  46. double h;
  47. int i,n;
  48. n = 100;
  49. do
  50. {
  51. s1=0;
  52. s2=0;
  53. h=(b-a)/n;
  54.  
  55. for (i=1;i<n;i++)
  56. {
  57. s1=s1+h*fx(h*i-h/2);
  58. }
  59. n=n*2;
  60. h=(b-a)/n;
  61. for (i=1;i<n;i++)
  62. {
  63. s2=s2+h*fx(h*i-h/2);
  64. }
  65. }
  66. while (Math.Abs(s2-s1)<e);
  67. rect=s2;
  68.  
  69. }
  70.  
  71. //решение трансцендентного уравнения методом ньютона
  72. private void ras4et()
  73. {
  74. double eps = 0.0001;
  75. for (m = -79.5; m <= 79.5; m++)
  76. {
  77. //a1=0.0063*Math.Pi/0.09
  78. a0 = 0;
  79. b0 = Math.PI / 2;
  80. en = Math.Abs(a - b);
  81. alfak = b - 0.05;
  82. i = 1;
  83. while (Math.Abs(en) > eps)
  84. {
  85. alfak = alfak - f(alfak, m) / f1(alfak, m);
  86. en = Math.Abs(alfak - b);
  87. b = alfak;
  88. }
  89. }
  90. }
  91. //трансцендентное уравнение
  92. private static double f(double alfak, double m)
  93. {
  94. return Math.Tan(alfak) - (Math.Abs(m) / alfak);
  95. }
  96. //его производная
  97. private static double f1(double alfak, double m)
  98. {
  99. return 1 / (Math.Pow(Math.Cos(alfak), 2)) + Math.Abs(m) / Math.Pow(alfak, 2);
  100. }
  101.  
  102. //расчет суммы Ak и Fk
  103. static void Main()
  104. {
  105. int y = 0;
  106. int ksi = 1;
  107. int Rml = 5;
  108. double Tau = 0.09f;
  109. double a1=a*Math.PI/Tau;
  110. int j = 1;
  111. result=0;
  112. for (m = -79.5; m <= 79.5; m++)
  113. {
  114. gm=P(m)*Psi(m,ksi);
  115. lambda = (alfak * alfak + m * m) / (Math.Abs(m) * Math.Abs(gm));
  116. bk = Math.Sign(lambda) * rect;
  117. ak=(lambda*bk)/(lambda+j*Rml);
  118. fk=((2*alfak)/(2*alfak*a1+Math.Sin(2*alfak)*a1*Math.Abs(gm))*Math.Cos(alfak)*y);
  119. result=result+ak*fk;
  120. Console.WriteLine("Bm = {0}", result);
  121. }
  122. Console.ReadKey();
  123. Console.WriteLine();
  124. }
  125. }
  126. }

Решение задачи: «Численное интегрирование(проверить код)»

textual
Листинг программы
  1. class Program
  2.     {
  3.         public delegate double Function(double x);
  4.         public static double Rectangular(Function f, double a, double b, int n)
  5.         {
  6.             double sum = 0.0;
  7.             double h = (b - a) / n;
  8.             for (int i = 0; i < n; i++)
  9.             {
  10.                 sum += h * f(a + i * h);
  11.             }
  12.             return sum;
  13.         }
  14.  
  15.         public static double Rectangular(double[] y, double a, double b, int n)
  16.         {
  17.             double sum = 0.0;
  18.             double h = (b - a) / n;
  19.             for (int i = 0; i < n; i++)
  20.             {
  21.                 sum += h * y[i];
  22.             }
  23.             return sum;
  24.         }
  25.         static double f(double x)
  26.         {
  27.             return Math.Sin(x);
  28.         }
  29.         static double df(double x)
  30.         {
  31.             return Math.Cos(x);
  32.         }
  33.         static void Main(string[] args)
  34.         {
  35.             int n = 1000;
  36.             double result;
  37.             double a = 0.0;
  38.             double b = 1.0;
  39.  
  40.             Console.WriteLine("\nTesting Rectangular method for integral(df(x)) = f(x) where");
  41.             Console.WriteLine("f(x) = sin(x), df(x) = cos(x) and a=0 to b=1.\n");
  42.  
  43.             result = f(b) - f(a);
  44.             Console.WriteLine("Analytic result         = " + result.ToString());
  45.  
  46.             result = Rectangular(df, a, b, n);
  47.             Console.WriteLine("Result using function   = " + result.ToString());
  48.  
  49.             double[] y = new double[n];
  50.             double h = (b - a) / (n - 1);
  51.             for (int i = 0; i < n; i++)
  52.             {
  53.                 double x = i * h;
  54.                 y[i] = df(x);
  55.             }
  56.             result = Rectangular(y, a, b, n);
  57.             Console.WriteLine("Result using data array = " + result.ToString());
  58.             Console.ReadLine();
  59.         }
  60.     }

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


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

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

8   голосов , оценка 4 из 5

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

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

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