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
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.