Matlab中的Polyfit与Polyval

Matlab中的Polyfit与Polyval,matlab,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必须相

我想了解函数polyvalpolyfit。 首先,我在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必须相同

第三个输出参数将自变量从

y

这称为标准化,新的
标准化
0
作为平均值,而
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

使用
polyval()

  • 不进行归一化,只需使用从拟合中获得的系数即可
  • 使用归一化,使用从拟合和 由
    mu
    指定的自变量
    y
    的实际平均值和标准偏差
由于
y
不能很好地拟合高斯分布,因此这两种估计是相似的,但并不完全相同

图表
函数可以根据您指定的输出参数数量更改其输出
p
在这里是不同的,因为第三个输出参数改变了函数的操作方式。
% 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
p_original          =   polyfit(y, x, 5);
original_prediction =   polyval(p_original, y);
[p,~,mu]               =   polyfit(y, x, 5);
normalized_prediction  =   polyval(p, y, [], mu);