曲线拟合的理论在数值分析中由详细介绍
多项式拟合方法
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 %定义变量t
f=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 np
import matplotlib.pyplot as plt
from 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 x
base=[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\C
xishu1=double(a)
xishu2=vpa(a,6) %设置精度