Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.04.17;
Скачать: [xml.tar.bz2];

Вниз

Как вычислить в Дельфи интеграл?   Найти похожие ветки 

 
Dimodim   (2003-03-29 08:51) [0]

Как вычислить в Дельфи интеграл


 
hooch   (2003-03-29 08:59) [1]

Что бы в Делфи вычислить интеграл, нужно на Делфи написать программу которая его и вычислит :-)


 
Strumpf   (2003-03-29 09:15) [2]

Метод трапеций, Симпсона, адаптивные методы, Корн и Корн "Справочник по математике для..."


 
nikus   (2003-03-29 09:17) [3]

Есть две формулы для вычисления интеграла (работает и не только на Дельфи :). Итак,

1) формула трапеций:
I1=h*[f(a)/2+f(a+h)+f(a+2h)+... +f(a+(n-1)h)+f(b)/2]

2) фоpмула Симпсона:
I2=h/3*(f(a)+f(b)+
4*(f(a+h)+f(a+3h)+...+f(a+(n-1)h))+
2*(f(a+2h)+f(a+4h)+...+f(a+(n-2)h)));

Где
a и b - от чего до чего посчитать (точное название не помню, помнится в школе мы вычисляли площадь фигуры от a до b по оси OX)
h=(b-a)/n, - одна "ступенька"
n=100 - число ступенек (чем больше, тем точне, но дольше считаться будет).
Графически это выглядит так: чтобы посчитать площадь фигуры, ограниченной графиком f(x) и вертикальными ассимптотами в точках a и b (а эта площадь и есть интеграл :), нужно "разбить" фигуру на много маленьких прямоугольников, и сложить площади каждого из них. Площадь каждого из них будет f(a + x) * dx, то есть ширина прямоугольника (dx) на его длину (f(a + x)).


 
Marser   (2003-03-29 13:55) [4]

Можно(и даже эффективнее) с помощью разложения в ряд.Всё зависит от подготовки.


 
Tano   (2003-03-29 19:07) [5]

Есть Метод Симпсона на паскале, но перевести в Delphi - секунда дела (сам недавно ето сдал очень придирчивому преподу на "Методах вычислений").
Устроит - пиши на mail, вышлю в ответ.


 
Tano   (2003-03-29 19:09) [6]

ЗЫ там коментариев больше, чем кода, погрешность метода оценивается по правилу Рунге.


 
был где то рядом   (2003-03-29 22:46) [7]

А как же забытые методы правых, средних и левых прямоугольников?!?

ЗЫ и еще к ним нужны методы уточнений результатов..


 
Alex44   (2003-03-30 20:24) [8]

Vychislyaite integral v Maple. On v Rossii za $2 prodaetsya...


 
Stranger   (2003-04-01 12:07) [9]

пусть необходимо вычислить интеграл от a до b интегрируемой на данном участке функции f(x).
Способ самый простой (метод "левых" прямоугольников):
вычисляем шаг интегрирования h = (b-a)/N
далее находим сумму ш = 0 .. N-1, SInt = f(a+i*h)*h
и так по всем отрезкам

Погрешнось метода для гладких функций при значительном числе итераций (разбиений) не велика


 
passm   (2003-04-01 12:08) [10]

Malpe, однако ;)


 
D   (2003-04-01 12:24) [11]

{----------------------------------------------------------}
function INTEG(const A,B:real;eps:real):real;
{ Функция вычисления интеграла от f на отрезке [A,B] c точностью eps методом трапеций . Для выбора шага применяется двойной пересчёт . }
var INT,X,eps_d,I1,I2:real; { eps_d - достигнутая точность . }
j:word;
begin INT:=0; { В INT - значение интеграла . }
h:=(b-a)/4;{ Начальное значение шага . }
eps:=eps/4;{Точность для каждого из 4-х равных отрезков интегрирования}
X:=A; { Х - начало текущего подотрезка . }
while X<B do
begin repeat I1:=(f(X)+f(X+h))*h/r ;{I1-значение инт-ла с шагом h . }
h:=h/r;{ Уменьшаем шаг , }
I2:=I1/r ;{ вычисляем интеграл с меньшим шагом . }
for j:=1 to r-1 do I2:=I2+h*f(X+j*h) ;
eps_d:=(I2-I1)/(exp(p*ln(r)-1));
eps_d:=abs(eps_d); { Определяем достигнутую точность. }
eps:=eps/r
{ Пока не будет достигнута требуемая точность на данном подотрезке}
until eps_d<=eps*r;
{ При переходе к следующему отрезку пробуем увеличить шаг }
h:=h*r;
eps:=eps*r;{Вычисляем точность для нового подотрезка }
INT:=INT+I2 ;
X:=X+h { Переходим к новому подотрезку }
end;
INTEG:=INT
end;


 
Vlad Oshin   (2003-04-01 12:49) [12]


А вот в символьном виде кто возмется? :)


 
Думкин   (2003-04-01 12:53) [13]


> Vlad Oshin © (01.04.03 12:49)

Со 100% предоплатой, без гарантий - я.


 
Vlad Oshin   (2003-04-01 12:57) [14]


> Думкин © (01.04.03 12:53)

Со 100% гарантией - не сделаешь :)



 
Думкин   (2003-04-01 12:57) [15]


> Vlad Oshin © (01.04.03 12:57)

И пофиг. Я ж условия выставил.


 
D   (2003-04-01 13:02) [16]

вычисление определенного интеграла методом трапеций

Исходные данные :
- интегрируемая функция F(X) ;
- отрезок интегрирования [A,B] ( где A<=B ) ;
- требуемая точность eps вычисления интеграла ;
- p=3 - порядок точности формулы трапеций ;
- r=2 - константа для пересчёта шага по методу Рунге ;
- h=(B-A)/4 - начальный шаг интегрирования ;

К р а т к и й а л г о р и т м .

1) Начало текущего подотрезка интегрирования X:=A ;
вычисляемое значение интеграла INTEG:=0 ;
точность на первом подотрезке eps:=eps/4 .

2) Если начало текущего подотрезка X<=B - левого предела интегрирования, то перейти к п.10 .

3) Найти значение интеграла I1 на подотрезке [x,x+h] с шагом h.

4) Уменьшить шаг h:=h/r и вычислить значение интеграла I2 с новым шагом на том же подотрезке .
|I2-I1|
5) Определить достигнутую точность : eps_d:= -------- .
r - 1

6) Если eps_d>eps, то уменьшить в r раз точность ( для вычисления интеграла на подотрезке с меньшим правым концом ) : eps:=eps/r ,
перейти к п.3.
Иначе - требуемая точность на текущем подотрезке достигнута .

7) При переходе к следующему подотрезку интегрирования попробовать увеличить шаг и соответственно изменить точность: h:=h*r; eps:=eps*r.

8) Добавить новое слагаемое к обобщённой формуле интеграла:
INTEG:=INTEG+I2 .

9) Изменить подотрезок интегрирования (увеличить левый конец) : x:=x+h ,
перейти к п.2 .

10) Конец, приближённое значение интеграла равно INTEG .


 
Думкин   (2003-04-01 13:04) [17]

Считать хорошо по Гауссу.


 
Vlad Oshin   (2003-04-01 13:07) [18]


> Думкин © (01.04.03 12:57)


:)
дело в том, что существуют функции от которых нельзя вычислить первообразную.
Были интересные алгоритмы, обрабатывающие таблицы Карсона, Двайта и проч., но не более
Интересовался после того, как препод нам предложил написать такую программу за полное освобождение от всех его экзаменов


 
Думкин   (2003-04-01 13:09) [19]


> Vlad Oshin © (01.04.03 13:07)

Дык я с 10 лет в курсе.
Потому и условия такие выставил. А заказчик? - его проблемы. %-)



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.04.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.007 c
7-54909
ScaliaR
2003-02-22 02:27
2003.04.17
программирование сервиса для w2k


1-54601
diww
2003-04-07 17:00
2003.04.17
как узнать тип ошибки?


7-54935
Dmitriy_R
2003-02-21 10:06
2003.04.17
Определить режим работы LPT порта.


14-54857
kravchuk
2003-04-01 18:26
2003.04.17
compiler magic


1-54639
tovSuhov
2003-04-08 11:40
2003.04.17
Перехват сворачивания окна





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский