Matlab 为什么多项式方程的条件很差?
我有1x1024矩阵。我想估计一个多项式方程Matlab 为什么多项式方程的条件很差?,matlab,math,polynomial-math,polynomial-approximations,Matlab,Math,Polynomial Math,Polynomial Approximations,我有1x1024矩阵。我想估计一个多项式方程 X= (0:1023)' Y= acquired data. A 1024 element vector 然后我在MATLAB中尝试: polyfit(x,y,5) 但是MATLAB会产生异常结果并发出警告 Warning: Polynomial is badly conditioned. Add points with distinct X values, reduce the degree of the ... 我不明白我做错了什么 使现
X= (0:1023)'
Y= acquired data. A 1024 element vector
然后我在MATLAB中尝试:
polyfit(x,y,5)
但是MATLAB会产生异常结果并发出警告
Warning: Polynomial is badly conditioned. Add points with distinct X values, reduce the degree of the ...
我不明白我做错了什么
使现代化
我有一大堆这样的数字
Y=
X=0~255
polyfit(X、Y、4)
我得到了一个多项式,但它与原始曲线不匹配。
原始曲线和polyfit曲线之间是否有匹配选项?此警告是因为使用所需的多项式次数提供给
polyfit
的数据不合适。具体来说,您的数据中的可变性不足,因此您无法成功实现良好的拟合。因此,MATLAB向您发出警告,因为数据不能与所需的次数多项式正确拟合
解决这个问题的方法是要么得到更多的点,这样你就可以得到你想要的多项式次数的理想拟合,要么减少你想要的多项式次数
尝试小于5的值。。。4、3或2:
coeff = polyfit(x, y, 4);
%// or
%coeff = polyfit(x, y, 3);
%coeff = polyfit(x, y, 2);
尝试每一个程度,直到你不再得到警告。但是,如果没有实际数据,我只能推测出哪里出了问题,这是我最好的猜测。警告是因为您使用所需的多项式次数提供给
polyfit
的数据不合适。具体来说,您的数据中的可变性不足,因此您无法成功实现良好的拟合。因此,MATLAB向您发出警告,因为数据不能与所需的次数多项式正确拟合
解决这个问题的方法是要么得到更多的点,这样你就可以得到你想要的多项式次数的理想拟合,要么减少你想要的多项式次数
尝试小于5的值。。。4、3或2:
coeff = polyfit(x, y, 4);
%// or
%coeff = polyfit(x, y, 3);
%coeff = polyfit(x, y, 2);
尝试每一个程度,直到你不再得到警告。但是,如果没有实际数据,我只能推测出哪里出了问题,这是我最好的猜测。这个问题可以归因于
polyfit
从x
向量:a构建的系数矩阵的类型
什么时候
向量的元素在大小上变化过大,并且x
- 拟合多项式的次数太高
polyfit
帮助页面底部的建议,在应用polyfit
之前,首先尝试将x
向量居中并缩放:
由于Vandermonde矩阵中的列是向量x
的幂,因此对于高阶拟合,V
的条件数通常较大,导致系数矩阵奇异。在这些情况下,居中和缩放可以改善系统的数值特性,以产生更可靠的拟合
(我的重点)这个问题可以归因于
polyfit
从x
向量a构建的系数矩阵的类型
什么时候
向量的元素在大小上变化过大,并且x
- 拟合多项式的次数太高
polyfit
帮助页面底部的建议,在应用polyfit
之前,首先尝试将x
向量居中并缩放:
由于Vandermonde矩阵中的列是向量x
的幂,因此对于高阶拟合,V
的条件数通常较大,导致系数矩阵奇异。在这些情况下,居中和缩放可以改善系统的数值特性,以产生更可靠的拟合
(我的重点)谢谢。在我的例子中,有没有什么选项可以代替添加点或使用polyfit?除非我看到你的数据,否则我不能说。我在Matlab中找到了pinv()函数,这会使结果比polyfit()好吗?
polyfit
基本上通过最小二乘法找到多项式系数:pinv
主要用于polyfit
。如果您想继续使用多项式回归,您应该尝试使用“曲线拟合工具箱”中更健壮的工具:谢谢。在我的例子中,有没有什么选项可以代替添加点或使用polyfit?除非我看到你的数据,否则我不能说。我在Matlab中找到了pinv()函数,这会使结果比polyfit()好吗?polyfit
基本上通过最小二乘法找到多项式系数:pinv
主要用于polyfit
。如果您想继续使用多项式回归,您应该尝试使用“曲线拟合工具箱”中更健壮的工具:我在文档中没有看到这一点。非常好+1.@rayryeng很容易错过,但我记得有一次遇到过类似的问题。我已经对你的答案投了更高的票:)我不是有意要偷选分数的:哦,这是真的,哈哈。这不是第一次有人提出更好的答案,所以选分数会变为lol。首先对分数进行标准化和缩放是有意义的。但愿我能从直觉上想到这一点。我在文档中没有看到这一点。非常好+1.@rayryeng很容易错过,但我记得有一次遇到过类似的问题。我已经对你的答案投了更高的票:)我不是有意要偷选分数的:哦,这是真的,哈哈。这不是第一次有人提出更好的答案,所以选分数会变为lol。首先对分数进行标准化和缩放是有意义的。但愿我能从直觉上想到这一点。