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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2008, 21:42   #1
Botanik1987
Пользователь
 
Регистрация: 26.09.2008
Сообщений: 38
По умолчанию Математические формулы в Delphi

есть ли в Delphi функция вычисления определенного интеграла?
например функцию Лапласа из теории вероятностей?
Botanik1987 вне форума Ответить с цитированием
Старый 27.09.2008, 09:58   #2
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

В 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
_Dmitry вне форума Ответить с цитированием
Старый 27.09.2008, 10:11   #3
Botanik1987
Пользователь
 
Регистрация: 26.09.2008
Сообщений: 38
По умолчанию

спс,мне как раз это и нужно былопардон за повтор темы
Botanik1987 вне форума Ответить с цитированием
Старый 28.09.2008, 23:22   #4
Botanik1987
Пользователь
 
Регистрация: 26.09.2008
Сообщений: 38
По умолчанию точность решения

а каким нужно брать точность решения eps?я имею ввиду порядок
Botanik1987 вне форума Ответить с цитированием
Старый 29.09.2008, 16:05   #5
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Цитата:
а каким нужно брать точность решения eps?я имею ввиду порядок
В зависимости от того, сколько верных цифр хотите получить и переменные какого типа используете.
Программисты Borland для величины максимальной точности ввели следующие константы в модуле Math:
Код:
const
  FuzzFactor = 1000;
  ExtendedResolution = 1E-19 * FuzzFactor;
  DoubleResolution   = 1E-15 * FuzzFactor;
  SingleResolution   = 1E-7 * FuzzFactor;
В данном примере использован тип переменных double, поэтому максимальная точность должна быть не более DoubleResolution = 1E-12, но для практических расчетов вполне достаточно и 1E-3.
_Dmitry вне форума Ответить с цитированием
Старый 26.10.2008, 12:57   #6
Botanik1987
Пользователь
 
Регистрация: 26.09.2008
Сообщений: 38
По умолчанию

Искал на форуме численное дифференциирование-не нашёл))
функция задана таблично (известны Y и X),необходимо найти производную этой функции при каждом значении аргумента(шаг изменения аргумента непостоянный)я посчитал по этой формуле : y'(xi)=(y(xi)-y(x(i-1)))/(xi-x(i-1))-прога на Delphi-нормально считает,тока препод сказал,что погрешность слишком большая и нужно выбрать метод поточнее))
Какой метод посоветуете?если можно то напишите формулу для нахождения y'(x)
заранее спасибо
Botanik1987 вне форума Ответить с цитированием
Старый 26.10.2008, 13:49   #7
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Увеличивайте порядок полинома, которым аппроксимируете функцию. Сейчас у вас полином первого порядка (линейная функция). Возьмите полином второго порядка (квадратную параболу).
Например, нужно вычислить первую производную в точке с координатой xi. Проводим через три точки: x(i-1), x(i), x(i+1) квадратную параболу y(x)=ax^2+bx+c. Зная значения функции в этих трёх точках, определяем коэффициенты a,b,c из решения системы трёх уравнений. И находим производную от параболы: y'(xi)=2axi+b.
_Dmitry вне форума Ответить с цитированием
Старый 26.10.2008, 15:27   #8
Botanik1987
Пользователь
 
Регистрация: 26.09.2008
Сообщений: 38
По умолчанию

спс)тока вопросик:а как при i=N посчитать значение функции y=х(i+1) и при i=1 значение функции y=х(i-1),если i:=1 to N?
Botanik1987 вне форума Ответить с цитированием
Старый 27.10.2008, 15:58   #9
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Для вычисления производной в первой точке проводим параболу через первые три точки, для нахождения производной в последней точке проводим параболу через последние три точки и вычисляем.
_Dmitry вне форума Ответить с цитированием
Старый 27.10.2008, 22:54   #10
Botanik1987
Пользователь
 
Регистрация: 26.09.2008
Сообщений: 38
По умолчанию

бррррр....значения какие то вообще ахтунговые получаются))какая то беда с a,b,c....ошибки вроде нет,ща ещё разок пересчитаю)
Botanik1987 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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