Для расчетов на профессиональном уровне наиболее часто используются средства из группы методов РУНГЕ-КУТТА. Для большинства задач наиболее оптимальным из этой группы является метод Рунге-Кутта четвертого порядка, который достаточно прост в реализации, имеет высокую точность и хорошую устойчивость. Мы по-прежнему рассматриваем дифференциальное уравнение первого порядка y'=f(x,y) с начальным условием y(x0)=y0. Для решения выбирается достаточно малый постоянный шаг изменения независимой переменной h так, что очередное значение xi есть xi-1+h=x0+ih, где i=1,2,3,.... Очередное значение искомой функции определяется из предыдущего по формуле:
где коэффициенты k на каждом шаге определяются через значения функции f(x,y) при определенных значениях аргументов:
Можно видеть, что на каждом шаге сначала вычисляются коэффициенты в той последовательности, в которой они указаны (поскольку они вычисляются один через другой), а затем определяется очередное значение функции.
Программный код:
procedure TForm1.Button3Click(Sender: TObject);
var
x,y,h,k1,k2,k3,k4:real;
i,n:integer;
begin
n:=strtoint(edit1.Text);
h:=1/n;
x:=0;
y:=1;
paintbox1.Canvas.Pen.Color:=clgreen;
paintbox1.Canvas.moveto(c.x+round(x*f.x),c.Y-10-round(y*f.y));
for i:=1 to n do
begin
k1:=x*y*h;
k2:=((x+h/2)*(y+k1/2))*h;
k3:=((x+h/2)*(y+k2/2))*h;
k4:=((x+h)*(y+k3))*h;
x:=x+h;
y:=y+(k1+k4+2*(k2+k3))/6;
paintbox1.Canvas.lineto(c.x+round(x*f.x),c.Y-10-round(y*f.y));
end;
end;
Если у кого то Delphi ниже 7-й версии, то удалите в исходнике слово XPMan в разделе Uses, и строчку XPManifest1: TXPManifest; в разделе type.

При этом нетрудно убедится, что из дифференциального уравнения следует:



Для вычисления интеграла с заданной точностью можно начать, например, с n=2 и далее действовать аналогично методу трапеций, удваивать число разбиений.
Метод применим, если пределы интегрирования конечны, а подынтегральная функция не имеет особенностей, хотя несложная предварительная процедура деления интервала интегрирования на несколько частей позволяет применить эту методику и к интегрированию функции, имеющей конечное число разрывов первого рода. В методе трапеций интервал [a,b] разбивается на n элементарных отрезков длиной





Рис. 1.6. Различные варианты в методе хорд
, то
Дальнейшее построение алгоритма зависит от соотношения знаков первой и второй производных. Если знаки производных различны - левая часть рисунка 1.6, то новым правым концом интервала поиска корня становится точка m, то есть делается замена b на m. В противном случае, соответствующем двум вариантам правой части рисунка 1.6, делается замена на m. Итерационный процесс продолжается до достижения необходимой точности.
Неприятность может произойти, если корнем уравнения является 0, однако это уже совсем особый случай, который рассматриваться не будет.
, делящая отрезок [a,b], на котором ищется корень, пополам. Еще раз напомним, что корень на этом отрезке обязан быть. Далее, из этих двух половин выбирается та, на концах которой функция имеет разные знаки, то есть та, на которой имеется корень. Если эта половина является отрезком [c,b], как на нашем рисунке, то новым левым концом отрезка становится точка с. В противном случае точка с становится новым правым концом отрезка. Таким образом, после каждого такого выбора мы имеем новый отрезок [a,b], к которому снова применяем половинное деление. В этом методе наиболее наглядно выглядит условие выхода из цикла
А почему мы здесь обошлись без знака абсолютного значения? Автор надеется, что читатель сможет дать ответ на этот вопрос самостоятельно.