Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Модификация алгоритма численного дифференцирования




 

Использование центральной разности (6.3) для приближения производной позволяет проводить вычисления с точность порядка :

(6.4)

 

где , а С – произвольная константа. Уменьшая шаг в два раза, получим

 

(6.5)

 

где . Из соотношений (6.4) и (6.5) нетрудно получить, что

 

(6.6)

Таким образом, не проводя лишних вычисления, можно значительно улучшить результат, используя комбинацию величин и . Формула (6.6) имеет порядок точности . Убедитесь в этом самостоятельно, вводя небольшую поправку в только что разработанную подпрограмму и проведя расчеты.

Попробуем разобраться в этом вопросе аналитическим методом, получив другое выражение для комбинационной формулы (6.6). Выполним приближенное вычисление производной с помощью центральных разностей в узлах . Сначала запишем выражение для

где . Разделив текущий интервал пополам, получим выражение для :

 

 

Подставляя эти соотношения в (6.6) нетрудно вывести следующую формулу

 

(6.7)

Эта центральная разность использует значения функций в четырех узлах и имеет порядок точности .

Описанную выше идею комбинирования можно обобщить, записав выражение:

 

, (6.8)

 

где коэффициент .

Составим подпрограмму, заменив переменную массивом q[i,j]:

 

function DifR(x: real; f:fun):real;

function D(x,h:real):real;

begin D:=0.5*(f(x+h)-f(x-h))/h end;

const n=10;

var q:array{1..n,1..n] of real; hm2:real; I,j:integer;

begin

h:=0.1; q[1,1]:=D(x,h); i=1;

repeat

h:=0.5*h; m2:=1;

q[i,1]:=D(x,h); Inc(i);

if (i >=n) then

begin writeln(‘Error!’); Exit end;

for j:=2 to i do

begin m2:=m2*4; q[i,j]:=(m2*q[i.j-1] - q[i-1.j-1])/(m2-1) end;

until abs(q[i.j] - q[i-1.j-1]) < eps;

DifR:= q[i.j]

end;

Результаты вычислений сведем в таблицу:

i h q[i,1] q[i,2] q[i,3] q[i,4]

1 0.10000 2.7228145640

2 0.05000 2.7194145875 2.7182812620

3 0.02500 2.7185649917 2.7182817932 2.7182818286

4 0.01250 2.7183526177 2.7182818263 2.7182818285 2.7182818285

 

Точность результатов, приведенных на диагонали таблицы, не может не радовать пользователя.

 

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных