Matlab中的Polyfit与Polyval
我想了解函数polyval和polyfit。 首先,我在Matlab中编程以下几行: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必须相
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);