首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Matlab曲线拟合中,向量必须是相同的长度误差。

在Matlab曲线拟合中,向量必须是相同的长度误差。
EN

Stack Overflow用户
提问于 2022-06-01 19:59:44
回答 1查看 342关注 0票数 0

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

这是我的密码

代码语言:javascript
复制
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;

似乎我有向量大小的问题,因为它给了我错误

代码语言:javascript
复制
Error using plot
    Vectors must be the same length.

注意,我简化了y_,因为mu和标准偏差是已知的。

情节:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-02 07:47:26

首先,对你的问题做一些调整:

  • 你不是在尝试做曲线拟合。您想要做的(在我看来)是将一个概率密度函数叠加在一个直方图上,该直方图是从同一分布中获取随机点(参数为(mu,sigma)的正态分布)。这两条曲线确实应该重叠,因为它们代表着相同的事物,只有一条是解析的,另一条是数值计算的。
  • hist文档所示,不建议使用hist,您应该使用柱状图

第一步:生成随机数据

知道分布是正态分布,我们可以使用MATLAB随机函数进行如下操作:

代码语言:javascript
复制
N = 150;
rng('default') % For reproducibility
mu = 5;
sigma = 2;
r = random('Normal',mu,sigma,N,1);

第二步:绘制直方图

因为我们不只是想要计算每个bin中的元素,还需要一个概率密度函数的感觉,所以我们可以使用'Normalization' 'pdf'参数

代码语言:javascript
复制
Nbins = 25;
f=histogram(r,Nbins,'Normalization','pdf');
hold on

在这里,我宁愿指定多个回收箱,也不愿自己指定回收箱,因为您永远不会事先知道数据的平均值有多远。

最后一步:在直方图上覆盖概率密度函数。

直方图已经与概率密度函数一致,只需覆盖密度函数就足够了:

代码语言:javascript
复制
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.000Nbins = 50

如果出于某种原因,您希望使用旧hist()函数

旧的hist()函数不能处理规范化,所以您必须手工完成,通过规范化密度函数来适应直方图:

代码语言:javascript
复制
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-');

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72467413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档