曲线拟合的理论在数值分析中由详细介绍
多项式拟合方法
a = polyfit(x0, y0, m) x0,y0为要拟合的数据,m为拟合多项式的次数,输出的a为次数从高到低的系数
y = polyval(a, x) 多项式在x处的值
例1
某乡镇企业1990-1996 年的生产利润如下表

试预测1997 年和1998 年的利润。
matlab两种方法求解
x0=[1990 1991 1992 1993 1994 1995 1996];y0=[70 122 144 152 174 196 202];%plot(x0,y0,'*') #先做出散点图,由散点图可知拟合线性函数%拟合多项式的方法a=polyfit(x0,y0,1)y1=polyval(a,x0)%拟合任意一元函数的方法syms x %定义变量tf=fittype('a1*x + a0','independent','x','coefficients',{'a1','a0'})%自定义拟合函数,可以是知数函数等cfun=fit(x0',y0',f) %根据自定义的函数拟合x,y;注意:x,y必须是列向量y1=cfun(x0);%作图plot(x0,y1,x0,y0,'r*')>>> y97=polyval(a,1997)>>> y98=polyval(a,1998)>>> y97=cfun(1997)>>> y98=cfun(1998)

python两种方法求解
import numpy as npimport matplotlib.pyplot as pltfrom scipy.optimize import curve_fit#拟合x0 = np.array([1990, 1991, 1992, 1993, 1994, 1995, 1996])y0 = np.array([70, 122, 144, 152, 174, 196, 202])#拟合多项式coefficients= np.polyfit(x0, y0, 1)#拟合一次函数得到的系数p1=np.poly1d(coefficients)#合成的一次多项式y1=p1(x0)#拟合的y值#拟合任意一元函数的方法fun = lambda x, a0, a1: a1*x + a0 #自定义函数,可以是指数函数等别的类型函数a,pcov=curve_fit(fun, x0, y0)#a是最小二乘法得到的系数,pcov是参数的估计协方差y1=fun(x0,a[0],a[1])#作图plt.figure()plt.plot(x0, y0, '*', label='original values')plt.plot(x0, y1, 'r--', label='poly_fit values')plt.xlabel('x axis')plt.ylabel('y axis')plt.legend(loc="lower right")plt.title('Poly Fitting (y={:.3f}x+{:.3f})'.format(a1, a0))#格式化输出>>> p1(1997)233.42857142858702>>> p1(1998)253.92857142858702>>> fun(1997,a0,a1)233.42857142858702>>> fun(1998,a0,a1)253.92857142858702
matlab图形窗口的多项式拟合
plot(x,y,’r*’)—>工具—>基本拟合
matlab强大的拟合工具箱Curve Fitting
函数逼近
- 用一个简单的函数逼近较为复杂的连续函数
- 选择一组基
构造
来逼近
,使得
最小,利用极值的充分必要条件得下列等式
例2
- 求
在
中的最佳平方逼近多项式。
matlab求解
syms xbase=[1,x^2,x^4];y1=base.'*base % a'对a的每个元素取共轭,然后再转置; a.'只对a转置y2=cos(x)*base.'r1=int(y1,-pi/2,pi/2)%int积分r2=int(y2,-pi/2,pi/2)a=r1\r2%/(向右倒称为右除) 右除 AB=C A=C/B %\(向左倒称为左除) 左除 AB=C B=A\Cxishu1=double(a)xishu2=vpa(a,6) %设置精度