To nie jest dokładną odpowiedź na to pytanie, ale ponieważ ja przybyłem tutaj opiera się na poszukiwaniu, chciałbym odpowiedzieć na powiązane pytanie, w jaki sposób tworzyć (nie pasuje) Â elementarna funkcja liniowa, która ma reprezentować średnią (lub medianę, lub jakąś inną inną funkcję) danych interwałowych na wykresie punktowym.
Po pierwsze, powiązane, ale bardziej wyrafinowane alternatywne wykorzystanie regresji, która najwyraźniej ma wartość some MATLAB code listed on the wikipedia page, to Multivariate adaptive regression splines.
Rozwiązaniem tego problemu jest po prostu obliczyć średnią na nakładających odstępach czasu, aby zdobyć punkty
function [x, y] = intervalAggregate(Xdata, Ydata, aggFun, intStep, intOverlap)
% intOverlap in [0, 1); 0 for no overlap of intervals, etc.
% intStep this is the size of the interval being aggregated.
minX = min(Xdata);
maxX = max(Xdata);
minY = min(Ydata);
maxY = max(Ydata);
intInc = intOverlap*intStep; %How far we advance each iteraction.
if intOverlap <= 0
intInc = intStep;
end
nInt = ceil((maxX-minX)/intInc); %Number of aggregations
parfor i = 1:nInt
xStart = minX + (i-1)*intInc;
xEnd = xStart + intStep;
intervalIndices = find((Xdata >= xStart) & (Xdata <= xEnd));
x(i) = aggFun(Xdata(intervalIndices));
y(i) = aggFun(Ydata(intervalIndices));
end
Na przykład, aby obliczyć średnią nad jakimś sparowany X i Y danych miałem pod ręką z przerwami o długości 0.1 mający w przybliżeniu 1/3 zachodzą na siebie (patrz rozpraszania obrazu):
[x, y] = intervalAggregate (XDAT, Ydat, @mean, 0,1, 0,333)
x =
kolumny 1 do 8
0.0552 0.0868 0.1170 0.1475 0.1844 0.2173 0.2498 0.2834
kolumny 9 do 15
0.3182 0.3561 0.3875 0.4178 0.4494 0.4671 0.4822
Y =
kolumny od 1 do 8
0.9992 0.9983 0.9971 0.9955 0.9927 0.9905 0.9876 0.9846
kolumny 9 do 15
0.9803 0.9750 0.9707 0.9653 0.9598 0.9560 0.9537
Widać, że jako X wzrostów y dąży do zmniejszenia nieznacznego y. Stamtąd łatwo jest narysować odcinki linii i/lub wykonać inny rodzaj wygładzania.
(Zauważ, że nie próbują wektorować tego rozwiązania, a. Znacznie szybsza wersja mogłaby przyjąć jeśli xdata jest posortowana)
Dziękuję bardzo za wyjaśnienia. Przepraszamy za moje płytkie tło za interpolację liniową i Matlaba. Myślę, że to, co zrobiłeś, jest świetne. Jednak trudno mi odpowiednio zmodyfikować moje kody. Moje oryginalne dane, y, są wektorami rzędu 1 * 73, których rozkład wygląda jak normalny wykres w rozwiązaniu cjh. Czy możesz wskazać, w jaki sposób możesz modyfikować swoje kody, aby pokazać wynik końcowy w wykresie osi log-log (nie logi (log (x)))? Jeszcze raz bardzo dziękuję, – Cassie