萍聚社区-德国热线-德国实用信息网

 找回密码
 注册

微信登录

微信扫一扫,快速登录

萍聚头条

查看: 4445|回复: 2

[工程类] polyfit的一个问题

[复制链接]
发表于 2007-9-19 03:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

x
一组测量的数据x=[1020 657.61 286.4 154.35 89.529 67.027 48.821 39.406 15.286] 和y=[5 10 15 20 25 30 35 40 100] 想用多项式方程式,用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 编辑 ]
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2007-9-19 17:57 | 显示全部楼层
出错原因是因为函数 warnIfLargeConditionNumber(R) 检查出错。
这个函数是计算矩阵逆之前检查矩阵逆是否在有效计算范围内的一个方法。

在这里,出错是因为你的数据在 7 次方的时候,太大了。其实,4次方的时候,就已经大了。

从你的数据来看,是单调且都是正,所以可以用一个简单的方法,骗过 polyfit,
就是用 [p,S,mu] = polyfit(x,y,7) 来代替原来的 [p] = polyfit(x,y,7)

因为,当函数计算mu的时候,会减去一个基础值,这样就不会在运算中产生大数运算错误了。
你的函数用上面的结果算得:

>> [p,S,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

试试吧?
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2007-9-20 13:20 | 显示全部楼层
在这里,我忘记说了:
因为带mu得时候,x需要用mean 和 std 修正,就是说,用 (x - mean(x) )/ std(x)

下面是我用的代码:
Y =[1020        657.61        286.4        154.35        89.529        67.027        48.821        39.406        15.286];
X =[5 10 15 20 25 30 35 40 100];
[p,S,mu] = polyfit(X,Y,7);
Xs= (X - mean(X) )/ std(X);     // same as:  Xs= (X - mu(1))/mu(2);
As=[Xs.^7;Xs.^6;Xs.^5;Xs.^4;Xs.^3;Xs.^2;Xs.^1;Xs.^0];
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 =[1020        657.61        286.4        154.35        89.529        67.027        48.821        39.406        15.286];
y =[5 10 15 20 25 30 35 40 100];
[p,S,mu] = polyfit(x,y,7);
Xs= (x - mean(x) )/ std(x);
As=[Xs.^7;Xs.^6;Xs.^5;Xs.^4;Xs.^3;Xs.^2;Xs.^1;Xs.^0];
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
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

手机版|Archiver|AGB|Impressum|Datenschutzerklärung|萍聚社区-德国热线-德国实用信息网 |网站地图

GMT+2, 2024-4-28 11:53 , Processed in 0.054802 second(s), 19 queries , MemCached On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表