sincereFSO 发表于 2006-9-14 11:55

求教:三次多项式曲线

我用matlab的三次多项式画出了曲线,但是曲线尾处呈陡降趋势,想要把曲线尾处变成平缓趋于0的曲线,请问高手如何下手阿?本人不胜感激!

[ 本帖最后由 ericlin 于 2006-9-18 21:22 编辑 ]

happy 发表于 2006-9-14 16:20

set(gca,'XScale', 'log')
更换成对数坐标

sincereFSO 发表于 2006-9-14 20:22

在线等,急急

对于回帖先表示感谢了,其实我的曲线本来是通过公式得出的,然后通过下面的程序拟合,但是仿真出来后发现曲线和实际不符合,想修正一下,把尾部的陡降,变成趋向于0,请问大虾,我是不是要修改y中的数据,一步一步的趋近阿?还有其他办法吗?请指点。在线等
x=;
y=;
b=polyfit(x,y,3)
x1=0.46:.01:2.04;
fy=b(1)*x1.^3+b(2)*x1.^2+b(3)*x1+b(4);
plot(x,y,'ko',x1,fy,'markerfacecolor','k','linewidth',2)
axis tight

sincereFSO 发表于 2006-9-14 22:14

x=;
y=;
b=polyfit(x,y,3)
x1=0.46:.01:2;
fy=b(1)*x1.^3+b(2)*x1.^2+b(3)*x1+b(4);
plot(x,y,'k',x1,fy,'markerfacecolor','k','linewidth',2)
axis tight

以上程序是曲线拟合,可是相差比较大,最好了多项式拟合,因为我需要各项系数,哪位大侠出手相助阿,小妹在此恭候阿,先谢谢了

eight 发表于 2006-9-14 22:36

原帖由 sincereFSO 于 2006-9-14 22:14 发表
x=;
y=;
b=polyfit(x,y,3)
x1=0.46:.01:2;
fy=b(1)*x1.^3+b(2)*x1.^2+b(3)*x1+b(4);
plot(x,y,'k',x1,fy,'markerfacecolor','k','linewidth',2)
axis tight

以上程序是曲线拟合,可是相差比较大,最好了 ...


b=polyfit(x,y,3) 改为4或者5就可以了,三次的话恐怕难以做到。

另外,fy=b(1)*x1.^3+b(2)*x1.^2+b(3)*x1+b(4);语句可更简洁地写成fy=polyval(b,x1);

bainhome 发表于 2006-9-15 02:38

嗯,cftool计算得到的结果中4和5次的结果残差均比较小,以下为5次的参数:
Linear model Poly5:
       f(x) = p1*x^5 + p2*x^4 + p3*x^3 + p4*x^2 + p5*x + p6
Coefficients (with 95% confidence bounds):
       p1 =   -0.1122(-0.1658, -0.05854)
       p2 =       1.247(0.9113, 1.583)
       p3 =      -4.937(-5.748, -4.127)
       p4 =       9.075(8.136, 10.01)
       p5 =      -7.891(-8.41, -7.373)
       p6 =       2.624(2.515, 2.733)

Goodness of fit:
SSE: 0.001419
R-square: 0.9989
Adjusted R-square: 0.9989
RMSE: 0.003128
=================================================
1stopt中我随便选了一个拟合公式库中的函数算了一下:
...
Function: y = (p1+p2*x+p3*x^2+p4*x^3+p5*x^4+p6*x^5)^2
...
R-Square: 0.999822989654528
Determination Coef. (DC): 0.999771955096217

Parameters Name        Parameter Value
===============        ===============
p1              1.08984503047167
p2              -0.207316689211218
p3              -2.05068983356183
p4              1.1617349438493
p5              0.255140400813106
p6              -0.184502255267234
===========================================
总体后者比较好用,不过对此问题而言二者基本区别不大(增大项次数到7次cftool的残差也能到0.9998以上)但是从一般应用角度,感觉两者都够了。

[ 本帖最后由 bainhome 于 2006-9-15 02:40 编辑 ]

sincereFSO 发表于 2006-9-15 09:04

在线等,急急

感谢这么多好心人前来相助,这个还有一个要求就是拟合后的曲线要都〉0,用5次拟合还是有〈0的地方,这个还可以怎么修改阿?

sincereFSO 发表于 2006-9-16 09:36

高手出马阿

通过多次多项式拟合,虽然曲线趋近了,但是如果x扩大到5或者更高的话,曲线尾部就不趋于0了,却变的很大,请问高手有什么方法解决阿,难道是多项式拟合是不能实现的吗?

bainhome 发表于 2006-9-16 10:12

什么叫“变得很大”?
这是7次曲线数据+图象,没感觉有多大。
Linear model Poly7:
       f(x) = p1*x^7 + p2*x^6 + p3*x^5 + p4*x^4 + p5*x^3 +
                  p6*x^2 + p7*x + p8
Coefficients (with 95% confidence bounds):
       p1 =      0.8434(0.6802, 1.007)
       p2 =       -8.09(-9.519, -6.661)
       p3 =       32.11(26.89, 37.34)
       p4 =      -67.65(-77.96, -57.34)
       p5 =       80.18(68.34, 92.02)
       p6 =      -51.51(-59.4, -43.61)
       p7 =       15.04(12.22, 17.86)
       p8 =      -0.928(-1.345, -0.5109)

Goodness of fit:
SSE: 0.0002652
R-square: 0.9998
Adjusted R-square: 0.9998
RMSE: 0.001362

[ 本帖最后由 bainhome 于 2006-9-16 10:13 编辑 ]

sincereFSO 发表于 2006-9-16 10:31

非常感谢

你那个图沃搞出来了,只是横坐标再加大的话,纵坐标就不是无限趋于0了。

bainhome 发表于 2006-9-16 10:37

你这张图是用你4楼给的数据拟合的???,该数据最大到2,你的bmp图里2到3之间的数据是怎么回事儿?
如果你想用2以下的数据拟合出的公式去预测2到3之间的,那我的建议是您应该看看关于拟合的基本理论——它的预测性在很多情况下是不存在的。
另外,多项式的拟合功能有限,用非线性公式nlinfit,lsqcurvefit等试试,如果没有基本公式的模型或者初值难以预测,改用1stopt,但是无论哪一种方式,请把你所有的数据都用上。

[ 本帖最后由 bainhome 于 2006-9-16 10:40 编辑 ]

sincereFSO 发表于 2006-9-16 10:43

对,我的数据只有那么多,但是想用有限的数据预测更大的区间,而且目的就是想趋于0,才符合实际。不知哪个方法更适合这种想法。

sincereFSO 发表于 2006-9-16 10:51

a= – 0.000545λ2 + 0.002λ – 0.0038                  
      b=0.00628λ2 – 0.0232λ + 0.0439                  
      c= – 0.028λ2 + 0.101λ – 0.18                           
      d= – 0.228λ3 + 0.922λ2 – 1.26λ + 0.719      
          hE=5
         τ= a•hE3 + b•hE2 + c•hE +d               
AS=4.4961*τ
通过以上公式可以仿出λ=0.5~2的图形,但是在1以后曲线低于0,因此需要修正此曲线,使其与已有公式相似,但是低端趋于0,这才符合实际,因此我采用多项式拟合解决不了,请教大侠有什么更好的方法呢,非常感谢!

bainhome 发表于 2006-9-16 10:56

数据拟合出公式然后进行预测据我所知也是一个试探的过程,哪个好哪个不好难以一言蔽之,不过如果就这么百来个数据构成的样本,我想无论哪种拟合也无法一次性精确实现预测并满足用户的要求,所以建议用1stopt的拟合公式库,寻找多个残差满足要求的公式,在MATLAB中挨个试探其在2~3之间的吻合性,由于拟合与数值逼近理论比较多,牵扯面也比较广,我想我所说也未必十分准确,仅供参考。
BTW:你想实现的目的,在你前面的帖子里表达的非常糟糕,5~6个回合之后才让人知道你到底要干什么。这对于解答者的时间,也是一种浪费,建议您注意提问的技巧。

[ 本帖最后由 bainhome 于 2006-9-16 11:18 编辑 ]

sincereFSO 发表于 2006-9-17 08:41

非常感谢这么多好心人的热情帮助,也谢谢指点我发帖技巧的那位好心人,由于是新手,请见谅,下次一定注意
页: [1]
查看完整版本: 求教:三次多项式曲线