Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2017, 19:46   #1
hollymin
Новичок
Джуниор
 
Регистрация: 12.06.2017
Сообщений: 1
По умолчанию Численное интегрирование. Переписать код с Delphi 7 на C#

Помогите пожалуйста переписать данный код с Delphi 7 на C#. Хотя бы для примера пару функций переписать на 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.
hollymin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Численное интегрирование. MurkyMargosha Помощь студентам 2 26.10.2013 18:30
численное интегрирование Александримя Паскаль, Turbo Pascal, PascalABC.NET 0 08.04.2013 15:34
Численное интегрирование А_л_е_н_а Помощь студентам 4 11.09.2012 08:05
Численное интегрирование km77 Помощь студентам 3 02.06.2011 09:21
Численное интегрирование abs123 Паскаль, Turbo Pascal, PascalABC.NET 1 26.12.2010 22:43