Nếu bạn có MMA V8 bạn có thể sử dụng mới DistributionFitTest
disFitObj = DistributionFitTest[daList, NormalDistribution[a, b],"HypothesisTestData"];
Show[
SmoothHistogram[daList],
Plot[PDF[disFitObj["FittedDistribution"], x], {x, 0, 120},
PlotStyle -> Red
],
PlotRange -> All
]
disFitObj["FittedDistributionParameters"]
(* ==> {a -> 55.8115, b -> 20.3259} *)
disFitObj["FittedDistribution"]
(* ==> NormalDistribution[55.8115, 20.3259] *)
Nó có thể phù hợp với các bản phân phối khác nữa.
Một chức năng hữu ích V8 là HistogramList
, mà cung cấp cho bạn với các dữ liệu di chuyển chuột đã Histogram
's. Nó cũng mất khoảng tất cả các tùy chọn của Histogram
.
{bins, counts} = HistogramList[daList]
(* ==> {{0, 20, 40, 60, 80, 100}, {2, 10, 20, 17, 7}} *)
centers = MovingAverage[bins, 2]
(* ==> {10, 30, 50, 70, 90} *)
model = s E^(-((x - \[Mu])^2/\[Sigma]^2));
pars = FindFit[{centers, counts}\[Transpose],
model, {{\[Mu], 50}, {s, 20}, {\[Sigma], 10}}, x]
(* ==> {\[Mu] -> 56.7075, s -> 20.7153, \[Sigma] -> 31.3521} *)
Show[Histogram[daList],Plot[model /. pars // Evaluate, {x, 0, 120}]]
Bạn cũng có thể thử NonlinearModeFit
cho phù hợp. Trong cả hai trường hợp, bạn nên sử dụng các giá trị tham số ban đầu của riêng mình để có cơ hội tốt nhất mà bạn kết thúc với sự phù hợp tối ưu trên toàn cầu.
Trong V7 không có HistogramList
nhưng bạn có thể nhận được danh sách tương tự sử dụng this:
Chức năng fh trong Histogram [dữ liệu, bspec, fh] được áp dụng cho hai đối số: một danh sách các thùng {{Subscript [b, 1], Subscript [b, 2]}, {Subscript [b, 2], Subscript [b, 3]}, [Ellipsis]} và tương ứng danh sách đếm {Subscript [ c, 1], Chỉ số [c, 2], [Dấu ba chấm]}. Chức năng phải trả về một danh sách chiều cao được sử dụng cho từng số Chỉ số [c, i].
này có thể được sử dụng như sau (from my earlier answer):
Reap[Histogram[daList, Automatic, (Sow[{#1, #2}]; #2) &]][[2]]
(* ==> {{{{{0, 20}, {20, 40}, {40, 60}, {60, 80}, {80, 100}}, {2,
10, 20, 17, 7}}}} *)
Tất nhiên, bạn vẫn có thể sử dụng BinCounts
nhưng bạn bỏ lỡ các thuật toán di chuyển chuột tự động của MMA. Bạn phải cung cấp một di chuyển chuột của riêng bạn:
counts = BinCounts[daList, {0, Ceiling[Max[daList], 10], 10}]
(* ==> {1, 1, 6, 4, 11, 9, 9, 8, 5, 2} *)
centers = Table[c + 5, {c, 0, Ceiling[Max[daList] - 10, 10], 10}]
(* ==> {5, 15, 25, 35, 45, 55, 65, 75, 85, 95} *)
pars = FindFit[{centers, counts}\[Transpose],
model, {{\[Mu], 50}, {s, 20}, {\[Sigma], 10}}, x]
(* ==> \[Mu] -> 56.6575, s -> 10.0184, \[Sigma] -> 32.8779} *)
Show[
Histogram[daList, {0, Ceiling[Max[daList], 10], 10}],
Plot[model /. pars // Evaluate, {x, 0, 120}]
]
Như bạn có thể thấy các thông số phù hợp có thể phụ thuộc khá nhiều vào sự lựa chọn di chuyển chuột của bạn.Riêng tham số tôi gọi là s
phụ thuộc rất lớn vào lượng thùng. Càng nhiều thùng, số lượng thùng rác càng thấp và giá trị của s
sẽ càng thấp.
cảm ơn bạn rất nhiều, điều này rất hữu ích. – 500