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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.08.2010, 02:10   #1
involved
 
Регистрация: 07.08.2010
Сообщений: 8
По умолчанию интересное явление...

если сделать простую на паскале прогу вычисляющую интегралы методом трапеций и менять ширину промежутка (dx) то можно увидеть что погрешность изменяется по какомуто неведомому закону. можно конечно сослатся на то что это дескать результат того что отрезок интегрирования делится на dx c разными остатками. но пардон погрешность меняется слишком сильно. функция f интегрируемая
ist - точное значение alfa относит.погрешность вычисления. а если вместо трапеций использовать метод Симпсона то погрешность будет скакать от порядка Е-10 до Е2 примерно.

program integral;
uses crt;
var
a,summa,summa1,b,dx,S,x,m,c,delta,p ,u: real;
n,i,k:longint;

function f(x:real):real;
begin
f:=cos(x);
end;

function ist(a:real;b:real):real;
begin
ist:= sin(B)-sin(a);
end;

function alfa (is:real;q:real):real;
begin
alfa:=abs((abs(q-is))/is)*100;
end;

procedure trapetsium (a:real;b:real;dx:real);
var i,n:longint;
begin
summa:=0;
n:=round(abs(b-a)/dx);
for i:=1 to n-1 do begin
summa:=summa+f(a+i*dx);
end;{ if (a+n*dx)<>b then writeln( (a+n*dx),b );}
S:=0.5*dx*(f(a)+f(B)+2*summa);
writeln('trarezium ',S);
end;

begin clrscr;
write('a=');readln(a);
write('b=');readln(B);

writeln('dx=',dx);
c:=1000; k:=0;
while dx>0.0001 do begin
trapetsium (a,b,dx);
writeln(alfa(ist(a,B),S),'----dx=',dx);
if alfa(ist(a,B),S)<c then begin c:=alfa(ist(a,B),S); m:=dx; end;
dx:=dx-0.0001; inc(k)
end;

writeln;
writeln('grex=',c);writeln('dx=',m) ;write(k);
write(ist(a,B));
readln;
end.
involved вне форума Ответить с цитированием
Старый 07.08.2010, 17:00   #2
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Не понимаю, о каком неведомом законе для метода трапеций идет речь. Вашу программу не запускал и ничего не проверял, но неведомый закон для метода трапеций можно найти даже в википедии. А вот на остатки точно не сослаться, для этого нужно, чтобы функция либо очень сильно возрастала, либо очень сильно убывала. У вас такого не наблюдается. Погрешность может меняться сильно. Главное, чтобы она не превосходила рассчётную максимальную погрешность.
Пардон, а почему это она для метода Симпсона не может скакать в таких пределах? Неплохо было бы ещё увидеть на каких промежутках вы интегрируете её, от этого, знаете ли, существенно зависит возможная погрешность.
mMAg вне форума Ответить с цитированием
Старый 07.08.2010, 17:55   #3
involved
 
Регистрация: 07.08.2010
Сообщений: 8
По умолчанию

если менять промежутки то можно увидеть что если промежуток меньше чем полупериод косинуса то погрешность минимальная. в остальных случаях чем ближе dx к abs(в-а) тем больше точность. причем dx должен всегда иметь порядок Е-2..Е-3 поэтому его надо поделить на некоторое число кратное 10.иначе точность упадет резко.
involved вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
интересное перемещение в таблице Окоча Юра Microsoft Office Word 1 14.01.2010 15:47
интересное ниспадающее меню greysells HTML и CSS 4 09.07.2009 16:44
Явление Wordа. Часть 2 Busine2009 Microsoft Office Word 2 26.05.2009 21:44
Явление Worda Busine2009 Microsoft Office Word 2 26.05.2009 08:53