Obliczenia numeryczne. Całkowanie

 W pracach naukowców, konstruktorów i technologów często występuje konieczność obliczania wielu wielkości za pomocą skomplikowanych zależności. Tzw. obliczenia numeryczne polegały będą na obliczaniu wielkości zdefiniowanych za pomocą zależności matematycznych przy pomocy komputera. Problemy numeryczne można rozwiązywać różnymi metodami. Stosując różne algorytmy można obliczać te zależności szybciej lub wolniej i dawać mogą one wyniki mniej lub bardziej dokładne. Nie ma problemu jeśli posługujemy się liczbami całkowitymi, które w komputerze pamiętane są dokładnie. Dużą niedogodnością natomiast jest sposób pamiętania liczb rzeczywistych, które pamiętane są tylko na 6 bajtach i dlatego niedokładnie (jak np. zapamiętać liczbę pi ?). Liczby rzeczywiste po prostu zaokrągla się i pamiętane są z określoną dokładnością, a to powoduje błędy przy dokładnych obliczeniach. Innym problemem jest kumulowanie błędów. Przy wielokrotnym powtarzaniu tych samych operacji na liczbach zmiennoprzecinkowych (rzeczywistych), zwłaszcza przy dodawaniu i odejmowaniu, sumowanie błędów powoduje zniekształcanie wyników obliczeń. Przedstawia to poniższy program:

suma:=0; r:=1.1;
for i:= 1 to ile do suma:=suma+r;
writeln(suma/ile);

Zsumowanie dużą ilość razy tej samej liczby rzeczywistej (1,1) i podzielenie jej przez ilość sumować powinno teoretycznie dać tą samą liczbę. Kumulowanie się błędów powstałych z zaokrąglania liczb rzeczywistych powoduje, że wyniki przy dużych ilościach są różne. Dla r=1,1  i  ile=10  wynik wynosi 1,1   dla ile=1000 wynik wynosi  1,0999999 !

Całkowanie numeryczne

 (obliczanie pól powierzchni, objętości, długości linii ograniczonych krzywą). Na przykład obliczanie pola powierzchni polega na podzieleniu obszaru pod krzywą na niewielkie fragmenty (np. trapezy), dla których łatwo wyliczyć pole powierzchni, im więcej trapezów tym dokładniejszy wynik) i zsumowaniu ich. Jest to tzw. całkowanie numeryczne. Dla niektórych funkcji  łatwo jest wyliczyć objętość, czy pole powierzchni za pomocą teoretycznego wyliczenia wyniku - całkowania funkcji opisujących te figury (kwadrat, kula itp.), ale skomplikowane funkcje nie są możliwe do rozwiązania metodami teoretycznymi. Dlatego też całkowanie numeryczne ma ogromne znaczenie w wielu dziedzinach nauki i techniki.

 

program CalkowanieTrapezowe;

function trapez(a,b,h:real):real;
begin
  trapez:=(a+b)*h/2;
end;

function funkcja(x:real):real;
begin
  funkcja:=x;
end;

function calka(poc,kon:real;ile:longint):real;
var
  xpoc,
  xkon,
  ypoc,
  ykon,
  pole,
  wys:real;
  i:longint;
begin
  pole:=0;
  wys:=(kon-poc)/ile;
  for i:=1 to ile do
  begin
    xpoc:=poc+(i-1)*wys;
    ypoc:=funkcja(xpoc);
    xkon:=xpoc+wys;
    ykon:=funkcja(xkon);
    pole:=pole+trapez(ypoc,ykon,wys);
  end;
  calka:=pole;
end;

var
  p,k:real;
  i:longint;

begin
  writeln('Obliczamy pole całki');
  write('Podaj początek :');
  readln(p);
  write('Podaj koniec   :');
  readln(k);
  write('Ile trapezów:');
  readln(i);
  writeln('Pole całki   :',calka(p,k,i):0:5);
  readln;
end.