Hệ số khác biệt đạo hàm và hữu hạn: có cập nhật nào về phương pháp Fornberg không?


11

Khi một người muốn tính các đạo hàm số, phương pháp được trình bày bởi Bengt Fornberg ở đây (và được báo cáo ở đây ) rất thuận tiện (cả chính xác và đơn giản để thực hiện). Như ngày ban đầu từ năm 1988, tôi muốn biết liệu có một sự thay thế tốt hơn ngày hôm nay (như (hoặc gần như) đơn giản và chính xác hơn) không?


1
Khó nói mà không biết bạn muốn phân biệt điều gì. Bạn đã xem xét sự khác biệt tự động ?
Biswajit Banerjee

@BiswajitBanerjee: Đối với các hệ số sai phân hữu hạn, phân biệt tự động không áp dụng.
Geoff Oxberry

@GeoffOxberry: Tôi đã đề cập đến vấn đề vật lý thực tế, tức là phần khoa học của "khoa học tính toán".
Biswajit Banerjee

@Vincent: Bạn đang cố gắng phân biệt một chức năng, hoặc một bảng? Nếu dữ liệu bảng, dữ liệu bảng có ồn không? Bạn đang cố gắng để phân biệt PDE?
user14717

Câu trả lời:


9

Tổng quat

Câu hỏi hay. Có một bài báo có tựa đề "Cải thiện độ chính xác của phương pháp phân biệt ma trận cho các điểm sắp xếp tùy ý" của R. Baltensperger. Theo tôi thì đó không phải là vấn đề lớn, nhưng nó có một điểm (đã được biết đến trước khi xuất hiện vào năm 2000): nó nhấn mạnh tầm quan trọng của một biểu diễn chính xác của thực tế là đạo hàm của hàm hằng f(x)=1 nên bằng không (điều này giữ chính xác theo nghĩa toán học, nhưng không nhất thiết phải theo biểu diễn số).

Nó là đơn giản để thấy rằng điều này đòi hỏi số tiền hàng của n-thứ bắt nguồn từ ma trận D(n) là zero. Thông thường để thực thi ràng buộc này bằng cách điều chỉnh mục nhập đường chéo, tức là bằng cách đặt

(1)Djj(n):=i=1ijNDij.
Rõ ràng là tính năng này không giữ chính xác khi làm việc trên máy tính do lỗi vòng trong tính toán dấu phẩy động. Điều đáng ngạc nhiên hơn là những lỗi này thậm chí còn nghiêm trọng hơn khi sử dụng các công thức phân tích cho ma trận đạo hàm (có sẵn cho nhiều điểm sắp xếp cổ điển, ví dụ Gauss-lobatto).

Bây giờ, bài báo (và tài liệu tham khảo trong đó) nói rằng lỗi của đạo hàm là theo thứ tự độ lệch của các hàng tổng từ 0. Do đó, mục tiêu là làm cho các số này càng nhỏ càng tốt.

Kiểm tra số

Điểm tốt là thủ tục Fornberg dường như khá tốt trong vấn đề này. Trong hình bên dưới, tôi đã so sánh hành vi của ma trận đạo hàm chính xác, tức là phân tích, và ma trận xuất phát từ thuật toán Fornberg, với số lượng điểm giao dịch Chasershev-lobatto khác nhau.

Một lần nữa, tin vào tuyên bố trong bài báo được trích dẫn, điều này ngụ ý rằng thuật toán Fornberg sẽ mang lại kết quả chính xác hơn cho công cụ phái sinh.

Để chứng minh điều đó, tôi sẽ sử dụng chức năng tương tự như trong bài báo,

(2)f(x)=11+x2.
(3)En=maxi{0,,n}|f(xi)j=1nDijf(xj)|.
(4)D~jj=Djj(i=1nDji),for all j.

Phần kết luận

Tóm lại, phương pháp của Fornberg dường như khá chính xác, trong trường hợp thậm chí chính xác hơn khoảng 3 bậc so với kết quả từ các công thức phân tích. Điều này cần đủ chính xác cho hầu hết các ứng dụng. Hơn nữa, điều này rất đáng chú ý vì Fornberg dường như không bao gồm rõ ràng sự thật này trong phương pháp của mình (ít nhất là không có đề cập nào trong hai bài báo của Fornberg).N=512

Một thứ tự cường độ khác có thể đạt được cho ví dụ này thông qua việc đưa vào phương trình đơn giản (4). Vì đây là một cách tiếp cận khá đơn giản và chỉ áp dụng một lần cho mỗi công cụ phái sinh, tôi thấy không có lý do gì để không sử dụng nó.

Phương pháp từ bài báo Baltensperger - sử dụng cách tiếp cận tinh vi hơn để đánh giá tổng trong phương trình (1) để giảm sai số vòng - mang lại cùng một mức độ lớn cho lỗi. Vì vậy, ít nhất là trong ví dụ này, nó gần tương đương với phương pháp "Điều chỉnh Fornberg" ở trên.


4

Giả sử bạn đang cố gắng phân biệt một triển khai số của hàm liên tục, có một số lượng lớn các phương thức:

1) Tự động phân biệt. Phương pháp chính xác và tổng quát nhất. Đau đớn để mã, yêu cầu quá tải toán tử và tra cứu phụ thuộc đối số. Đặt một gánh nặng cho người dùng để hiểu các khái niệm này. Cũng đấu tranh với các điểm kỳ dị có thể tháo rời, chẳng hạn như phân biệt chân thành tại .x=0

2) Một biến đổi Ch Quashev. Chiếu chức năng của bạn lên một chuỗi các đa thức Ch Quashev và phân biệt ba lần tái phát. Siêu nhanh, rất chính xác. Nhưng yêu cầu bạn phải có một miền quan tâm được hỗ trợ nhỏ gọn; ngoài miền đã chọn , ba lần lặp lại không ổn định.[a,b]

3) Sự khác biệt hữu hạn. Không bị khuất phục trong 1D; xem Mẹo và thủ thuật của Nick Higham trong tính toán số . Ý tưởng là nếu bạn cân bằng giữa lỗi cắt xén và lỗi làm tròn thì bạn không cần phải chọn một bước; nó có thể được chọn tự động. Trong Boost, ý tưởng này được sử dụng để khôi phục (theo mặc định) 6/7 chữ số chính xác cho loại. (Higham chỉ hiển thị ý tưởng cho trường hợp đơn giản hơn 1/2 chữ số chính xác, nhưng ý tưởng dễ dàng được mở rộng.) Các hệ số từ bảng cân bằng của Fornberg, nhưng các bước được chọn theo giả định rằng hàm có thể được ước tính thành 1ULP sự chính xác. Nhược điểm là nó yêu cầu 2 đánh giá chức năng để phục hồi một nửa số chữ số của loại, 4 để phục hồi 3/4 số chữ số, v.v. Trong 1D, không phải là một thỏa thuận xấu. Ở kích thước cao hơn, đó là thảm họa.

4) Đạo hàm bước phức tạp. Sử dụng . Hãy để trở thành vòng tròn đơn vị và điều này sẽ phục hồi gần như mọi bit chính xác. Tuy nhiên, đó là một sự gian lận, bởi vì nói chung việc thực hiện một chức năng trong mặt phẳng phức tạp khó hơn là viết mã đạo hàm thực của nó. Vẫn là một ý tưởng hay và hữu ích trong những trường hợp nhất định.f(x)(f(x+ih))h


1

Tôi không biết bất cứ ai đã cải thiện thuật toán của Fornberg (xem thêm bài báo gần đây của anh ấy một chút ). Với tư cách là một bên, đối với tôi, việc xem thuật toán của anh ta như một cách để tính toán các đạo hàm số là không đúng. Tất cả những gì anh ta đã làm là rút ra một thuật toán hiệu quả để tính toán trọng số cho các phương pháp sai phân hữu hạn. Ưu điểm của phương pháp của ông là nó cung cấp cho bạn các trọng số cho tất cả các công cụ phái sinh cho đến công cụ phái sinh mong muốn trong một lần.


Tôi sẽ không đồng ý với tuyên bố "xem thuật toán của anh ta như một cách để tính toán các đạo hàm số là không đúng". Khi bạn đã đánh giá các trọng số cho điểm , bạn có thể tính trực tiếp đạo hàm số của bất kỳ hàm thông qua . wizf(x)f(z)=iwif(xi)
davidhigh

@davidhigh: Nếu bạn đọc các bài báo của Fornberg, họ nói về việc tính toán các trọng số cho các xấp xỉ sai phân hữu hạn, chứ không phải về việc tính toán các xấp xỉ. Tất nhiên bạn cũng có thể sử dụng thuật toán để tính các đạo hàm, nhưng sẽ hợp lý hơn khi tính các trọng số, lưu trữ chúng, sau đó sử dụng chúng nhiều lần để tính các đạo hàm gần đúng. Nếu không, bạn đang tính toán các trọng số nhiều lần khi không có nhu cầu.
Brian Zatapatique

1

Một sơ đồ đơn giản hơn

Ngoài câu trả lời khác của tôi là về phần mở rộng của phương pháp Fornberg, tôi sẽ giải quyết ở đây câu hỏi cho các lựa chọn thay thế đơn giản hơn.

Đối với điều này, tôi phác thảo một sơ đồ thay thế tạo ra các hệ số đạo hàm, phép nội suy Lagrangian trực tiếp hơn. Việc triển khai của nó chỉ cần một vài dòng mã, hoạt động cho các lưới tùy ý và theo các thí nghiệm đầu tiên của tôi, cũng chính xác như của Fornberg.

Cơ sở của việc triển khai là đạo hàm bước tưởng tượng trong đó là một biến theo thứ tự độ chính xác của máy. Đạo hàm bước ảo được biết là tạo ra các giá trị đạo hàm ổn định và không chịu sự mất ổn định về số của việc thực hiện sai phân hữu hạn với .

f(x) = 1hIm(f(x+ih)),
hh0

Thành phần thứ hai là đa thức nội suy Lagrange trên lưới đánh giá bằng một trong các dạng , ví dụ trong đó Để sử dụng đạo hàm bước phức, người ta phải đảm bảo các công thức này cũng hoạt động phức tạp đối số . Ngoài ra, đối với hàm số đã cho f (x) và vectơ của các hệ số , chúng tôi biểu thị đa thức nội suy qua bởi Li(x){x1,,xN}

Li(z) = {1if z=xi μizxkkμkzxkotherwise.
μi=1ki(xixk)zfi=f(xi)(x1,fi)
P(x;f)=i=1NfiLi(x).


Thuật toán

Các thuật toán được phác thảo trong các sau. Nó có các tham số đầu vào và đầu ra giống như của Fornberg, nhưng không có gì phải đắn đo.

Đầu vào:

  • x : một lưới có N điểm lưới riêng biệt
  • ord : thứ tự phái sinh
  • z: một điểm mà tại đó đạo hàm được đánh giá
  • Có thể: một hàm hoặc giá trị funciton của nó tại các điểm lưới (chỉ yêu cầu cho biến thể đầu ra 2.)f(x)fi

Khởi tạo

  • Khởi tạo đa thức Lagrange thông qua phép nội suy barycentric.L
  • Khởi tạo một mảng -matrices , choN×ND(o)o=0,,ord
  • Đặt , tức là ma trận đơn vị có thứ nguyênD(0):=INN×N
  • Đặto:=0

Thuật toán

Trong khi :o<ord

  • Tính bằng phái sinh bước phức tạp cho tất cả và . Ở đây, biểu thị hàng thứ của .Dik(o+1)=CSD(P(xk;Di(o)))CSDik
    Di(o)iD(o)

  • Đặt o = o + 1;

Quyết định những gì để đầu ra :

  1. Vectơ của các hệ số sai phân hữu hạn tại điểm , trong đó . Đây là những gì Fornberg làm.d(ord)zdi=P(z;Di(ord))

  2. Hàm nội suy cho đạo hàm về trật tự . Đối với điều này, bạn phải nhập một hàm resp. các giá trị hàm tại cho thuật toán.p(ord)(x)=i=1Nf(xi)P(x;Di(ord))f(ord)(x)ordfixi

  3. Hàm meta trả về hàm nội suy của biến thể 2., nhưng đối với hàm tùy ý sẽ được nội suy tại các điểm lưới.diff(int ord,function g)g

Cá nhân, tôi thích biến thể 3. nhất.


Phân tích thuật toán

Như của Fornberg, thuật toán này là . Tôi sẽ đăng thêm kết quả thực nghiệm về độ chính xác, ổn định, vv nếu tôi tìm thấy thời gian.O(ordN2)


0

Để tăng độ chính xác của sự khác biệt về số, hãy làm như sau:

1) Chọn phương pháp "tiêu chuẩn" chính xác cao yêu thích của bạn dựa trên một số kích thước bước h .

2) Tính giá trị của đạo hàm với phương pháp được chọn trong 1) nhiều lần với các kích thước bước khác nhau nhưng hợp lý h . Mỗi lần bạn có thể chọn h là một số ngẫu nhiên trong khoảng (0,5 * H / 10, 1,5 * H / 10) trong đó H là một kích thước bước thích hợp cho phương pháp bạn sử dụng.

3) Trung bình kết quả.

Kết quả của bạn có thể đạt được 2-3 bậc độ lớn trong wrt lỗi tuyệt đối. kết quả không trung bình.

https://arxiv.org/abs/1706.10219


3
Chào mừng bạn đến với SciComp.SE! Câu trả lời này sẽ còn tốt hơn nếu bạn tóm tắt phương pháp một cách ngắn gọn.
Christian Clason

2
Ngoài ra tên người dùng của bạn cho thấy rằng bạn là tác giả của bài báo đó. Vui lòng đọc hướng dẫn của chúng tôi về tự quảng cáochỉnh sửa bài đăng của bạn cho phù hợp.
Wrzlprmft

Tôi thành thật nghĩ rằng bỏ phiếu tiêu cực là không công bằng nếu câu trả lời của tôi thực sự chỉ ra một câu trả lời hợp lệ.
F. Jatpil

1
Tôi cũng vậy ... vì vậy hãy lấy +1 của tôi ... :-)
davidhigh
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.