hiflyde 发表于 2007-9-19 02:20

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 编辑 ]

recbio 发表于 2007-9-19 16:57

出错原因是因为函数 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

试试吧?

recbio 发表于 2007-9-20 12:20

在这里,我忘记说了:
因为带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]
查看完整版本: polyfit的一个问题