功能:对有理式进行预测拟合

格式:
[a,b,er]=RationalFit(x,y,m,n)
[a,b,er]=RationalFit(x,y,m)
[a,b,er]=RationalFit(x,y)

x:矩阵变量,存储需要拟合的自变量数据
y:矩阵变量,存储需要拟合的因变量数据
m:系数a的最高次数,默认为4
n:系数b的最高次数,默认为4

a:返回的拟合数据
b:返回的拟合数据
er:返回的拟合残差

说明:

1、当你无法确定一些函数表达式式时,不妨假设数据满足有理式关系,然后拟合出其关系。

2、RationalFit(x,y,m)=RationalFit(x,y,m,m)

3、本程序假设x、y满足如下表达式,然后拟合出最佳系数a、b

   y = ( a[0]+a[1]*x+a[2]*x^2+……+a[m]*x^m ) / ( b[0]+b[1]*x+b[2]*x^2+……+b[n]*x^n )

4、在使用本算法当中,需要注意,当拟合的次数m、n很高时,看你的x的数据是否比较大,比较大时可能会造成舍入误差过大，使得拟合得到的结果有一定影响,这时建议对x、y数据进行相应处理后再带入本函数进行拟合。


原理:

1、假设 x、y 数据满足如下关系

 y = ( a[0] + a[1]*x + a[2]*x^2 + …… + a[m]*x^m ) / ( b[0] + b[1]*x + b[2]*x^2 + …… + b[n]*x^n )

2、根据关系式可知,a、b同时除以一个不为0的数据,对x、y结果不影响,因为满足上面的关系,所以在b当中的数据总有一个不为0,这里假设为b[k],则上面关系式可表示成(即b[k]=1)

y = ( a[0] + a[1]*x + a[2]*x^2 + …… + a[m]*x^m ) / ( b[0] + b[1]*x + b[2]*x^2 + …… + x^k +…… + b[n]*x^n )

3、在表达式中当分母不为0时,两边同时乘以右边的分母并且移项后可以得到

y*x^k = a[0] + a[1]*x + a[2]*x^2 + …… + a[m]*x^m - b[0]*y - b[1]*x*y - b[2]*x^2*y - …… - b[n]*x^n*y

4、因为x、y已知,则上式相当于采用一个最小二乘求解线性方程组即可

PS:
本算法找到的仅是一个简单的初值测探值，未必是最优值，所以定要注意！如果有理此数不是很高,可将此值作为初始值代入非线性拟合当中进行相关拟合!

例子:

x=1:0.1:6;y=(1+2*x+3*x^2+4*x^3)/(2+3*x+4*x^2+5*x^3);//回车产生测试数据,这里 a = [1 2 3 4],b=[2 3 4 5]

[ar,br,er]=RationalFit(x,y,3)//回车得到如下结果,可以发现这里的结果是将a、b同时除以5得到的结果
ar =
[ 0.20077678201862    0.39951567103534    0.60277325466048    0.80000017332364 ]
br =
[ 0.40128583336452    0.59953553903010    0.80347077435899    1.00000000000000 ]
er =
[ 9.8735308951E-16 ]