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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2012, 01:16   #1
rqz
Новичок
Джуниор
 
Регистрация: 02.04.2012
Сообщений: 1
По умолчанию Решение интегралов с заданной точностью

Задача посчитать 2 интеграла с заданной точностью( 0.001 и 0.0001).
интеграл от 0,2 до 1 с подынтегральной функцией (sin(0.8*x*x+0.3))/(0.7+cos(1.2*x+0.3))
второй интеграл от 1,4 до 3 с подынтегральной функцией
x*x*(lg10)





мой код:

Код:

program Laba_8_bez;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  Tfunc = function (x:currency):currency;
  Tmeth = function (b,a,t:currency;const f) : currency;


function f1(x:currency):currency;                                               //ïåðâàÿ ïîäûíòåãðàëüíàÿ ôóíêöèÿ
  begin
    f1:=(sin(0.8*sqr(x)+0.3))/(0.7+cos(1.2*x+0.3));
  end;

function f2(x:currency):currency;                                               //âòîðàÿ ïîäûíòåãðàëüíàÿ ôóíêöèÿ
  begin
    f2:=sqr(x)*(ln(x)/ln(10));
  end;

function l_pr(b,a,t:currency;const f: Tfunc) : currency;                                      //ìåòîä ëåâûõ ïðÿìîóãîëüíèêîâ
  var h,integr,integr0,sum,xi:currency;
      n,i:integer;
  begin
    integr:=f{unc}(a)*(b-a);
    n:=5;
    repeat
      integr0:=integr;
      h:=(b-a)/n;
      sum:=0; i:=0;
      while i<=n-1 do
      begin
        xi:=a+i*h;
        sum:=sum+f{unc}(xi);
        inc(i);
      end;
      integr:=h*sum;
      n:=n+5;
    until abs(Integr-Integr0)<=t;     //write('   ',n);
    l_pr:=integr;
  end;

function trap(b,a,t:currency;const f: Tfunc) : currency;                               //ìåòîä òðàïåöèè
  var h,integr,integr0,sum,xi:currency;
      n,i:integer;
  begin
    integr:=f{unc}(a)*(b-a);
    n:=5;
    repeat
      integr0:=integr;
      h:=(b-a)/n;
      sum:=0; i:=0;
      while i<=n-1 do
      begin
        xi:=a+i*h+h/2;
        sum:=sum+f{unc}(xi);
        inc(i);
      end;
      integr:=h*sum;
      n:=n+5;
    until abs(Integr-Integr0)<=t; //write('   ',n);
    trap:=integr;
  end;

{function method (met : tmeth; fun : tfunc; b,a,t:currency):currency;
  begin
    method:=met(b,a,t,fun);
  end;}

begin
  write(#201#205#205#205#205#205#203#205#205#205#205#205#205#205#205#205#205);       // øàïêà òàáëèöû è ïîñëåäóþùåå çàïîëíåíèå
  write(#205#205#205#205#205#203#205#205#205#205#205#205#205#205#205#205#205);
  write(#205#205#205#205#203#205#205#205#205#205#205#205#205#205#205#205#205);
  write(#205#205#205#203#205#205#205#205#205#205#205#205#205#205#205);
  writeln(#205#205#205#205#187);
  writeln(#186,' INT ',#186,'LPRYAMOYG 10^-3',#186,' TRAPECIA 10^-3'#186,'LPRYAMOYG 10^-4',#186,' TRAPECIA 10^-4'#186);
  write(#204#205#205#205#205#205#206#205#205#205#205#205#205#205#205#205#205);
  write(#205#205#205#205#205#206#205#205#205#205#205#205#205#205#205#205#205);
  write(#205#205#205#205#206#205#205#205#205#205#205#205#205#205#205#205#205);
  write(#205#205#205#206#205#205#205#205#205#205#205#205#205#205#205);
  writeln(#205#205#205#205#185);
  write(#186,'  1  ',#186,l_pr(1,0.2,0.001,f1):15:6,#186);
  {write(#186,'  1  ',#186,method(l_pr,f1,1,0.2,0.001):15:6,#186);  }
  write(trap(1,0.2,0.001,f1):15:6,#186);
  write(l_pr(1,0.2,0.0001,f1):15:6);
  writeln(#186,trap(1,0.2,0.0001,f1):15:6,#186);
  write(#204#205#205#205#205#205#206#205#205#205#205#205#205#205#205#205#205);
  write(#205#205#205#205#205#206#205#205#205#205#205#205#205#205#205#205#205);
  write(#205#205#205#205#206#205#205#205#205#205#205#205#205#205#205#205#205);
  write(#205#205#205#206#205#205#205#205#205#205#205#205#205#205#205);
  writeln(#205#205#205#205#185);
  write(#186,'  2  ',#186,l_pr(3,1.4,0.001,f2):15:6,#186);
  write(trap(3,1.4,0.001,f2):15:6,#186);
  write(l_pr(3,1.4,0.0001,f2):15:6);
  writeln(#186,trap(3,1.4,0.0001,f2):15:6,#186);
  write(#200#205#205#205#205#205#202#205#205#205#205#205#205#205#205#205#205);
  write(#205#205#205#205#205#202#205#205#205#205#205#205#205#205#205#205#205);
  write(#205#205#205#205#202#205#205#205#205#205#205#205#205#205#205#205#205);
  write(#205#205#205#202#205#205#205#205#205#205#205#205#205#205#205#205#205);
  writeln(#205#205#188);
  ReadLN;
  readln;
end.


программа долго думает на 2-х значениях, когда высчитывает интегралы по методу левых прямоугольников функции с точностью 0,0001 количество итераций сравнительно большое для 1-й функции порядка 3200 второй в 2 раза больше. с чем это может быть связаною

Последний раз редактировалось Stilet; 02.04.2012 в 08:02.
rqz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисления с заданной точностью gessi Паскаль, Turbo Pascal, PascalABC.NET 8 29.10.2014 21:40
Вычисления с заданной точностью Tatyana Kur Помощь студентам 3 20.10.2011 23:35
Решение интегралов на ПАСКАЛЕ 34882 Помощь студентам 4 16.05.2010 20:18
решение интегралов vovaxo Общие вопросы Delphi 4 20.04.2010 23:40
Решение уравнений и интегралов Hottabych Помощь студентам 0 20.04.2010 17:20