Questa non è una risposta precisa a questa domanda, ma da quando sono arrivato qui sulla base di una ricerca, vorrei rispondere alla relativa domanda di come creare (non in forma) una funzione lineare a tratti che è intesa a rappresentare la media (o mediana, o qualche altra altra funzione) dei dati di intervallo in un grafico a dispersione.
In primo luogo, un'alternativa correlata ma più sofisticata che utilizza la regressione, che apparentemente ha some MATLAB code listed on the wikipedia page, è Multivariate adaptive regression splines.
La soluzione qui è solo per calcolare la media su intervalli sovrapposti per ottenere punti
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
Per esempio, per calcolare la media su alcune X associato e dati Y che avevo a portata di mano con intervalli di lunghezza 0.1 avente approssimativamente 1/3 sovrappongono tra loro (vedi immagine scatter) con:

[x, y] = intervalAggregate (Xdat, Ydat, @mean, 0,1, 0,333)
x =
colonne da 1 a 8
012.397.
colonne 9 attraverso 15
0.3182 0.3561 0.3875 0.4178 0.4494 0.4671 0.4822
y =
colonne da 1 a 8
0.9992 0.9983 0.9971 0.9955 0.9927 0.9905 0.9876 0.9846
colonne 9 a 15
0.9803 0.9750 0.9707 0.9653 0.9598 0.9560 0.9537
Vediamo che al crescere di x, y tende a diminuire leggermente y. Da lì, è abbastanza facile disegnare segmenti di linea e/o eseguire un altro tipo di levigatura.
(Si noti che non ha cercato di vettorizzare di questa soluzione,. Una versione molto più veloce potrebbe essere assunta se Xdata è ordinato)
La ringrazio molto per le spiegazioni. Scusa per il mio sfondo poco profondo per l'interpolazione lineare e Matlab. Penso che quello che hai fatto sia fantastico. Tuttavia, ho difficoltà a modificare i miei codici di conseguenza. I miei dati originali, y, sono un vettore di riga di 1 * 73 la cui distribuzione sembra la trama normale nella soluzione di cjh. Puoi indicare come puoi modificare i tuoi codici per mostrare il risultato finale in un grafico degli assi log-log (non il log (log (x)) calcolo)? Grazie mille ancora, – Cassie