Форум: "Потрепаться";
Текущий архив: 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.49 MB
Время: 0.147 c