Calka splotu

0

Mam wielki problem, na zaliczenie mam napisac program w C/C++ obliczajacy calke splotu. Nie mam pojecia jak to zrobic i bede wdzieczna za jakakolwiek podobowiedz, pozdrawiam.

0

Ech... Dawno to bylo, ale z tego co pamietam, to calke splotu liczylo sie jakos tak:

h(t) =

+inf
(
) f(t) g(u - t) du

  • inf

Policzyc cos takiego numerycznie w przedziale (-inf, +inf) sie nie da. Ale jesli masz dwie funkjce ktora sa niezerowa tylko w jakims przedziale, to mozna probowac calkowac tylko w tym przedziale. Przyklad kodu (najprostsza metoda, malo dokladna):

double f[10000];   // pierwsza funkcja zapisana cyfrowo w tablicy
double g[10000];  // druga funkcja zapisana cyfrowo
double h[10000];  // wynik

// ... tu trzeba wypelnic tablice g i h.
// ...

for (int t = 0; t < 10000; t++)
  h[t] = 0.0;

for (int u = 0; u < 20000; u++)
  for (int t = 0; t < 10000; t++) 
  {
     if (u - t > 0 && u - t < 10000)
       h[t] += f[t] * g[u - t];
  }
 

Inna metoda (taka jaka sie naprawde stosuje) to poprzez transformate Fouriera, ze wzoru Borela:

h(t) = f(t) splot g(t) = F^-1 { F[f(t)] * F[g(t)] }

gdzie F^-1 to transformata odwrotna, a F to transformata zwykla. * (gwiazdka) to w tym wzorze MNOZENIE. Do liczenia transformaty Fouriera sa na necie biblioteki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1