Численное интегрирование. Переписать код с Delphi 7 на C#
Формулировка задачи:
Необходимо переписать код программы с Delphi 7 на C#.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Math, ExtCtrls, graphDtrans, CheckLst; type TMain=class(TForm) Label1:TLabel; CheckListBox1:TCheckListBox; Panel1:TPanel; procedure FormCreate(Sender:TObject); private { Private declarations } public { Public declaration} end; const nn=100; Type func=function(x:double):double; var Main:TMain; b:massiv; y,ymax,bk,a,a1,ak,h,h1,Gamast,Gamag,Rml,g,gm,l,fk:double; m,ksi,V0,Tau,s,lambda,alfak,Mu0,delta:double; result,bbb:double; j:integer; implementation {$R *.dfm} //-------------------------зависимость Psi от M и Ksi--------------------------------\\ function Psi(m,ksi:double):double; begin if (Ksi<=a*Pi/Tau) then Psi:=1/m-(1-s)*V0 else Psi:=Gamast/(m*Gamag); end; //-------------------------зависимость P от M -----------------------------------------\\ function p(x:double):double; begin p:=(2*h*abs(x))/(exp(2*abs(x))-1)*(1-exp(-abs(x)*m)); end; //-----------------------------------------sign-------------------------------------------------\\ function sign(x:double):integer; begin if x>0 then sign:=1 else sign:=-1; //if x=0 then sign:=0; end; //---------------------------------------поиск корней-------------------------------------------\\ {$F+} function fkorn(x:double):double; begin if x<>Pi/2 then fkorn:=a1*tan(x)*x-abs(m); end; {$F-} //--------------------------------Численное деление пополам-----------------------------------\\ function korny(aa,bb,e:double;f:func):double; var c:double; begin bb:=70; repeat aa:=0.000013; bb:=bb+0.03999; until f(aa)*f(bb)<0; bbb:=bb; if(bb-aa<=0) then begin showmessage(‘Интервал указан неправильно!’);halt and else if f(aa)*f(bb)>0 then begin showmessage(‘Указанный интервал не подходит для данного метода, т.к. значения ф-ции на’); showmessage(‘концах отрезка’+flosttostr(aa)+’,’+floattostr(bb)+’ не удовлетворяют неравенству:(‘+floattostr(f(a))+’)*(‘+floattostr(f(bb))+’)<0’);halt end else repeat c:=(aa+bb)/2; if f(a)=0 then c:=aa; if f(bb)=0 then c:=bb; if (f(aa)*f(c)<0) then bb:=c else aa:=c; until(bb-aa<e)or(f(c)=0); korny:=c; end; //--------------------------------подынтегральная функция-----------------------------------\\ {$F+} function fx(x:double):double; var B0:double; test:double; begin B0:=(2*Mu0*sign(m)*cosh(m*y))/((m-alfak)*sinh(abs(m)*delta))*((cos(m*1)-1)+j*sin(m*l)); test:=gm*B0*fk; fx:=test; end; {$F-} //--------------------------------Численное интегрирование-----------------------------------\\ //--------------------------------метод прямоугольников -----------------------------------\\ function rectangls(a,b,e:double;f:func):double; var s1,s2,h:double;I,n:integer; begin if(b-s<=0) then begin showmessage(‘Интервал указан неправильно!’);halt; and else n:=100; repeat s1:=0; s2:=0; h:=(b-a)/n; for i:=1 to n do s1:=s1+h*f(h*i-h/2); n:=n*2; h:=(b-a)/n; for i:=1 to n do s2:=s2+h*f(h*i-h/2); until abs(s2-s1)<e; rectangls:=s2; end; //--------------------------------расчет суммы Ak и Fk--------------------------------------\\ procedure ras4et; var k:integer; begin result:=0; for k:=1 to 160 do begin m:=79.5+(k-1); alfak:=korny(0,bbb,0.0001,fkorn); gm:=p(m)*psi(m,Ksi); lamdak:=(alfak*alfak+m*m)/(abs(m)*abs(gm)); bk:=sign(lamdak)*rectangls(-h1,h1,0.001,fx); ak:=(lambda*bk)/(lambda+j*Rml); fk:=((2*alfak)/(2*alfak*a1+sin(2*alfak)*a1*abs(gm))*cos(alfak)*y); result:=result+ak*fk; end; end; procedure TMain.FormCreate(Sender:TObject); begin y:=0; ymax:=1; h:=0.0104; Tau:=0.09; h1:=h*Pi/Tau; l:=0.2502; Mu0:=12.56e-7; Gamag:=5e6; Gamast:=2.5e6; ksi:=1; delta:=0.0116; a:=0.0063; a1:=a*Pi/Tau; bbb:=1; Rml:=5; end; end.
Решение задачи: «Численное интегрирование. Переписать код с Delphi 7 на C#»
textual
Листинг программы
class Program { public delegate double Function(double x); public static double Rectangular(Function f, double a, double b, int n) { double sum = 0.0; double h = (b - a) / n; for (int i = 0; i < n; i++) { sum += h * f(a + i * h); } return sum; } public static double Rectangular(double[] y, double a, double b, int n) { double sum = 0.0; double h = (b - a) / n; for (int i = 0; i < n; i++) { sum += h * y[i]; } return sum; } static double f(double x) { return Math.Sin(x); } static double df(double x) { return Math.Cos(x); } static void Main(string[] args) { int n = 1000; double result; double a = 0.0; double b = 1.0; Console.WriteLine("\nTesting Rectangular method for integral(df(x)) = f(x) where"); Console.WriteLine("f(x) = sin(x), df(x) = cos(x) and a=0 to b=1.\n"); result = f(b) - f(a); Console.WriteLine("Analytic result = " + result.ToString()); result = Rectangular(df, a, b, n); Console.WriteLine("Result using function = " + result.ToString()); double[] y = new double[n]; double h = (b - a) / (n - 1); for (int i = 0; i < n; i++) { double x = i * h; y[i] = df(x); } result = Rectangular(y, a, b, n); Console.WriteLine("Result using data array = " + result.ToString()); Console.ReadLine(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д