Численное интегрирование. Переписать код с 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();
        }
    }

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


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

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

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