Nguy cơ của mỹ phẩm phức tạp trong điện toán khoa học


11

Sản phẩm bên trong phức tạp có hai định nghĩa khác nhau được quyết định bởi các quy ước: hoặc . Trong BLAS, tôi tìm thấy các thường trình cdotu, zdotu và cdotc, zdotc. Hai thói quen trước đây thực sự tính toán (một sản phẩm bên trong giả mạo!) Và hai thói quen cuối cùng kết hợp vectơ đầu tiên trong sản phẩm bên trong. Ngoài ra, theo định nghĩa (liên hợp hoặc ), với cách chia! Hơn nữa, như đã chỉ ra trong một nhận xét, việc chọn các giá trị chính cho các hàm phức đa giá trị có thể phụ thuộc vào quy ước.ˉ u T v u T ˉ v u T v u v u , v = ¯ v , u u,vu¯TvuTv¯uTvuvu,v=v,u¯

Câu hỏi của tôi là: sự phức tạp này có gây nguy hiểm thực sự cho việc sử dụng số học phức tạp trong điện toán khoa học không? Vấn đề này được nhấn mạnh bởi các tác giả của deal.ii, người đề nghị luôn chia số phức thành phần thực và phần ảo và chỉ sử dụng số học thực. Nhưng tôi không bao giờ thấy cách tiếp cận chia tách là thuận tiện. Ví dụ, hãy nghĩ về PML cho các phương trình Maxwell hài hòa thời gian.

Dường như lo lắng về việc sử dụng các số phức là phổ biến trong hầu hết các phần mềm FEM mã nguồn mở ngoại trừ FreeFem ++ và libmesh. Nhưng ngay cả đối với hai trường hợp ngoại lệ, số học phức tạp ít được kiểm tra hơn so với thực tế.

Câu hỏi cuối cùng của tôi là: chúng ta sẽ luôn luôn tránh sử dụng các số phức?


3
Có ai thực sự biết gốc của là và là không? Dường như một nhà phát triển phần mềm nên bao gồm một tập hợp nhỏ các ví dụ kiểm tra trong bộ hồi quy của họ để bảo vệ chống lại việc kết hợp các liên hợp không nhất quán trong bất kỳ chuỗi tính toán số học phức tạp dài nào. tôi - tôi1ii
hardmath

@hardmath Cảm ơn bạn! Tôi đã thêm nó trong câu hỏi.
Hui Zhang

@hardmath: "tập hợp các ví dụ thử nghiệm nhỏ" - trong hầu hết các thư viện triển khai toàn diện các hoạt động đại số tuyến tính, có thể sẽ có hàng chục hoặc hàng trăm nơi sử dụng các sản phẩm bên trong. Sẽ mất hàng trăm bài kiểm tra để xác minh tính đúng đắn của chúng, có thể mất vài tháng để thực hiện chính xác. Tất nhiên, điều đó không phải là không thể và một số thư viện đã làm được điều đó. Nó chỉ là một rất nhiều công việc và không phải tất cả các tác giả thư viện là tự tin rằng họ đã làm đúng :-(
Wolfgang Bangerth

@WolfgangBangerth, có lẽ bạn có thể giải thích quyết định thiết kế deal.ii?
Bill Barth

3
Chúng ta sẽ luôn luôn tránh sử dụng số phức? Xin đừng. Tôi tin rằng tất cả các nhà khoa học tính toán cần phân tách eigenvalue không đối xứng, ví dụ.
Federico Poloni

Câu trả lời:


2

Bạn nói rằng vấn đề với số học phức tạp là có nhiều cách khác nhau để định nghĩa sản phẩm vô hướng cho các vectơ phức tạp, so với chỉ một cách trong trường hợp thực. Tôi nghĩ rằng vấn đề thực sự với sản phẩm vô hướng phức tạp là một vấn đề khác, tuy nhiên, nó liên quan chặt chẽ đến sự quan sát của bạn.

Trong số học phức tạp, thứ tự của các đối số của sản phẩm vô hướng có vấn đề, trong khi trong số học thực tế thì không. Nhiều thuật toán về cơ bản là giống nhau về số học phức tạp và thực, có nghĩa là bạn chỉ cần viết chúng một lần và sau đó sử dụng cùng một mã cho số học phức tạp và thực. (Ví dụ: trong C ++, bạn có thể sử dụng các mẫu cho mục đích này.) Khi bạn viết xong mã của mình, bạn thường kiểm tra nó. Để phát hiện ra các lỗi trong việc sắp xếp các đối số trong một số sản phẩm vô hướng, bạn phải kiểm tra mã của mình bằng một trường hợp thử nghiệm có giá trị phức tạp.

Bạn thường nhận được mã có giá trị thực cho một thuật toán miễn phí khi bạn có mã làm việc cho các vấn đề có giá trị phức tạp. Khi bạn đã kiểm tra mã của mình với trường hợp kiểm tra có giá trị phức tạp, mã cũng thường đúng với số thực. Tuy nhiên, việc biến một mã có giá trị thực thành một mã phức tạp đòi hỏi phải có thêm công việc. Do đó, chỉ có nhiều mã chỉ hoạt động (và được kiểm tra kỹ lưỡng) cho giá trị thực so với các vấn đề có giá trị phức tạp.

Câu hỏi của tôi là: sự phức tạp này có gây nguy hiểm thực sự cho việc sử dụng số học phức tạp trong điện toán khoa học không?

Tôi sẽ nói "Có", theo cách sau. Khi mã không được kiểm tra tốt đối với các vấn đề có giá trị phức tạp, khả năng xảy ra lỗi trong mã sẽ cao hơn, nhưng điều này phụ thuộc vào mã cụ thể mà bạn đang xem xét. Khi mã được kiểm tra tốt, không có vấn đề.

Câu hỏi cuối cùng của tôi là: chúng ta sẽ luôn luôn tránh sử dụng các số phức?

Như đã chỉ ra, có những vấn đề không thể giải quyết bằng cách sử dụng số thực. Ví dụ, tính toán giá trị riêng của ma trận không đối xứng. Do đó, chúng ta cần số học phức tạp.


-1

Bài viết này có liên quan:

Cắt giảm chi nhánh cho các hàm phức tạp cơ bản hoặc nhiều vấn đề về Bit ký hiệu không có gì.

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


5
Chào mừng đến với SciComp! Có lẽ bạn có thể giải thích thêm về lý do tại sao bài báo bạn liên kết có liên quan? Một bản tóm tắt sẽ làm cho câu trả lời của bạn có giá trị hơn và có nhiều khả năng được nâng cao hơn. Chúng tôi có xu hướng không khuyến khích các câu trả lời thêm liên kết mà không có đủ ngữ cảnh.
Geoff Oxberry
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.