Plotting a curve with just x values
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I want to fit a curve to a vector of x values that I have. I have a vector of x values which contains the frequency of occurence of each value. I mean if the vector is like this:
[3,3,4,5], it means that the height over x = 3 must be double than over x = 4 and x = 5. Now I want to plot the best curve fitting this vector.
My idea was to sort the vector increasingly and count the number of occurrences for each x value and plot the curve but even then I don't know how to make it a continous function.
Thanks!
3 commentaires
dpb
le 4 Fév 2021
"i want to predict the function...over the whole x axis"
What does that mean, specifically? What do you expect a functional form to be? Extrapolation is an extremely risky proposition.
Réponse acceptée
dpb
le 4 Fév 2021
Modifié(e) : dpb
le 6 Fév 2021
Something like
x=[3,3,4,5];
n=histc(x,unique(x,'stable'));
v=[1:numel(n)];
m=fitlm(v,n);
bar(n);
xlim(xlim+[1 -1]*0.5)
hold on
line(v,feval(mdl,v),'color','r')
set(get(gca,'YAxis'),'TickLabelFormat','%.1f')
maybe?

v=[0,0,1,2,3,2,-1,2];
x=unique(v);
n=histc(v,x);
stem(x,n)
xlim([x(1) x(end)]+[-0.25 0.25])
ylim([0 max(n)+0.1])
xticks(x)
yticks([0:max(n)])
results in

This idea of predicting this outside the range would appear to be a task for the Crystal Ball Toolbox that has yet to be released.
ADDENDUM: Mayhaps I was reading the original Q? too literally on the expectations...what about
xq=linspace(x(1),x(end));
ns=interp1(x,n,xq,'spline');
nc=interp1(x,n,xq,'pchip');
hold on
hL=plot(xq,ns,'-r',xq,nc,'-c');
ylim([0 ceil(max(nn))+0.1])
yticks([0:ceil(max(nn))])
legend('Data','Spline Interpolant','pchip Interpolant')
which results in

?
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Fit Postprocessing dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
