2015-09-14 15 views
5

tôi tạo hai hàm fx và fy như sau:hành vi kỳ lạ trong chức năng không thể thiếu trong MATLAB

fx = @(x) ncx2pdf(x, 10, 1); 
fy = @(y) ncx2pdf(y + 25, 10, 10); 

Sau đó, tôi xác định fs chức năng như sau:

shift = 0 
fs = @(s) fx(s) .* fy(shift - s) 

Lưu ý rằng fs luôn là dương tính (sản phẩm của hai hàm mật độ xác suất). Nếu tôi tính toán:

integral(fs, -Inf, 100) 

Tôi có được giá trị thực sự 0,0413, nhưng nếu tôi tính toán

integral(fs, -Inf, 1000) 

Tôi lấy 0. Tại sao hành vi kỳ lạ này xảy ra sử dụng chức năng không thể thiếu? Lưu ý rằng nếu tôi tính

integral(fs, -Inf, Inf) 

Tôi có giá trị thực 0.0413.

+1

". Tại sao "thực sự là một câu hỏi hay! Nhưng như một giải pháp đầu tiên bạn có thể xem xét 'trapz': ví dụ: 'trapz (fs (-1000: 1000))' – thewaywewalk

+1

Tôi tin rằng lỗi (trả về 0) xuất phát từ việc cố gắng biểu diễn một giá trị nhỏ hơn một 'double' có thể giữ. Giá trị nhỏ nhất là theo thứ tự 'Xe-308' trên tài liệu Matlab. Tôi đã có thể sản xuất 1.9e-323 trước khi tất cả tôi đã trở lại là 0. – Matt

+1

@ Matt có lẽ là đi đúng hướng. Bạn phải cẩn thận với việc tích hợp số các hàm với các giá trị nhỏ. Tôi cũng đã thấy điều này bằng các ngôn ngữ khác. Vì vậy, để xác minh, tính giá trị của một "slice" của hàm tích phân số và xem giá trị của nó là gì. –

Trả lời

-1

"Công trình bậc hai bằng cách chia tách khoảng cách xa nhau và xấp xỉ tích phân của mỗi phân đoạn. Ước tính được thực hiện bằng cách phân loại các khoảng con và sử dụng một số dạng xấp xỉ tích phân (Riemann khoản tiền ...). sẽ có một số lỗi và điều này phụ thuộc vào việc phân vùng, do đó chúng tôi là tốt nhất để giữ giới hạn của chúng ta về hội nhập gần gũi hơn với những điểm mà sẽ đóng góp nhiều nhất vào không thể thiếu "Brendan Hamm

Ref: http://www.mathworks.com/matlabcentral/answers/242910-strange-behaviour-in-integral-function-in-matlab#answer_192302