Làm thế nào để xác định tính toán dấu phẩy động không ổn định?


15

Trong số, điều rất quan trọng là có thể xác định các sơ đồ không ổn định và cải thiện tính ổn định của chúng. Làm thế nào để xác định tính toán dấu phẩy động không ổn định?

Tôi đang làm việc trên một mô phỏng rất phức tạp, trong đó nhiều sơ đồ số làm việc cùng nhau và tôi đang tìm kiếm một phương pháp để xác định các phần yếu của nó. Tôi đang làm việc trên một mô hình vật lý liên quan đến phương trình vi phân. Một cái nhìn của một con chim về quá trình tổng thể là:

  1. (Bước sơ bộ) Thu thập vật lý quan sát P .

  2. Xác định các tham số ban đầu của mô phỏng. Điều này sử dụng thuật toán tối ưu hóa, trong đó chúng ta đi bộ trong một không gian tham số và tìm kiếm các tham số C sao cho một số hàm lỗi E (F (C), P) được giảm thiểu, trong đó F là một số lượng xuất phát của các tham số.

  3. Cắm C vào động cơ mô phỏng. Đây là sơ đồ Euler của EDP, do đó, ở mỗi bước, chúng tôi tính toán các thuật ngữ điều khiển động (mỗi trong số chúng là một hàm phức tạp, có khả năng không ổn định) và cung cấp sơ đồ Euler với các thuật ngữ động này để tính toán tiếp theo tiểu bang. Điều này diễn ra trong hàng ngàn điểm thời gian.

  4. Khi kết thúc mô phỏng, chúng tôi tính toán một số hàm Proof (S) của trạng thái cuối S và so sánh với một số đại lượng Yêu cầu (P) suy ra từ các đại lượng quan sát được. Đây không phải là một bằng chứng chính thức về kết quả, hơn nữa là kiểm tra tính hợp lý.

Ngoài ra, tôi thấy một tháp các hoạt động phức tạp (tính toán các thuật ngữ động, trong sơ đồ Euler, trong Chứng minh ). Và muốn nhận ra những bộ phận xấu của Viking và sửa chúng.

Tôi suy đoán rằng việc sử dụng phần mềm triển khai các số dấu phẩy động với độ chính xác giảm sẽ giúp phóng đại tính không ổn định của các sơ đồ số, do đó giúp giảm bớt sự so sánh giữa các triển khai khác nhau. Đây có phải là một kỹ thuật phổ biến để điều tra câu hỏi này? Có thể sử dụng một máy ảo, như Bochs, để đạt được điều này mà không làm thay đổi chương trình?

Để giải quyết một cách thích hợp với câu hỏi về tính ổn định, đôi khi có thể chấp nhận nhắm mục tiêu đầu vào điển hình của thủ tục số, để nó có thể được điều chỉnh để làm tốt với đầu vào đó và có thể kém hơn ở đầu vào hợp lệ, nhưng không chắc chắn khác. Cho một mẫu các đầu vào điển hình, có thể rình mò một số kết quả trung gian và chuẩn bị một hồ sơ thống kê cho chúng. Một lần nữa, đây có phải là một kỹ thuật phổ biến để nghiên cứu các vấn đề ổn định? Là một máy ảo hữu ích cho việc này?


có thể bạn sẽ có nhiều câu trả lời thú vị hơn trên math.stackexchange.com
Simon Bergot

@Simon Bạn có thể đúng, nhưng đây chắc chắn là một câu hỏi liên tên miền. Tôi đoán những người có thể trả lời được đăng ký cho cả toán học và lập trình viên hoặc không ai. Hãy chờ một chút xem câu hỏi này có tìm thấy câu trả lời ở đây không!
dùng40989

1
Mỹ phẩm thời gian?
SK-logic


2
Sử dụng Euler để tuyên truyền nhà nước không nhất thiết là xấu xa; không phải là tối ưu hóa, nhưng bạn thực sự phải chia vấn đề thành các nhiệm vụ. Sự mất ổn định về số có thể là ít nhất trong số các tai ương của bạn - hội tụ đến mức tối đa sai và các vấn đề liên quan đến độ cứng của ODE / PDE hiện ra lớn hơn thế. Và vâng, không bao giờ sử dụng độ chính xác duy nhất :)
Deer Hunter

Câu trả lời:


6

Nghiên cứu về tính ổn định của tính toán dấu phẩy động là một phần của phân tích số và nếu bạn thực sự muốn có kết quả âm thanh, bạn thực sự muốn ai đó có kiến ​​thức trong lĩnh vực đó thực hiện phân tích các thuật toán được sử dụng.

Có một số điều có thể giúp xác định bằng thực nghiệm các thuật toán không ổn định. Chạy với làm tròn được đặt thành các chế độ khác nhau (lên / xuống / ngẫu nhiên) hoặc với độ chính xác khác nhau và kiểm tra xem kết quả không thay đổi quá nhiều. Trả lời là điều này quá nhiều? không đơn giản chút nào và ngay cả khi câu trả lời là không , điều đó không có nghĩa là thuật toán ổn định, chỉ là nó không được phát hiện không ổn định trên tập dữ liệu bạn đã sử dụng.

Số học khoảng đã được đề xuất trong các ý kiến. Khi tôi nhìn vào nó, ngay cả người đề xuất số học điên cuồng nhất cũng thừa nhận rằng nó hoạt động tốt với các thuật toán được thiết kế cho số học khoảng nhưng việc chuyển sang nó mà không phân tích thuật toán và đảm bảo rằng nó không có mô hình nào hoạt động tốt sẽ không hoạt động tốt là hữu ích (đối thủ dường như cho rằng các điều kiện trước cho số học khoảng là hữu ích khi quá hạn chế để được quan tâm thực tế)


3

Thiết kế các thuật toán dấu phẩy động ổn định là rất không cần thiết. Những người có kỹ năng toán học hơn bản thân tôi đề nghị sử dụng các thư viện được coi là tốt nếu có thể thay vì cố gắng tự tạo ra. Các tài liệu tham khảo tiêu chuẩn trong khu vực dường như là:

NJ Higham. Độ chính xác và ổn định của thuật toán số. Hiệp hội toán học công nghiệp và ứng dụng, Philadelphia, PA, Hoa Kỳ, ấn bản thứ hai, 2002. ISBN 0-89871-521-0

Không biết nhiều hơn về các loại tính toán, ngôn ngữ, vv làm cho khó có thể đưa ra nhiều câu trả lời cụ thể. Có một bài giảng hay ở đây: http://introcs.cs.princeton.edu/java/91float/ đây có thể là một chút cơ bản, nhưng đó là một giới thiệu tốt nếu bạn đang sử dụng java.


1

Làm thế nào để xác định tính toán dấu phẩy động không ổn định? Đây có phải là một kỹ thuật phổ biến để điều tra câu hỏi này?

Tôi nghĩ trừ khi bạn cần hiển thị một số thống kê về lỗi, bạn không thực sự cần phải thu thập các mẫu. Những gì bạn cần là Phân tích số , cũng thuộc các môn Phương pháp số, Đại số tuyến tính số, v.v. Và chúng là một phần của khoa học máy tính, vì vậy bạn cũng có thể nhận được một số câu trả lời trong cs.stackexchange.

Dù sao đi nữa, trong lập trình nói chung, hầu hết các vấn đề đều dễ dàng được phát hiện dựa trên một số hiểu biết cơ bản về cách thức dấu phẩy động hoạt động và phương pháp số cơ bản. Nhưng vấn đề thậm chí phức tạp hơn là "dễ dàng hơn" để giải quyết ngay hôm nay với tính khả dụng của phao 128 bit, thậm chí ít lý do hơn để tạo ra các mẫu lỗi. Dưới đây là một số vấn đề mẫu để cho thấy quan điểm của tôi:

  1. sử dụng dấu phẩy động để tính giá trị tiền tệ.
  2. sử dụng dấu phẩy động cho số lớn.
  3. không thực hiện các bộ phận trước các hoạt động khác khi có thể làm như vậy. (để làm cho giá trị gần hơn với 0).
  4. tính toán dài mà không cần xử lý đặc biệt để lan truyền lỗi.

Cũng có ví dụ về thuật toán ngây thơ và thuật toán bù lỗi ở đây thuật toán tính toán phương sai . Trong ví dụ, nhìn vào phiên bản ngây thơ, bạn chỉ có thể ngửi thấy rằng việc tính toán trong các vòng lặp sẽ mang một số lỗi và không được bù.


Cảm ơn câu trả lời của bạn, tuy nhiên tôi đang tìm kiếm thông tin chi tiết hơn. Tôi có một tính toán rất lớn và muốn xác định những phần yếu của nó. Tôi chỉnh sửa câu hỏi cho phù hợp.
dùng40989

Tôi không chắc chắn chính xác tình huống của bạn khi bạn nói rằng bạn có tính toán lớn và muốn xác định các phần yếu. Tính toán số vốn đã có lỗi trong đó, thậm chí một thao tác thêm đơn giản. Vì vậy, trừ khi tính toán lớn của bạn được bù lỗi, thì chúng cần phải được sửa chữa. Cải thiện các điểm yếu hơn có thể không đủ tốt. Nếu bây giờ bạn là "epsilon" của mô hình dấu phẩy động, một phân tích đơn giản sẽ cho thấy lỗi có thể lớn đến mức nào khi chúng lan truyền qua quá trình tính toán dài.
imel96

0

Bạn có thể tránh các lỗi số bằng cách sử dụng các loại dữ liệu phù hợp (ví dụ như phân số tiếp tục). Nếu bạn cần hoặc muốn sử dụng số học dấu phẩy động, bạn cần áp dụng bí quyết số để biết các lỗi.


Tôi không muốn tránh các lỗi số, tôi muốn tìm phần nào của tính toán không ổn định. Nó tương tự như tắc nghẽn tốc độ cục bộ khi tối ưu hóa tốc độ. Vì vậy, tôi muốn tối ưu hóa độ chính xác và do đó muốn tìm các tắc nghẽn chính xác. (Các phân số tiếp tục không hữu ích ở đây.)
user40989

1
@ user40989, sau đó bạn chắc chắn cần khoảng thời gian arithologists.
SK-logic
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.