You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab曲线拟合报Vectors must be the same length错误求解

问题描述

对随机生成的正态分布数据做曲线拟合时触发向量尺寸不匹配报错,拟合目标为正态分布概率密度函数:
正态分布目标函数
运行后仅能画出直方图散点,无法正常绘制拟合曲线,异常运行效果如下:
异常运行结果

原始实现代码

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.

错误成因

报错和显示异常来自两处逻辑问题:

  • 拟合曲线的x轴序列生成逻辑错误:代码用未排序的随机样本首尾值x(1)、x(end)作为x_的区间端点,由于随机样本的顺序完全打乱,当x(1) > x(end)时,Matlab的冒号运算符会返回空数组,直接触发绘图向量长度不匹配错误;即使x(1) < x(end),该随机区间也和直方图使用的固定bin范围不对齐,无法和直方图匹配。
  • 纵轴尺度不匹配:代码计算的y_是标准正态分布概率密度,取值范围在0~0.2区间,而直方图纵轴f是分箱的样本计数,总和为100,二者尺度差两个数量级,就算长度匹配,曲线也会紧贴x轴,完全达不到拟合显示效果。
修复方案
  • 拟合曲线的x轴范围直接对齐直方图的分箱区间,不再使用随机样本的首尾值,从根源避免空数组和范围不对齐问题;
  • 对概率密度值做尺度缩放:概率密度乘以分箱宽度得到单个样本落在对应分箱的概率,再乘以总样本数,就得到和直方图频数尺度一致的理论拟合值。

修复后可直接运行的代码如下:

N = 100;
mu = 5; stdev = 2;
x = mu+stdev*randn(N,1);
bin = mu-6*stdev:0.5:mu+6*stdev;
bin_width = 0.5;
f = hist(x,bin);
plot(bin,f,'bo'); hold on;

% 拟合曲线x轴和直方图范围对齐,需要更平滑的曲线可把步长改小为0.1
x_ = mu-6*stdev:0.1:mu+6*stdev; 
% 缩放概率密度到频数尺度
y_ = N * bin_width * (1./(stdev*sqrt(2.*pi))).*exp(-((x_-mu).^2)./(2*stdev^2)); 
plot(x_,y_,'b-','LineWidth',1.5); 
hold off;
xlabel('x'); ylabel('频数');
legend('样本直方图','理论正态分布拟合曲线','Location','best');

运行后即可得到直方图和正态拟合曲线完全对齐的正常结果。

内容的提问来源于stack exchange,提问作者lambduh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 00:33:35