2010-12-31 41 views
33

tôi ngẫu nhiên vẽ một Sin [x] chức năng trong Mathematica 7 và đây là những gì nó cho thấy:Strange Sin [x] đồ thị trong Mathematica

http://i.stack.imgur.com/hizGw.png

Lưu ý những khiếm khuyết có thể nhìn thấy ở khoảng x = -100.

Đây là một zoom của phần khiếm khuyết, cho thấy rõ ràng rằng Mathematica vì một lý do sử dụng độ phân giải thấp hơn nhiều giữa các điểm có:

mesh

Bất kỳ ai biết tại sao điều này xảy ra và tại sao chỉ x = -100?

Lưu ý: tương tự xảy ra ở Wolfram Alpha, nhân tiện.

+0

Dường như là bí danh đơn giản đối với tôi. Bạn có thực sự tin rằng Mathematica sẽ có một lỗi trong một cái gì đó như là cơ bản này? –

+0

Không, đó là lý do tại sao tôi rất ngạc nhiên. Nếu nó là răng cưa, nó sẽ không tuy nhiên có xu hướng xuất hiện nhiều hơn nếu khoảng thời gian đã lớn hơn? Nếu tôi thay đổi xmin, xmax thành -60 Pi/60 Pi, chẳng hạn, nó biến mất. – houbysoft

+1

@houbysoft Tôi không có Mathematica, một thực tế không biết gì về nó, nhưng tôi đề nghị bạn hãy thử các giá trị khác nhau của tùy chọn PlotPoints –

Trả lời

60

Câu trả lời ngắn: mặc định âm mưu chính xác là không đủ cho chức năng đó, vì vậy tăng nó như sau

Plot[Sin[x], {x, -42 Pi, 42 Pi}, PlotPoints -> 100] 

Long trả lời: Plot tác phẩm bằng cách đánh giá các chức năng tại một tập hữu hạn các điểm, và kết nối những điểm bởi những đường thẳng. Bạn có thể thấy những điểm được sử dụng bởi Plot bằng cách sử dụng lệnh sau

Plot[Sin[x], {x, -42 Pi, 42 Pi}, Mesh -> All, PlotStyle -> None, 
MeshStyle -> Black] 

plot

Bạn có thể thấy rằng đối với chức năng của bạn, những điểm mà hàm được đánh giá là "bỏ lỡ đỉnh" và giới thiệu một lỗi xấp xỉ lớn. Thuật toán được sử dụng để chọn vị trí của các điểm rất đơn giản và tình huống này có thể xảy ra khi hai đỉnh được đặt cách nhau gần nhau hơn PlotRange/PlotPoints.

Plot bắt đầu với 50 điểm cách đều nhau và sau đó chèn thêm điểm vào tối đa MaxRecursion giai đoạn. Bạn có thể thấy "lỗ" này xuất hiện như thế nào nếu bạn vẽ vùng cho các cài đặt khác nhau của MaxRecursion.

plot1 = Plot[Sin[x], {x, -42 Pi, 42 Pi}, PlotPoints -> 100, 
    PlotStyle -> LightGray]; 
Table[plot2 = 
    Plot[Sin[x], {x, -42 Pi, 42 Pi}, Mesh -> All, MeshStyle -> Thick, 
    PlotStyle -> Red, MaxRecursion -> k]; 
    Show[plot1, plot2, PlotRange -> {{-110, -90}, {-1, 1}}, 
    PlotLabel -> ("MaxRecursion " <> ToString[k])], {k, 0, 
    5}] // GraphicsColumn 

plot

Theo cuốn sách Mathematica Stan Wagon của, Plot quyết định xem có nên thêm một điểm nửa chừng thêm giữa hai điểm liên tiếp nếu góc giữa hai đoạn thẳng mới sẽ được nhiều hơn 5 độ . Trong trường hợp này, cốt truyện không may mắn với vị trí điểm ban đầu và phân khu không đáp ứng được tiêu chí đó. Bạn có thể thấy rằng việc chèn một điểm đánh giá duy nhất vào giữa lỗ sẽ tạo ra âm mưu gần như giống hệt nhau.

Cách để tăng góc sử dụng để quyết định khi nào chia nhỏ bằng cách sử dụng tùy chọn Refinement (Tôi đã nhận nó từ cuốn sách, nhưng nó dường như không được ghi lại trong sản phẩm)

plot1 = Plot[Sin[x], {x, -42 Pi, 42 Pi}, PlotPoints -> 100, 
    PlotStyle -> LightGray]; 
Show[plot1, 
Plot[Sin[x], {x, -42 Pi, 42 Pi}, Mesh -> All, MeshStyle -> Thick, 
    PlotStyle -> Red, MaxRecursion -> 3, 
    Method -> {Refinement -> {ControlValue -> 4 \[Degree]}}], 
PlotRange -> {{-110, -90}, {-1, 1}}] 

Ở đây bạn có thể thấy rằng tăng nó bằng 1 độ từ mặc định 5 sửa lỗ.

plot

+0

Ah, phần cập nhật của câu trả lời chính xác là những gì tôi đang tìm kiếm (tôi biết phần còn lại, khi đã triển khai một máy tính vẽ đồ thị tự làm điều này, nhưng tôi chưa bao gồm một cơ chế tương tự như MaxRecursion, giải thích không chính xác). – houbysoft

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