Üçgenler ve tetrahedra için otomatik entegrasyon noktaları ve ağırlıkları oluşturma


12

Genellikle birim üçgen ve tetrahedra için entegrasyon noktaları ve ağırlıkları bulmak için bir kağıt veya kitaba danışılır. Bu tür noktaları ve ağırlıkları otomatik olarak hesaplamak için bir yöntem arıyorum. Aşağıdaki Mathematica kod örneği, birim satırı (dörtlü / altı yüzlü) elemanları için entegrasyon ağırlıklarını ve noktalarını hesaplar:

unitGaussianQuadraturePoints[points_] := 
  Sort[x /. 
    Solve[Evaluate[LegendreP[points, x] == 0], {x}], ! 
     OrderedQ[N[{#1, #2}]] &];

unitGaussianQuadratureWeights[points_] := 
  Module[{gps, f, int, integr, vars, eqns}, 
   gps = unitGaussianQuadraturePoints[points];
   f[0, 0] := 1;
   f[0., 0] := 1.;
   f[x_, n_] := x^n;
   int = Integrate[f[x, #], x] & /@ Range[0, points - 1];
   integr = Subtract @@@ (int /. x :> {1, -1});
   vars = Table[Unique[c], {Length[gps]}];
   eqns = 
    Table[Plus @@ Thread[Times[vars, f[#, i - 1] & /@ gps]] == 
      integr[[i]], {i, points}];
   Return[(vars /. Solve[eqns, vars])];];


unitGaussianQuadratureWeights[2]

{{1, 1}}

unitGaussianQuadraturePoints[2]

{1/Sqrt[3], -(1/Sqrt[3])}

Bunun üçgenler ve / veya tetrahedra için nasıl yapıldığını algoritmik olarak açıklayan bir kağıt / kitap arıyorum. Birisi beni bu konuda bazı bilgilere yönlendirebilir mi? Teşekkürler.


1
İçinde Gauss-Legendre dördün kurallarını yapmanın daha kolay bir yolu var Mathematica : {points, weights} = MapThread[Map, {{2 # - 1 &, 2 # &}, Most[NIntegrate`GaussRuleData[n, prec]]}].
JM

Her durumda: Gördüğünüz bu ?
JM

@JM, yukarıda önerilen yöntem maalesef prec = Infinity için çalışmıyor; ama bunun için teşekkürler.

2
Bu durumda, burada bir yöntem olduğunu sebebiyle Golub ve Welsch için işleri: Transpose[MapAt[2(First /@ #)^2 &, Eigensystem[SparseArray[{Band[{2, 1}] -> #, Band[{1, 2}] -> #}, {n, n}]], {2}]] &[Table[k/Sqrt[(2 k - 1)(2 k + 1)], {k, n - 1}]].
JM

1
İşte Golub ve Welsch'in makalesi. Makalelerimi inceleyeceğim ve basit şeyler için bir şey olup olmadığını göreceğim ...
JM

Yanıtlar:



3

Burada, ağırlık ve örnekleme noktalarının ağırlığını ve örnekleme noktalarını hesaplamak için birim üçgenin standart 2 kareye nasıl eşleneceğini açıklayan bir http://journal.library.iisc.ernet.in/vol200405/paper6/rathod.pdf belgesi bulunmaktadır. standart 2 kare için Gauss-Legendre puan cinsinden üçgen.


Bu ilginç bir fikir, n = 2 için bu 4 puan gerekiyor gibi görünüyor, n = 2 için üçgenler için tipik literatür referansı için 3 puan verildi. Bunun hakkında bir şey biliyor musun?

Bu, üçgenden kareye bir eşleme kullandıkları gerçeğinden kaynaklanmaktadır. Bunun ötesinde hiçbir şey söyleyemem çünkü üçgenlerle çalışmıyorum (dörtgenler kullanıyorum), bu yüzden pratikte genellikle ne yapıldığını bilmiyorum. Ben sadece gazeteyi buldum ve bunu yapmak oldukça basit bir şey gibi göründü.
James Custer

aslında oldukça basittir ve diğer kağıtların önerdiğini göreceğim, ancak bunun basitliği ve zaten sahip olduğum bir şeyi kullanmanın zarafeti bunun için bir artı. Dezavantajı, ek fonksiyon değerlendirmesidir. Her durumda teşekkürler.

diğer bir aşağı tarafı ise noktaların simetrik olmamasıdır.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.