Cześć wszystkim. Prosiłbym wszystkich o pomoc w rozwiązaniu tej całki kwadraturami Gaussa-Hermite'a.
Chciałbym się dowiedzieć jak się je rozwiązuje a nie ma w necie za bardzo przykładów tylko sucha teoria:
\(\displaystyle{ \int_{-5}^{5} e^{-x ^{2}}(1-x) dx}\)
prosiłbym również o komentarze przy rozwiązaniu:P
wiem że sporo wymagam ale liczę że znajdzie się ktoś kto mi pomoże szczególnie że znam zagadnienie ale nie na tyle żebym umiał rozwiązać takie zadanie...
Kwadratura Gaussa-Hermite
-
- Użytkownik
- Posty: 5
- Rejestracja: 20 lis 2009, o 20:11
- Płeć: Mężczyzna
- Lokalizacja: Na fotelu
- Vigl
- Użytkownik
- Posty: 283
- Rejestracja: 28 wrz 2007, o 12:19
- Płeć: Mężczyzna
- Lokalizacja: Krosno/Kraków
- Podziękował: 13 razy
- Pomógł: 67 razy
Kwadratura Gaussa-Hermite
\(\displaystyle{ \int_{-5}^5e^{-x^2}(1-x)dx=\Sigma_{j=1}^n w_je^{-x_j^2}(1-x_j)}\),
gdzie węzły kwadratury \(\displaystyle{ x_j}\) to kolejne zera wielomianu Hermite'a. Ciężko tu dodać coś więcej jeżeli chodzi o teorię. Rozwiązanie to już inna sprawa. Schemat jest banalny - znajdź zera w. Hermite'a oraz współczynniki \(\displaystyle{ w_j}\) w zadanym przedziale oraz przy określonej liczbie podziałów n i podstaw. Z kolei techniczne wykonanie niekoniecznie już jest tak trywialne, a na pewno czasochłonne.
Jeżeli chcesz to scałkować w ten sposób, to najlepszym rozwiązaniem będzie użycie gotowej procedury numerycznej (e.g. numerical recipes C (or fortran), subroutine gauher).
gdzie węzły kwadratury \(\displaystyle{ x_j}\) to kolejne zera wielomianu Hermite'a. Ciężko tu dodać coś więcej jeżeli chodzi o teorię. Rozwiązanie to już inna sprawa. Schemat jest banalny - znajdź zera w. Hermite'a oraz współczynniki \(\displaystyle{ w_j}\) w zadanym przedziale oraz przy określonej liczbie podziałów n i podstaw. Z kolei techniczne wykonanie niekoniecznie już jest tak trywialne, a na pewno czasochłonne.
Jeżeli chcesz to scałkować w ten sposób, to najlepszym rozwiązaniem będzie użycie gotowej procedury numerycznej (e.g. numerical recipes C (or fortran), subroutine gauher).
-
- Użytkownik
- Posty: 5
- Rejestracja: 20 lis 2009, o 20:11
- Płeć: Mężczyzna
- Lokalizacja: Na fotelu
Kwadratura Gaussa-Hermite
a czy nie jest to tak że:Vigl pisze:\(\displaystyle{ \int_{-5}^5e^{-x^2}(1-x)dx=\Sigma_{j=1}^n w_je^{-x_j^2}(1-x_j)}\)
\(\displaystyle{ \int_{-5}^5e^{-x^2}(1-x)dx=\Sigma_{j=1}^n w_j(1-x_j)}\)
gdzie,
\(\displaystyle{ w_j=e^{-x_j^2}}\)
bo to wyrażenie to właśnie ta waga chyba...
ja mam problem jak tą całkę ograniczyć do jakiegoś przedziału, (tutaj -5,5)
no właśnie ja chcę napisać to w cpp ale muszę poznać dokładnie metodę jak działa na zadanym przedzialeVigl pisze:Jeżeli chcesz to scałkować w ten sposób, to najlepszym rozwiązaniem będzie użycie gotowej procedury numerycznej (e.g. numerical recipes C (or fortran), subroutine gauher).
i do tego potrzebuje rozwiązania chociaż jednego przykładu
- Vigl
- Użytkownik
- Posty: 283
- Rejestracja: 28 wrz 2007, o 12:19
- Płeć: Mężczyzna
- Lokalizacja: Krosno/Kraków
- Podziękował: 13 razy
- Pomógł: 67 razy
Kwadratura Gaussa-Hermite
No właśnie z w_j jest kłopotliwa sprawa, bo:lubiemisia pisze:a czy nie jest to tak że:Vigl pisze:\(\displaystyle{ \int_{-5}^5e^{-x^2}(1-x)dx=\Sigma_{j=1}^n w_je^{-x_j^2}(1-x_j)}\)
\(\displaystyle{ \int_{-5}^5e^{-x^2}(1-x)dx=\Sigma_{j=1}^n w_j(1-x_j)}\)
gdzie,
\(\displaystyle{ w_j=e^{-x_j^2}}\)
bo to wyrażenie to właśnie ta waga chyba...
\(\displaystyle{ \int f(x)dx=\int p(x)q(x)dx=\Sigma w_jf(x_j),}\)
gdzie wagą jest \(\displaystyle{ p(x)=e^{-x^2}}\). To nam mówi, jak rozłożyć nasze \(\displaystyle{ f(x)}\), jednak nie mówi o współczynnikach \(\displaystyle{ w_j}\). Też wcześniej myślałem, że w_j to ta sama waga co p(x), jednak nie jest tak do końca. W zasadzie jest to logiczne, gdyż \(\displaystyle{ w_j}\) pojawia się dopiero w sumie, będącej przybliżeniem całki i odpowiada szerokości danego podprzedziału całkowania \(\displaystyle{ \Delta x}\).
(Analogicznie do wzoru Riemanna: l\(\displaystyle{ im_{n-->\infty}\Sigma_{i=1}^n f(x_i)\Delta x_i=\int f(x)dx}\) - \(\displaystyle{ w_j}\) odpowiada \(\displaystyle{ \Delta x_i}\), brak jedynie przejścia granicznego, ale w końcu to metody numeryczne .) Jak z kolei \(\displaystyle{ w_j}\) wyznaczyć - nie wiem. Na pewno jest zależne od n i od zer w. Hermite'a, jednak nie wiem jaka to zależność.
Jeśli chcesz, to do następnego postu mogę dodać procedurę gauher w C, żebyś mógł zobaczyć jak ona wygląda i samodzielnie przeanalizować co i jak.
-
- Użytkownik
- Posty: 5
- Rejestracja: 20 lis 2009, o 20:11
- Płeć: Mężczyzna
- Lokalizacja: Na fotelu
Kwadratura Gaussa-Hermite
oki.. jak możesz to podaj mi ten fragment kodu w c to może się domyśle :]
-- 22 lis 2009, o 16:45 --odświeżam, jeśli ma ktoś jeszcze jakieś pomysły jak to rozwiązać to chętnie zapraszam:)
-- 22 lis 2009, o 16:45 --odświeżam, jeśli ma ktoś jeszcze jakieś pomysły jak to rozwiązać to chętnie zapraszam:)
- Vigl
- Użytkownik
- Posty: 283
- Rejestracja: 28 wrz 2007, o 12:19
- Płeć: Mężczyzna
- Lokalizacja: Krosno/Kraków
- Podziękował: 13 razy
- Pomógł: 67 razy
Kwadratura Gaussa-Hermite
Proszę
Oczywiście to sucha procedura. Do niej musisz sobie napisać banalny sterownik, w którym zdefiniujesz funkcję jaką chcesz całkować i wywołasz dla niej gauher-a.
Kod: Zaznacz cały
#include <math.h>
#define EPS 3.0e-14
#define PIM4 0.7511255444649425
#define MAXIT 10
void gauher(float x[], float w[], int n)
{
void nrerror(char error_text[]);
int i,its,j,m;
double p1,p2,p3,pp,z,z1;
m=(n+1)/2;
for (i=1;i<=m;i++) {
if (i == 1) {
z=sqrt((double)(2*n+1))-1.85575*pow((double)(2*n+1),-0.16667);
} else if (i == 2) {
z -= 1.14*pow((double)n,0.426)/z;
} else if (i == 3) {
z=1.86*z-0.86*x[1];
} else if (i == 4) {
z=1.91*z-0.91*x[2];
} else {
z=2.0*z-x[i-2];
}
for (its=1;its<=MAXIT;its++) {
p1=PIM4;
p2=0.0;
for (j=1;j<=n;j++) {
p3=p2;
p2=p1;
p1=z*sqrt(2.0/j)*p2-sqrt(((double)(j-1))/j)*p3;
}
pp=sqrt((double)2*n)*p2;
z1=z;
z=z1-p1/pp;
if (fabs(z-z1) <= EPS) break;
}
if (its > MAXIT) nrerror("too many iterations in gauher");
x[i]=z;
x[n+1-i] = -z;
w[i]=2.0/(pp*pp);
w[n+1-i]=w[i];
}
}
#undef EPS
#undef PIM4
#undef MAXIT
/* (C) Copr. 1986-92 Numerical Recipes Software 7&X*. */