2011-10-16 30 views
7

Tôi đang cố tính toán tích phân xác định. Tôi viết:Nintegrate không hội tụ gần một điểm không nằm trong tích phân xác định của tôi?

NIntegrate[expression, {x, 0, 1}, WorkingPrecision -> 100] 

"biểu thức" được mô tả bên dưới. WorkPrecision đã được thêm vào để trợ giúp với lỗi khác.

tôi nhận được một lỗi:

"NIntegrate::ncvb: NIntegrate failed to converge to prescribed accuracy after 9 recursive bisections in x near {x} = {<<156>>}. NIntegrate obtained <<157>> and <<160>> for the integral and error estimates. >>"

Tại sao tôi nhận được lỗi này cho near{x} = {<<156>>} khi tôi chỉ nhìn vào 0<x<1? Và các dấu ngoặc nhọn đôi xung quanh con số có ý nghĩa gì?

Biểu thức thực sự dài, vì vậy tôi nghĩ sẽ hiển thị ý nghĩa hơn khi tạo nó. Đây là phiên bản cơ bản (một số số mũ tôi cần phải là biến, nhưng đây là những giá trị thấp nhất và tôi vẫn nhận được lỗi).

F[n_] := (1 - (1 - F[n-1])^2)^2; 
F[0] = x; 
Expr[n_]:= (1/(1-F[n]))Integrate[D[F[n],x]*x,{x,x,1}]; 

Tôi gặp lỗi khi tích hợp Expr [3] hoặc cao hơn. Kỳ lạ thay, khi tôi sử dụng Tích hợp thông thường và sau đó // N ở cuối, tôi nhận được một số phức cho n = 2.

+0

Sau một số thử nghiệm, lỗi sẽ biến mất trong một số trường hợp nếu tôi tăng độ chính xác làm việc, mặc dù đó không phải là thông báo lỗi giúp bạn thực hiện. Khi tôi vẽ khoảng thời gian, nó đi ra rất dao động trong một phạm vi nhất định, mặc dù nó không nên. Đó là một phần nhỏ mặc dù ... có lẽ nó đã làm với độ chính xác được như vậy mà các denom. làm tròn số không ở một số điểm? –

+3

Mẹo chung quan trọng trong các tình huống này: Khi bạn tăng WorkingPrecision, lưu ý rằng theo mặc định, PrecisionGoal cao hơn được sử dụng, điều này có thể làm cho vấn đề khó khăn hơn nhiều. Nếu bạn chỉ yêu cầu, ví dụ: 6 con số đáng kể, thêm một thiết lập rõ ràng PrecisionGoal -> 6. –

+0

@Andrew: Cảm ơn bạn! Tôi không yêu cầu nhiều chữ số, vì vậy điều đó rất hữu ích. – OctaviaQ

Trả lời

18

<<156>> không có nghĩa là tích phân đang được đánh giá tại x=156. <<>> được gọi là Skeleton và được sử dụng để cho biết rằng một đầu ra lớn đã bị chặn. Từ các tài liệu:

Skeleton[n] represents a sequence of n omitted elements in an expression printed with Short or Shallow . The standard print form for Skeleton is <<n>> .


Đến với thể thiếu của bạn, đây là lỗi mà tôi nhận được:

enter image description here

Vì vậy, bạn có thể thấy rằng số dài này đã được dập tắt trong trường hợp của bạn (tùy về sở thích của bạn). >> cuối cùng là liên kết đưa bạn đến thông báo lỗi tương ứng trong tài liệu.

Nếu bạn cố gắng những lời khuyên trong tài liệu, mà là để tăng MaxRecursion, bạn sẽ dần dần nhận được một lỗi mới ::slwcon

enter image description here

Vì vậy, điều này bây giờ nói với bạn rằng một trong hai WorkingPrecision của bạn là quá nhỏ hoặc rằng bạn có một điểm kỳ dị (được đưa ra bởi một độ chính xác làm việc nhỏ). Tăng WorkingPrecision-200 cho đầu ra sau đây:

enter image description here


Bạn có thể nhìn xa hơn một chút vào bản chất của biểu thức của bạn.

num = [email protected]@3; 
den = [email protected]@3; 
Plot[{num, den}, {x, 0, 1}, WorkingPrecision -> 100, PlotRange -> All] 

enter image description here

Vì vậy, ngoài 0.7ish, biểu hiện của bạn có tiềm năng cho các vấn đề ổn định nghiêm trọng, dẫn đến kỳ dị. Nó là tử số hơn là mẫu số, đòi hỏi độ chính xác cao để hội tụ với giá trị đúng.

num /. x -> 0.99 
num /. x -> 0.99`100 

Out[1]= -0.015625 
Out[2]= 1.2683685178049112809413795626911317545171610885215799438968\ 
06379991565*10^-14 

den /. x -> 0.99 
den /. x -> 0.99`100 

Out[3]= 1.28786*10^-14 
Out[4]= 1.279743968014714505561671861369465844697720803022743298030747945923286\ 
915425027352809730413954909*10^-14 

Bạn có thể thấy ở đây sự khác biệt giữa tử số và mẫu số khi bạn không có đủ độ chính xác, gây ra sự kỳ dị gần.

+0

Cảm ơn, yoda! Vấn đề, tại đó WorkingPrecision, lỗi trở lại cho n> 3, và khi tôi cố gắng để tăng nó, tôi nhận được tất cả các loại lỗi khác. Bạn có bất kỳ cái nhìn sâu sắc về lý do tại sao tích phân này đang gây ra những vấn đề này? – OctaviaQ

+1

Tôi chỉ cần thêm một chút chi tiết về nơi mà sự bất ổn xuất hiện trong biểu thức của bạn. – abcd

+0

cảm ơn rất nhiều !!! Hy vọng rằng chỉ một câu hỏi nữa: tại sao tử số lại thành một số âm khi không có đủ độ chính xác, chứ không phải chỉ bằng 0? Tử số là không bao giờ thực sự tiêu cực (bạn có thể nói bởi logic của biểu thức), và ước tính số tử chính xác lớn hơn là tích cực. – OctaviaQ

Các vấn đề liên quan