Bilimsel hesaplamada karmaşık aritmetik tehlikesi


11

Karmaşık bir iç ürün : kuralları tarafından karar iki farklı tanım sahip ˉ U , T v veya U , T ˉ v . BLAS'ta cdotu, zdotu ve cdotc, zdotc rutinlerini buldum. Önceki iki rutin aslında u T v'yi (sahte bir iç ürün!) Hesaplar ve son iki rutin iç üründeki ilk vektörü konjuge eder. Ayrıca, her iki tanımı gereği (konjugat u ya da v ), u , v = ¯ v , u u,vu¯TvuTv¯uTvuvu,v=v,u¯çekişme ile! Ayrıca, bir yorumda belirtildiği gibi, çok değerli karmaşık işlevler için temel değerlerin seçilmesi kurallara bağlı olabilir.

Sorum şu: bu komplikasyon bilimsel hesaplamada karmaşık aritmetik kullanımı için gerçek bir tehlikeye neden oluyor mu? Bu sayı, karmaşık sayıları her zaman gerçek parçaya ve hayali parçaya bölmeyi ve sadece gerçek aritmetiği kullanmayı öneren deal.ii yazarları tarafından vurgulanmaktadır. Ama bölme yaklaşımının uygun olduğunu hiç bulamadım. Örneğin, zaman harmonik Maxwell denklemleri için PML'yi düşünün .

FreeFem ++ ve libmesh hariç çoğu açık kaynaklı FEM yazılımında karmaşık sayıların kullanılması endişesi yaygın gibi görünüyor. Ancak iki istisna için bile, karmaşık aritmetik gerçek olandan daha az test edilir.

Son sorum şudur: Karmaşık sayılar kullanmaktan daima kaçınmalı mıyız?


3
1ii

@hardmath Teşekkürler! Soruya ekledim.
Hui Zhang

@hardmath: "küçük test örnekleri seti" - lineer cebir işlemlerini kapsamlı bir şekilde uygulayan çoğu kütüphanede, iç ürünlerin alındığı düzinelerce veya yüzlerce yer olabilir. Doğruluğunu doğrulamak için yüzlerce test yapılması gerekiyor ve muhtemelen doğru bir şekilde uygulanması aylar alıyor. Elbette bu imkansız değil ve bazı kütüphaneler bunu yaptı. Sadece bir sürü iş var ve tüm kütüphane yazarları doğru anladıkları konusunda emin değiller :-(
Wolfgang Bangerth

@ WolfgangBangerth, belki deal.ii tasarım kararını açıklayabilir misiniz?
Bill Barth

3
Karmaşık sayılar kullanmaktan daima kaçınalım mı? Lütfen hayır. Örneğin, her hesaplamalı bilim insanının simetrik olmayan özdeğer ayrışmasına ihtiyacı olduğuna inanıyorum.
Federico Poloni

Yanıtlar:


2

Karmaşık aritmetik ile ilgili sorunun, karmaşık vektörler için skaler ürünü tanımlamanın, gerçek durumda sadece bir yolla karşılaştırıldığında farklı yolları olduğunu söylüyorsunuz. Karmaşık skaler ürünle ilgili asıl sorunun, gözleminizle yakından ilişkili olan başka bir sorun olduğunu düşünüyorum.

Karmaşık aritmetikte skaler ürünün argümanlarının sırası önemlidir, gerçek aritmetikte ise önemli değildir. Birçok algoritma karmaşık ve gerçek aritmetikte aynıdır, yani bunları bir kez yazmanız ve daha sonra karmaşık ve gerçek aritmetik için aynı kodu kullanmanız gerekir. (Örneğin, C ++ 'da bu amaç için şablonlar kullanabilirsiniz.) Kodunuzu yazmayı tamamladığınızda, genellikle sınanırsınız. Bazı skaler üründeki argümanların sırasındaki hataları ortaya çıkarmak için, kodunuzu karmaşık değerli bir test senaryosuyla test etmeniz gerekir.

Karmaşık değerli problemler için bir çalışma kodunuz olduğunda, genellikle bir algoritmanın gerçek değerli kodunu ücretsiz olarak alırsınız. Kodunuzu karmaşık değerli bir test senaryosuyla test ettiğinizde, kod genellikle gerçek sayılar için de doğrudur. Bununla birlikte, gerçek değerli bir kodu karmaşık bir kod haline getirmek, ek çalışma gerektirir. Bu nedenle, gerçek değerli için karmaşık değerli sorunlardan daha fazla çalışan (ve ayrıntılı olarak test edilen) daha fazla kod vardır.

Sorum şu: bu komplikasyon bilimsel hesaplamada karmaşık aritmetik kullanımı için gerçek bir tehlikeye neden oluyor mu?

Aşağıdaki şekilde "Evet" derdim. Kod karmaşık değerli sorunlar için iyi test edilmediğinde, kodda daha yüksek hata olasılığı vardır, ancak bu baktığınız somut koda bağlıdır. Kod iyi test edildiğinde, sorun yoktur.

Son sorum şudur: Karmaşık sayılar kullanmaktan daima kaçınmalı mıyız?

Daha önce de belirtildiği gibi, gerçek sayılar kullanılarak çözülemeyen sorunlar var. Örneğin, simetrik olmayan matrislerin özdeğerlerinin hesaplanması. Dolayısıyla karmaşık aritmetiğe ihtiyacımız var.


-1

Bu makale konuyla ilgilidir:

Temel Karmaşık Fonksiyonlar için Şube Kesimleri veya Hiçbir Şey İşaret Bit Hakkında Çok Ado.

http://people.freebsd.org/~das/kahan86branch.pdf


5
SciComp'a Hoşgeldiniz! Bağladığınız makalenin neden alakalı olduğu hakkında daha fazla bilgi verebilir misiniz? Bir özet, cevabınızı daha değerli hale getirecek ve iptal edilme olasılığını artıracaktır. Yeterli bağlam olmadan bağlantı ekleyen cevapları caydırma eğilimindeyiz.
Geoff Oxberry
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.