Численное интегрирование. Переписать код с Delphi 7 на C#

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

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

Необходимо переписать код программы с Delphi 7 на C#.
Листинг программы
  1. unit Unit1;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Math, ExtCtrls, graphDtrans, CheckLst;
  5. type
  6. TMain=class(TForm)
  7. Label1:TLabel;
  8. CheckListBox1:TCheckListBox;
  9. Panel1:TPanel;
  10. procedure FormCreate(Sender:TObject);
  11. private
  12. { Private declarations }
  13. public
  14. { Public declaration}
  15. end;
  16. const nn=100;
  17. Type func=function(x:double):double;
  18. var
  19. Main:TMain;
  20. b:massiv;
  21. y,ymax,bk,a,a1,ak,h,h1,Gamast,Gamag,Rml,g,gm,l,fk:double;
  22. m,ksi,V0,Tau,s,lambda,alfak,Mu0,delta:double;
  23. result,bbb:double;
  24. j:integer;
  25.  
  26. implementation
  27. {$R *.dfm}
  28. //-------------------------зависимость Psi от M и Ksi--------------------------------\\
  29. function Psi(m,ksi:double):double;
  30. begin
  31. if (Ksi<=a*Pi/Tau) then Psi:=1/m-(1-s)*V0
  32. else Psi:=Gamast/(m*Gamag);
  33. end;
  34. //-------------------------зависимость P от M -----------------------------------------\\
  35. function p(x:double):double;
  36. begin
  37. p:=(2*h*abs(x))/(exp(2*abs(x))-1)*(1-exp(-abs(x)*m));
  38. end;
  39. //-----------------------------------------sign-------------------------------------------------\\
  40. function sign(x:double):integer;
  41. begin
  42. if x>0 then sign:=1 else sign:=-1;
  43. //if x=0 then sign:=0;
  44. end;
  45.  
  46. //---------------------------------------поиск корней-------------------------------------------\\
  47. {$F+}
  48. function fkorn(x:double):double;
  49. begin
  50. if x<>Pi/2 then fkorn:=a1*tan(x)*x-abs(m);
  51. end;
  52. {$F-}
  53. //--------------------------------Численное деление пополам-----------------------------------\\
  54. function korny(aa,bb,e:double;f:func):double;
  55. var c:double;
  56. begin
  57. bb:=70;
  58. repeat
  59. aa:=0.000013;
  60. bb:=bb+0.03999;
  61. until f(aa)*f(bb)<0;
  62. bbb:=bb;
  63. if(bb-aa<=0) then begin showmessage(‘Интервал указан неправильно!’);halt and else
  64. if f(aa)*f(bb)>0 then begin showmessage(‘Указанный интервал не подходит для данного метода, т.к. значения ф-ции на’);
  65. showmessage(‘концах отрезка’+flosttostr(aa)+’,’+floattostr(bb)+’ не удовлетворяют неравенству:(‘+floattostr(f(a))+’)*(‘+floattostr(f(bb))+’)<0’);halt end else
  66. repeat
  67. c:=(aa+bb)/2;
  68. if f(a)=0 then c:=aa;
  69. if f(bb)=0 then c:=bb;
  70. if (f(aa)*f(c)<0) then bb:=c else aa:=c;
  71. until(bb-aa<e)or(f(c)=0);
  72. korny:=c;
  73. end;
  74.  
  75. //--------------------------------подынтегральная функция-----------------------------------\\
  76. {$F+}
  77. function fx(x:double):double;
  78. var B0:double;
  79. test:double;
  80. begin
  81. B0:=(2*Mu0*sign(m)*cosh(m*y))/((m-alfak)*sinh(abs(m)*delta))*((cos(m*1)-1)+j*sin(m*l));
  82. test:=gm*B0*fk;
  83. fx:=test;
  84. end;
  85. {$F-}
  86. //--------------------------------Численное интегрирование-----------------------------------\\
  87. //--------------------------------метод прямоугольников -----------------------------------\\
  88. function rectangls(a,b,e:double;f:func):double;
  89. var s1,s2,h:double;I,n:integer;
  90. begin
  91. if(b-s<=0) then begin showmessage(‘Интервал указан неправильно!’);halt; and else
  92. n:=100;
  93. repeat
  94. s1:=0;
  95. s2:=0;
  96. h:=(b-a)/n;
  97. for i:=1 to n do
  98. s1:=s1+h*f(h*i-h/2);
  99. n:=n*2;
  100. h:=(b-a)/n;
  101. for i:=1 to n do
  102. s2:=s2+h*f(h*i-h/2);
  103. until abs(s2-s1)<e;
  104. rectangls:=s2;
  105. end;
  106. //--------------------------------расчет суммы Ak и Fk--------------------------------------\\
  107. procedure ras4et;
  108. var k:integer;
  109. begin
  110. result:=0;
  111. for k:=1 to 160 do
  112. begin
  113. m:=79.5+(k-1);
  114. alfak:=korny(0,bbb,0.0001,fkorn);
  115. gm:=p(m)*psi(m,Ksi);
  116. lamdak:=(alfak*alfak+m*m)/(abs(m)*abs(gm));
  117. bk:=sign(lamdak)*rectangls(-h1,h1,0.001,fx);
  118. ak:=(lambda*bk)/(lambda+j*Rml);
  119. fk:=((2*alfak)/(2*alfak*a1+sin(2*alfak)*a1*abs(gm))*cos(alfak)*y);
  120. result:=result+ak*fk;
  121. end;
  122. end;
  123. procedure TMain.FormCreate(Sender:TObject);
  124. begin
  125. y:=0;
  126. ymax:=1;
  127. h:=0.0104;
  128. Tau:=0.09;
  129. h1:=h*Pi/Tau;
  130. l:=0.2502;
  131. Mu0:=12.56e-7;
  132. Gamag:=5e6;
  133. Gamast:=2.5e6;
  134. ksi:=1;
  135. delta:=0.0116;
  136. a:=0.0063;
  137. a1:=a*Pi/Tau;
  138. bbb:=1;
  139. Rml:=5;
  140. end;
  141. end.

Решение задачи: «Численное интегрирование. Переписать код с Delphi 7 на C#»

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.     }

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


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

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

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

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

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

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