Antag att vi har en funktion $ u $ definierad i en boll på ett diskret sätt: vi vet bara värdena på $ u $ i noderna $ (i, j, k) $ för sfäriskt rutnät, där $ i $ är en radiekoordinat, $ j $ är en koordinat för vinkel $ \ varphi $, $ k $ är en koordinat för vinkel $ \ psi $ .
Tänk på en vektorfunktion $$ \ nabla u_ {i, j, k} = \ left (\ frac {\ partial u} {\ partial r} _ {i, j, k}, \ frac {1} {r_i \ sin \ psi_k} \ frac {\ partial u} {\ partial \ varphi} _ {i, j, k}, \ frac {1} {r_i} \ frac {\ partial u} {\ partiell \ psi} _ {i, j, k} \ höger) – $$ gradient på $ u $.
Jag behöver veta värdena på $ \ nabla u_ {i, j, k} $ på z-axeln i kartesiska koordinater, vilket motsvarar $ \ psi = 0 $ – axel i sfäriska koordinater, men vi kan inte använda formeln ovan, för om $ \ psi = 0 $ blir den andra termen oändlig.
Egentligen kan vi hitta värdena $ \ frac {\ partial u} {\ partial z} $ med hjälp av formeln för numeriska derivat, men vi har problem med att hitta $ \ frac {\ delvis u} {\ partial x} $, $ \ frac {\ partial u} {\ partial y} $, eftersom rutnätet inte är rektangulärt. Kan du hjälpa mig med de här sakerna och ge mig råd om vad jag ska göra?
Kommentarer
- Kunde du inte beräkna det numeriska derivatet i $ (r, \ varphi, \ psi) $ koordinatsystem? Detta ska ge dig en vektor som du sedan kan projicera på $ x $ – $ y $ – och $ z $ -axlarna för att ge dig $ x $ – $ y $ – och $ z $ -komponenterna i lutningen
- Nej, vi kan inte beräkna numeriska derivat, för för $ \ psi = 0 $ $ \ varphi $ -vinkel är inte definierat och vi har singularitet i formeln.
- Det finns troligen en lösning använder quaternions, men det är svårt att ta reda på hur exakt det ser ut wrt. din nomenkaltur. Effekten du försöker bekämpa kallas vanligtvis " gimbal-lock "
- Jag hittade en variant för att hantera dessa saker korrekt: här kan vi använda minst kvadratisk metod för gradientrekonstruktion, men jag hittade inte exakt förklaring, hur man använder den
- Kanske är det ' så – för måttligt uppfört $ u $$ – att $ \ lim _ {\ psi \ till 0} \ frac {1} {\ sin \ psi} \ frac {\ partial u} {\ partial \ phi} = 0 $. Men jag tror inte ' att mittkomponenten i din vektor har betydelse, så om du ' återansluter detta till en differentiell ekvation i polar koordinerar differentialekvationen kanske inte ger någon vikt till mittkoordinaten.
Svar
Det finns 3 sätt att undvik denna situation, men före användning måste man kontrollera om detta sätt är lämpligt på grund av beräkningsfel:
1) Green-Gauss cellmetod: här används definitionen av gradient:
$$ \ nabla u_i \ approx \ frac {1} {V_ {i}} \ int \ limits _ {\ partial V_i} ud \ overline {S} \ approx \ sum \ limits_ {k = 1} ^ {n} {u_ {f_k} S_k \ overline {n} _k}, $$ där $ k $ – antalet grannar i cellen $ V_ {i} $
2) Metoden med minsta kvadrater: felet
$$ \ 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 $$ måste minimeras, därför får vi komponenterna i $ \ nabla u_i $
3) Interpoleringsmetod. Gradientvärdet interpoleras från värdena för gradientvektorfunktion.