alenku 发表于 2011-7-17 23:22:05

怎样将拟合函数转化成多项式

本帖最后由 alenku 于 2011-7-24 16:29 编辑

大家好,一个问题:
一组转速与功率的测试数据按5次方拟合,得出多项式系数A_Pe,再转化成多项式Pe方程,从而按功率与转矩的转化关系求得转矩的方程T,问这个时候怎样求出方程T的多项式系数出来?

%下面是我编的程序,结果有错,请指正
clc
clear
%拟合功率曲线
n0=;%试验转速测量点(r/min)
Pe0=;%对应转速下功率(kW)
A_Pe=polyfit(n0,Pe0,5);];%5次方拟合,求得多项式系数
syms n%定义转速n为变量
Pe=poly2sym(A_Pe,'n');];%转化成多项式
T=9550.*Pe./n;%求转矩方程
A_T=sym2poly(T)%求转矩方程的多项式系数

结果:
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

T =

5249781316426995/549755813888/n*(-8680719136116585/162259276829213363391578010288128*n^5+5024698856262647/4951760157141521099596496896*n^4-2316740582102601/302231454903657293676544*n^3+2062438286148859/73786976294838206464*n^2-1072631474575111/36028797018963968*n+6426375114653675/281474976710656)

??? Error using ==> sym/sym2poly
-45571877133935132398251961212075/89202980794122492566142873090593446023921664*n^4+26378570176279735097433320955765/2722258935367507707706996859454145691648*n^3-12162381422930435369657816113995/166153499473114484112975882535043072*n^2+10827349980907992408912576048705/40564819207303340847894502572032*n-5631080674635955042912275521445/19807040628566084398385987584+33737064009260250867817845956625/154742504910672534362390528/n is not a polynomial.

请问怎样才能求得方程T的多项式系数?

注:MATLAB版本:6.5

bainhome 发表于 2011-7-18 00:51:52

本帖最后由 bainhome 于 2011-7-18 00:59 编辑

提如下建议:
1.这样的结果看起来很累,不妨用:digits(4);
vpa(Pe)这样的类似方式调整显示结果形式;
2.6.5下似乎也有cftool可以进行GUI方式的拟合结果显示,比代码形式直观;
3.出错结果最后一行提示十分明确:T不是多项式,因为用拟合多项式除以自变量n,原常数项变为倒数,所以自然不会存在“多项式系数”,sym2poly当然无法求得结果。
4.就此例而言,这个非线性的转矩方程系数其实就是拟合多项式系数和9550的乘积,不需要用sym2poly弄得太复杂。
5.结果说明这个方程从数学角度5次拟合极其不理想,最高次项达到10^-17次量级,可以想象其对震荡的敏感:因此,这应该是一次失败的拟合。从图形看,其他拟合方式结果会好些。下面是随便拟合的一组结果
General model Gauss1:   f(x) =a1*exp(-((x-b1)/c1)^2)Coefficients (with 95% confidence bounds):       a1 =       95.08(92.17, 97.99)       b1 =      6563(6258, 6867)       c1 =      4189(3898, 4481)
Goodness of fit:SSE: 14.42R-square: 0.998Adjusted R-square: 0.9976RMSE: 1.201

alenku 发表于 2011-7-19 22:33:16

2# bainhome

谢谢bainhome
页: [1]
查看完整版本: 怎样将拟合函数转化成多项式