Załóżmy, że mamy funkcję $ u $ zdefiniowaną w kuli w sposób dyskretny: znamy tylko wartości $ u $ w węzłach $ (i, j, k) $ siatki sferycznej, gdzie $ i $ jest współrzędną promienia, $ j $ jest współrzędną kąta $ \ varphi $, $ k $ jest współrzędną kąta $ \ psi $ .
Rozważmy funkcję wektorową $$ \ nabla u_ {i, j, k} = \ left (\ frac {\ częściowe u} {\ częściowe r} _ {i, j, k}, \ frac {1} {r_i \ sin \ psi_k} \ frac {\ częściowy u} {\ części \ varphi} _ {i, j, k}, \ frac {1} {r_i} \ frac {\ częściowy u} {\ częściowe \ psi} _ {i, j, k} \ right) – $$ gradient $ u $.
Muszę znać wartości $ \ nabla u_ {i, j, k} $ na osi z we współrzędnych kartezjańskich, co odpowiada $ \ psi = 0 $ – oś we współrzędnych sferycznych, ale nie możemy użyć powyższego wzoru, ponieważ w przypadku $ \ psi = 0 $ drugi człon zamienia się w nieskończoność.
Właściwie możemy znaleźć wartości $ \ frac {\ częściowe u} {\ częściowe z} $ za pomocą wzoru na pochodną numeryczną, ale mamy problem ze znalezieniem $ \ frac {\ częściowe u} {\ częściowe x} $, $ \ frac {\ częściowe u} {\ częściowe y} $, ponieważ siatka nie jest prostokątna. Czy możesz mi w tym pomóc i doradzić, co mam zrobić?
Komentarze
- Czy nie mógłbyś obliczyć pochodnej liczbowej w $ (r, \ varphi, \ psi) $ układ współrzędnych? To powinno dać ci wektor, który możesz następnie rzutować na $ x $ – $ y $ – i $ z $ -oski, aby otrzymać $ x $ – $ y $ – i $ z $ -składniki gradientu
- Nie, nie możemy obliczyć pochodnej liczbowej, ponieważ dla $ \ psi = 0 $ $ \ varphi $ -angle nie jest zdefiniowane, a we wzorze mamy osobliwość.
- Prawdopodobnie jest rozwiązanie używając kwaternionów, ale trudno jest dowiedzieć się, jak to dokładnie wygląda wrt. Twoje nazewnictwo. Efekt, z którym próbujesz zwalczyć, jest powszechnie nazywany " gimbal-lock "
- Znalazłem jeden wariant, aby poprawnie sobie z tym poradzić: tutaj możemy użyć metody najmniejszych kwadratów do rekonstrukcji gradientu, ale nie znalazłem dokładnego wyjaśnienia, jak go używać
- Może tak jest ' – w przypadku umiarkowanie grzecznego $ u $$ – że $ \ lim _ {\ psi \ to 0} \ frac {1} {\ sin \ psi} \ frac {\ Part u} {\ Part \ phi} = 0 $. Ale nie ' nie sądzę, że środkowa składowa twojego wektora ma znaczenie, więc jeśli ' ponownie podłączasz to do równania różniczkowego w języku biegunowym współrzędnych równanie różniczkowe może również nie nadawać wagi środkowej współrzędnej.
Odpowiedź
Istnieją 3 sposoby uniknąć takiej sytuacji, ale przed użyciem należy sprawdzić, czy ten sposób jest odpowiedni ze względu na błąd obliczeniowy:
1) Metoda komórkowa Green-Gaussa: tutaj używana jest definicja gradientu:
$$ \ nabla u_i \ ok \ frac {1} {V_ {i}} \ int \ limits _ {\ częściowe V_i} ud \ overline {S} \ ok \ sum \ limits_ {k = 1} ^ {n} {u_ {f_k} S_k \ overline {n} _k}, $$ gdzie $ k $ – liczba sąsiadów komórki $ V_ {i} $
2) Metoda najmniejszych kwadratów: błąd
$$ \ sum \ limits_ {k = 1} ^ {n} {\ frac {1} {d_ {ik}} E_ {i, k} ^ {2}}, E_ {i, k} = \ nabla u_i \ cdot \ Delta r_ {i, k} + u_i-u_k $$ należy zminimalizować, stąd otrzymujemy składowe $ \ nabla u_i $
3) Metoda interpolacji. Wartość gradientu jest interpolowana z wartości gradientowej funkcji wektorowej.