polyfit的一个问题
一组测量的数据x= 和y= 想用多项式方程式,用f= polyfit(x,y,7) 出现下面警告Warning: Polynomial is badly conditioned. Remove repeated data points
or try centering and scaling as described in HELP POLYFIT.
(Type "warning off MATLAB:polyfit:RepeatedPointsOrRescale" to suppress this warning.)
> In D:\MATLAB6p5\toolbox\matlab\polyfun\polyfit.m at line 75
算出来的coefficient不对,但是如果把指数降到3次方,也就是只取4个点的值,就没问题了。
是不是因为测出来的值误差大于这个多项式能承受的啊,所以得不出答案来,如果是这样,我该用哪个命令来求解呢?
[ 本帖最后由 hiflyde 于 2007-9-19 15:38 编辑 ] 出错原因是因为函数 warnIfLargeConditionNumber(R) 检查出错。
这个函数是计算矩阵逆之前检查矩阵逆是否在有效计算范围内的一个方法。
在这里,出错是因为你的数据在 7 次方的时候,太大了。其实,4次方的时候,就已经大了。
从你的数据来看,是单调且都是正,所以可以用一个简单的方法,骗过 polyfit,
就是用 = polyfit(x,y,7) 来代替原来的 = polyfit(x,y,7)
因为,当函数计算mu的时候,会减去一个基础值,这样就不会在运算中产生大数运算错误了。
你的函数用上面的结果算得:
>> = polyfit(x,y,7)
p =
1.0e+004 *
-1.2997 1.7265 3.4690 -0.8058 -2.7935 -1.1679 -0.1063 0.0137
试试吧? 在这里,我忘记说了:
因为带mu得时候,x需要用mean 和 std 修正,就是说,用 (x - mean(x) )/ std(x)
下面是我用的代码:
Y =;
X =;
= polyfit(X,Y,7);
Xs= (X - mean(X) )/ std(X); // same as:Xs= (X - mu(1))/mu(2);
As=;
Yf=p*As;
Yf 是 1020.1986 656.1428 291.0605 146.0971 98.3321 61.3679 50.8525 39.0916 15.286
如果x y互换,也一样:
x =;
y =;
= polyfit(x,y,7);
Xs= (x - mean(x) )/ std(x);
As=;
Yf=p*As;
Yf 是 5.0000 10.0000 14.9999 20.0040 24.9038 30.3503 34.3624 40.4087 99.9707
p =
1.0e+004 *
-1.2997 1.7265 3.4690 -0.8058 -2.7935 -1.1679 -0.1063 0.0137
页:
[1]