Tôi có thể tin tưởng tích phân ba số này từ Matlab không?


15

Người khoa học tính toán:

Ban đầu tôi đã đăng câu hỏi này tại Math Stack Exchange và ai đó đã nhận xét rằng tôi có thể nhận được câu trả lời "tốt hơn nhiều" ở đây:

Tôi là một người mới ở phương pháp số và Matlab. Tôi đang cố gắng đánh giá tổng sau của hai tích phân ba (rõ ràng nó có thể được viết đơn giản hơn, nhưng bạn vẫn không thể đánh giá nó một cách tượng trưng (?)). Tôi gặp khó khăn khi lấy làm việc ở đây, vì vậy tôi miễn cưỡng chia nó thành từng mảnh ở đây: Tôi muốn tìm tổng củaLMộtTEX

2((1/0,3)-1)2(11/0,31r10r1-r0F1(r0,r1,t)điểm kinh nghiệm(-(0,3)2t24)dtdr0dr1),

2((1/0,3)-1)2(11/0,31r1r1-r0r1+r0F2(r0,r1,t)điểm kinh nghiệm(-(0,3)2t24)dtdr0dr1),

Ở đâu

F1(r0,r1,t)= =t2r03*(0,3)32r13π

F2(r0,r1,t)= =(0,3)3π3/2(r0+r1-t)4(t2+2t(r0+r1)-3(r1-r0)2)2288(43πr03)(43πr13).

EDIT (ngày 2 tháng 3 năm 2013): Ai đó đã trả lời rằng họ đã nhận Mathicala để thực hiện các tích phân một cách tượng trưng. Tôi chỉ cố gắng thực hiện điều này (với các phiên bản đơn giản của tích phân) và Mathicala chỉ có thể thực hiện hai phần ngoài cùng của cái thứ nhất, và bị đình trệ ở cái thứ hai. Tôi sẽ rất cảm kích nếu có sự giúp đỡ nào đó. Đây là những gì tôi đã làm:

Tôi đã cố gắng đánh giá

121r20r2r1r13t2exp(t2)r23dtdr1dr2
qua

Tích hợp [r1 ^ 3 / r2 ^ 3 * t ^ 2 * Exp (-t ^ 2), {t, 0, r2 - r1}, {r1, 1, r2}, {r2, 1, 2}]

và Mathicala trở lại (tôi gặp rắc rối với ở đây vì kết quả còn dài. Tôi chia nó thành hai phương trình. Nếu ai biết một cách hay để hiển thị điều này, xin vui lòng cho tôi biết):LATEX

12164r22e1r22(2e2r2(25+r2(19+2r2(1+r2)))

e1+r22(32r2(2+r22))+π(11+4r22(9+r22))Erf[1r2])dr2.

Sau đó tôi đã cố gắng đánh giá

121r2r2r1r2+r1

exp(t2)(r1+r2t)4(t2+2t(r1+r2)3(r2r1)2)2r13r23dtdrdr2

sử dụng

Tích hợp [(r1 + r2 - t) ^ 4 * (t ^ 2 + 2 * t * (r1 + r2) - 3 * (r2 - r1) ^ 2) ^ 2 * Exp [-t ^ 2] / r1 ^ 3 / r2 ^ 3, {r2, 1, 2}, {r1, 1, r2}, {t, r2-r1, r2 + r1}]

ngay bây giờ, và Mathicala đã không trả lời câu trả lời sau khoảng nửa giờ (nhưng tôi đang gặp vấn đề về mạng máy tính và họ có thể sẽ bị đổ lỗi).

[KẾT THÚC NGÀY 2 THÁNG 3]

Tôi đã sử dụng lệnh "triplequad" của Matlab, không có tùy chọn bổ sung. Tôi đã xử lý các giới hạn biến đổi của tích hợp bằng các hàm mũ, vì tôi không biết cách nào khác để thực hiện. Matlab đã cho tôi . 0.007164820144202

Tôi biết Matlab là phần mềm tốt, nhưng tôi đã nghe nói rằng tích phân ba số khó thực hiện chính xác và các nhà toán học được cho là nghi ngờ, vì vậy tôi muốn một số cách để xác minh tính chính xác của câu trả lời này. Các tích phân đưa ra giá trị mong đợi của một thử nghiệm nhất định (nếu có ai muốn, tôi có thể chỉnh sửa câu hỏi này để mô tả thử nghiệm): Tôi đã triển khai thử nghiệm trong Matlab bằng cách sử dụng các số được tạo ngẫu nhiên, một triệu lần và tính trung bình các kết quả. Tôi đã lặp lại quá trình này bốn lần. Đây là kết quả (tôi xin lỗi nếu tôi sử dụng từ "dùng thử" không đúng cách):

0.007133292603256

0.007120455071989

0.007062595022049

0.007154940168452

0.007215000289130

Mặc dù mỗi thử nghiệm sử dụng một triệu mẫu, các giá trị mô phỏng chỉ đồng ý ở chữ số có nghĩa đầu tiên. Chúng không đủ gần nhau để tôi xác định xem tích phân ba số có chính xác không.

Vì vậy, bất cứ ai có thể cho tôi biết liệu tôi có thể tin tưởng vào kết quả của "triplequad" ở đây không, và trong những trường hợp nào người ta có thể tin tưởng nó nói chung?

Một gợi ý tôi nhận được tại Math Stack Exchange là dùng thử các phần mềm khác như Mathematica, Octave, Maple và SciPy. Đây có phải là lời khuyên tốt? Có phải mọi người thực sự làm công việc số trong Mathematica và Maple? Octave là một loại bản sao Matlab, vì vậy tôi có thể giả sử nó sử dụng cùng một thuật toán tích hợp không? Tôi thậm chí chưa từng nghe về SciPy trước đây và sẽ đánh giá cao bất kỳ ý kiến ​​nào về nó.


0.007163085468

LATEX in Stack Exchange. Can you use the "aligned" environment here? I tried, and I couldn't get it to work.


2
Your simulation results are perfectly consistent with the numerical value returned by Matlab: their mean of 0.00713726 is just 1.11 standard errors less than what Matlab returned. FWIW, Mathematica returns 0.00716308537. It can also evaluate these integrals symbolically in terms of polynomials and error functions.
whuber

@whuber Cảm ơn. Tôi có thể thề rằng tôi đã thử nó một cách tượng trưng trong Maple và Maple không thể làm điều đó. Tôi sẽ thử lại trong Maple và nếu nó không hoạt động, tôi sẽ thử nó trong Mathematica. BTW, tôi đã thực hiện một tích phân tương tự trong Maple và tôi đã nhận được một câu trả lời tượng trưng rất lớn. Nó dường như là một tổng và sự khác biệt của những con số rất lớn với tổng số khá lớn. Tôi nghi ngờ lỗi vòng có thể có trong câu trả lời cuối cùng. Trong một vấn đề như thế này, bạn nên sử dụng câu trả lời tượng trưng, ​​hay chỉ làm số nguyên?
Stefan Smith

Câu trả lời tượng trưng có lợi thế là sự kết hợp của các chức năng mà (thường) có thể được tính toán một cách hiệu quả với độ chính xác tùy ý. Thông thường, giải pháp biểu tượng cũng cho phép tính toán lại nhanh chóng khi các tham số được thay đổi. Vì những lý do này, thường đáng để tìm kiếm một giải pháp tượng trưng.
whuber

@whuber: Tôi đã thử thực hiện một số tích phân cơ bản tương đương (thay đổi một số hằng số và loại bỏ một số hằng số nhân) trong Mathematica và Mathicala chỉ có thể thực hiện hai tích phân bên ngoài của tích phân thứ nhất và dường như đã bị đình trệ ở tích phân thứ hai. Tôi đã đăng mã và kết quả của tôi ở trên.
Stefan Smith

1
Chỉnh sửa ngày 2 tháng 3: Bằng cách giảm tích phân ba một cách tượng trưng thành một tích phân duy nhất (trong nửa đầu tích phân của bạn), bạn đã hoàn thành rất nhiều. Tích phân hoạt động rất độc đáo và có thể được tích hợp số với độ chính xác cực cao trong một phần của giây.
whuber

Câu trả lời:


9

Trước hết, không phải phần mềm (hoặc ít nhất là không nên) quyết định chất lượng của giải pháp cho một vấn đề, đó là chất lượng và sự phù hợp của thuật toán được áp dụng. Bạn nên kiểm tra thuật toán nào đang được sử dụng bởi triplequad trong Matlab (tôi đoán nó sử dụng một phương trình bậc hai thích nghi Gaussian lồng nhau). Và bạn nên kiểm tra dung sai yêu cầu là gì (yêu cầu dung sai tuyệt đối và tương đối). Rất có thể, theo mặc định, nó chỉ yêu cầu10-số 8 độ chính xác tương đối.

Câu trả lời đến từ Maple có lẽ được thực hiện bởi Đại số máy tính và có lẽ nó có thể tìm ra một giải pháp khép kín sau đó được đánh giá bằng cách sử dụng dấu phẩy động chính xác kép. Điều này có lợi thế là bạn không xấp xỉ tích phân bằng phép tính tổng hữu hạn (và do đó đưa ra các lỗi gần đúng) nhưng Hệ thống đại số máy tính sẽ tìm thấy một biểu thức cho tích phân mà sau đó có thể được đánh giá. Tất nhiên, phải cẩn thận khi đánh giá biểu thức này (để làm tròn).

Nếu bạn muốn làm điều này với SciPy, bạn cũng cần phải sử dụng phương pháp bậc hai thích nghi Gaussian lồng nhau bằng cách sử dụng các thường trình Quadpack (Piessens et al.) Bên dưới. Trong Octave, bạn sẽ có cách tiếp cận tương tự. Và tôi sẽ không quá ngạc nhiên nếu Matlab còn sử dụng làm công cụ Quadpack vuông góc (vì nó là những tài liệu tham khảo).


@GretVdE: Cảm ơn thông tin. Tôi đã thử đánh giá tích phân trước tiên và Maple không thể làm điều đó (vì vậy có lẽ không thể, sử dụng các hàm tiêu chuẩn), vì vậy tôi đã yêu cầu Maple thực hiện bằng số. Tôi không biết nó sử dụng thuật toán gì.
Stefan Smith

@StefanSmith: bạn có thể tìm hiểu bằng cách đặt thông tin chi tiết trong Maple : infolevel[`evalf/int`] := 4. Bạn có chắc chắn Mape không thể tìm thấy một giải pháp khép kín? Tích phân dường như không quá phức tạp. Bạn có thể công khai tờ Maple của mình ở đâu đó không?
GertVdE

@StefanSmith: Tôi sẽ đăng mã Maple trong câu hỏi trên.
GertVdE

Tôi không thể khiến Maple hoạt động trên hệ thống của mình ngay bây giờ, nhưng tôi đã thử tích hợp tương đương trong Mathicala và Mathicala chỉ thực hiện hai tích phân ba bên trong đầu tiên và bị đình trệ trong tích phân ba thứ hai. Xin vui lòng xem câu hỏi được chỉnh sửa.
Stefan Smith
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.