我在曲线拟合上遇到了问题,我的随机数据在函数上

这是我的密码
N = 100;
mu = 5; stdev = 2;
x = mu+stdev*randn(N,1);
bin=mu-6*stdev:0.5:mu+6*stdev;
f=hist(x,bin);
plot(bin,f,'bo'); hold on;
x_ = x(1):0.1:x(end);
y_ = (1./sqrt(8.*pi)).*exp(-((x_-mu).^2)./8);
plot(x_,y_,'b-'); hold on;似乎我有向量大小的问题,因为它给了我错误
Error using plot
Vectors must be the same length.注意,我简化了y_,因为mu和标准偏差是已知的。
情节:

发布于 2022-06-02 07:47:26
首先,对你的问题做一些调整:
(mu,sigma)的正态分布)。这两条曲线确实应该重叠,因为它们代表着相同的事物,只有一条是解析的,另一条是数值计算的。hist,您应该使用柱状图第一步:生成随机数据
知道分布是正态分布,我们可以使用MATLAB随机函数进行如下操作:
N = 150;
rng('default') % For reproducibility
mu = 5;
sigma = 2;
r = random('Normal',mu,sigma,N,1);第二步:绘制直方图
因为我们不只是想要计算每个bin中的元素,还需要一个概率密度函数的感觉,所以我们可以使用'Normalization' 'pdf'参数
Nbins = 25;
f=histogram(r,Nbins,'Normalization','pdf');
hold on在这里,我宁愿指定多个回收箱,也不愿自己指定回收箱,因为您永远不会事先知道数据的平均值有多远。

最后一步:在直方图上覆盖概率密度函数。
直方图已经与概率密度函数一致,只需覆盖密度函数就足够了:
x_ = linspace(min(r),max(r),100);
y_ = (1./sqrt(2*sigma^2*pi)).*exp(-((x_-mu).^2)./(2*sigma^2));
plot(x_,y_,'b-');用N = 150

用N = 1500

使用N = 150.000和Nbins = 50

如果出于某种原因,您希望使用旧hist()函数
旧的hist()函数不能处理规范化,所以您必须手工完成,通过规范化密度函数来适应直方图:
N = 1500;
% rng('default') % For reproducibility
mu = 5;
sigma = 2;
r = random('Normal',mu,sigma,1,N);
Nbins = 50;
[~,centers]=hist(r,Nbins);
hist(r,Nbins); hold on
% Width of bins
Widths = diff(centers);
x_ = linspace(min(r),max(r),100);
y_ = N*mean(Widths)*(1./sqrt(2*sigma^2*pi)).*exp(-((x_-mu).^2)./(2*sigma^2));
plot(x_,y_,'r-');

https://stackoverflow.com/questions/72467413
复制相似问题