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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2017, 19:09   #11
useryur
Новичок
Джуниор
 
Регистрация: 25.02.2017
Сообщений: 2
По умолчанию

Цитата:
Сообщение от _Dmitry Посмотреть сообщение
В Delphi конечно же нет. Но на форуме тема вычисления определённого интеграла обсуждалась неоднократно. Пользуйтесь поиском...
Ну, а значение функции Лапласа можно вычислить так:
Код:
type
  TFunction = function(x: double): double;

//вычисление определённого интеграла методом Симпсона
//a,b-пределы интеграла, eps-точность решения, Fun-подынтегральная функция
function Simpson(Fun: TFunction; a,b,eps: double): double;
var
  i,n: integer;
  h,s0,s: double;
begin       
  n:=1; s:=0;
  repeat
    n:=n*2; h:=(b-a)/n; s0:=s;
    s:=Fun(a)+Fun(b);
    for i:=1 to n-1 do
      s:=s+2*(1+i mod 2)*Fun(a+i*h);
    s:=s*(b-a)/(3*n);
  until abs(s-s0) <= eps;
  result:=s;
end; //Simpson

//подынтегральное выражение для вычисления нормированной функции Лапласа
function Fun(t: double): double;
begin
  result:=exp(-t*t/2);
end; //Fun

//нормированная функция Лапласа
function F(x: double): double;
begin
  result:=Simpson(Fun,0,x,1E-12)/sqrt(2*pi);
end; //F
Формула здесь http://www.nuru.ru/teorver/026.htm
Для тестирования правильности вычислений использовалась таблица значений http://www.mathauto.ru/calc/tfl.htm
Выдаёт ошибку Error: local procedure/function 'Fun' assigned to procedure variable с переводом курсора на строку " result:=Simpson(Fun,0,x,1E-12)/sqrt(2*pi)". Подскажите, пожалуйста, в чем проблема?
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TFunction = function(x: double): double; 
  TForm1 = class(TForm)
    edt1: TEdit;
    edt2: TEdit;
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);

var
  d,h:Real;
  h_s,x_s:string;
   code:Integer;

function Simpson(Fun: TFunction; a,b,eps: double): double;
var 
i,n: integer; 
h,s0,s: double; 
begin 
n:=1; s:=0; 
repeat 
n:=n*2; h:=(b-a)/n; s0:=s; 
s:=Fun(a)+Fun(b); 
for i:=1 to n-1 do 
s:=s+2*(1+i mod 2)*Fun(a+i*h); 
s:=s*(b-a)/(3*n); 
until abs(s-s0) <= eps; 
result:=s; 
end; //Simpson

function Fun(t: double): double;
begin 
result:=exp(-t*t/2); 
end; //Fun 

function F(x: double): double; 
begin 
result:=Simpson(Fun,0,x,1E-12)/sqrt(2*pi);
end; //F

begin
 x_s :=edt1.Text;
val(x_s,d,code);
  h:= F(d);
  Str(h:3:6, h_s);
edt2.Text:=h_s;
end;

end.

Последний раз редактировалось useryur; 25.02.2017 в 19:51.
useryur вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Математические формулы в PHP kutt PHP 2 01.09.2008 23:33
Математические пакеты yudjin Общие вопросы Delphi 0 03.05.2008 09:02
Формулы SunKnight Общие вопросы Delphi 2 07.04.2008 09:38