Matlab中的Polyfit和Polyval

时间:2019-06-22 09:11:27

标签: matlab

我想了解功能 polyval polyfit 。 首先,我在Matlab中进行以下编程:

x               = (0:.01:95)/180*pi;
y               = polyval(cooefs_w_0(end:-1:1), x);
[p,~,mu]        = polyfit(y, x, 5);

我的第一个问题是:如果我编写此行,polyfit的结果将不相同:

p               = polyfit(y, x, 5);

为什么?变量 p 必须相同。

1 个答案:

答案 0 :(得分:2)

3rd输出参数将自变量更改为

y

normalized_y = (y-means(y))/std(y)

这称为归一化,新的normalized_y0作为平均值,将1作为标准偏差

为什么要归一化?

  • 如果自变量y可以适合高斯分布,则将得出更好多项式系数 比非归一化方法估算
  • 如果它不能适合高斯分布,则无需 归一化y,因为归一化方法给出的结果与非归一化方法

证明 [p, ~mu] = polyfit(...) 使用规范化输入

% I increase the step to make the plot clear
x               = (0:5:95)/180*pi;

cooefs_w_0 = [1,4, 5, 9];
y               = polyval(cooefs_w_0(end:-1:1), x);
% y normalization
normalized_y = (y-mean(y))/std(y);

[p,~,mu]        = polyfit(y, x, 5);
% polyfit with one output argument but input changed to the normalized y
p_normalized        = polyfit(normalized_y, x, 5);

% Check if the coefficients are the same 
isequal(p, p_normalized);
% ans =

  logical

   1

使用 x

估算因变量polyval()
  • 不进行归一化 ,只需使用从拟合中获得的系数
p_original          =   polyfit(y, x, 5);
original_prediction =   polyval(p_original, y);
  • 通过归一化 ,使用从拟合和 y指定的自变量mu的真实均值和标准差
[p,~,mu]               =   polyfit(y, x, 5);
normalized_prediction  =   polyval(p, y, [], mu);

由于y不能很好地拟合高斯分布,因此这两个估计值相似但不完全相同

  

图表enter image description here