06 数学软件与建模---拟合

一、知识储备

1.曲线拟合问题的提法

已知一组(二维)数据,即平面上 n个点(xi,yi)  i=1,…,n, 寻求一个函数(曲线)y=f(x), 使 f(x) 在某种准则下与所有数据点最为接近,即曲线拟合得最好.

abb52d504ad142f597f3c22346b18643.png

2.拟合与插值的关系

1)问题:

给定一批数据点,需确定满足特定要求的曲线或曲面

2)解决方案:

若要求所求曲线(面)通过所给所有数据点,就是插值问题

若不要求曲线(面)通过所有数据点,而是要求它反映对象整体的变化趋势,这就是数据拟合,又称曲线拟合或曲面拟合.

函数插值与曲线拟合都是要根据一组数据构造一个函数作为近似,由于近似的要求不同,二者在数学方法上是完全不同的.

3)实例:

 实例:下面数据是某次实验所得,希望得到X和 f之间的关系?

682c4ca1d494491c93ea29f37f16bfa7.png

ba9bfc9243ea429c90fdbb71d102dfcf.png

3.曲线拟合的常用方法

3.1 线性最小二乘法

1)线性最小二乘法的基本思路

748d8e5dccf745b59f96c2e7aa2106ac.png 2)线性最小二乘法的求解:预备知识

8eb8f1a7927944eb808f763cd8b220ee.png

3cc425659a864c408d980d56fce09649.png

 3)线性最小二乘拟合 f(x)=a1r1(x)+ …+amrm(x)中函数{r1(x),…,rm(x)}的选取  

31e30d058027443fa9f1c8927924c4f0.png

 二、用MATLAB解拟合问题

1.线性最小二乘拟合 

c804a0f2b2e444078becf16cc355889d.png

EG1: 

a2eb5cdca1d34411b554c3287e9ff026.png解法1.用解超定方程的方法

ee799abfdb424b228d0786c96b142978.png

1)输入以下命令:

x=0:0.1:1;
y=[-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
R=[(x.^2)' x' ones(11,1)];%生成11行1列的矩阵
A=R\y'

 80eaba0fdd06411381060f253363f0b0.png

 拟合结果:50c5c371b20e4ad3b293385a135cf711.png

 解法2.用多项式拟合的命令

 x=0:0.1:1;
 y=[-0.447 1.978 3.28 6.16 7.08 7.34 7.66   9.56 9.48 9.30 11.2];
 A=polyfit(x,y,2)%输出拟合的多项式系数
 z=polyval(A,x);%拟合下的曲线
 plot(x,y,'k+',x,z,'r') %作出数据点和拟合曲线的图形

8a23fdf920064097afd469aa007e31c3.png

656a4708ec08476a83ba40e54a771a2f.png

2.作非线性最小二乘拟合

ed0666709c7f45238d4e97f803af3918.png

400561e4339647219d05c1721f9815b1.png7e478ed0b630488d8f3d1a882fd86a55.pngbd3cfd28ca004ec0a0b7691b4973b2b3.png EG2:

fd11e1e47f9042d2bcab15189dc8bf9a.png 38ac89eaa6cf451786735f89d26d15bb.png

1)编写M文件 curvefun1.m

function f=curvefun1(x,tdata)
f=x(1)+x(2)*exp(-0.02*x(3)*tdata)   
%其中 x(1)=a;   x(2)=b;x(3)=k;
%关于x和tdata的函数

2)输入命令 

tdata=100:100:1000;
cdata=1e-03*[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59];
x0=[0.2,0.05,0.05];%初值
x=lsqcurvefit ('curvefun1',x0,tdata,cdata)
f= curvefun1(x,tdata) 
t=[0:1:1000];
plot(tdata,cdata,'r+',t,curvefun1(x,t),'b')

运行结果:

ab3725eb676a4d7d9cda846784fc0325.png 结论:a=0.0063, b=-0.0034, k=0.2542 

b3151f6baa3f4449bd0ab0ca402debc6.png

 527bd137001a48e4b892332725e2fbf8.png

function f=curvefun2(x)
    tdata=100:100:1000;
    cdata=1e-03*[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59];
    f=x(1)+x(2)*exp(-0.02*x(3)*tdata)- cdata
x0=[0.2,0.05,0.05];
x=lsqnonlin('curvefun2',x0)
f= curvefun2(x)

 三、练习

1.

e40a884a9a8b4982a0cffaa998ec0a9c.png

clc,clear
x=1:1:10;
y=x.^3-6*x.^2+5*x-3;
xi=rand;%产生0-1的随机数
Y=y+xi;
%一次
f1=polyfit(x,Y,1)%输出多项式次数
y1=polyval(f1,x);%计算各点的拟合值
subplot(2,2,1)
plot(x,y,'x',x,y1)
title("一次拟合曲线")
grid on
%二次
f2=polyfit(x,Y,2)%输出多项式次数
y2=polyval(f2,x);%计算各点的拟合值
subplot(2,2,2)
plot(x,y,'o',x,y2)
title("二次拟合曲线")
grid on
%三次
f3=polyfit(x,Y,3)%输出多项式次数
y3=polyval(f3,x);%计算各点的拟合值
subplot(2,2,3)
plot(x,y,'o',x,y3)
title("三次拟合曲线")
grid on
%四次
f4=polyfit(x,Y,4)%输出多项式次数
y4=polyval(f4,x);%计算各点的拟合值
subplot(2,2,4)
plot(x,y,'o',x,y4)
title("四次拟合曲线")
grid on

14ea074908ac43f8bb249bca462aabf3.png

 2.

9c621c242e4245c79e9409cf93da6b27.png

function f=curvefun4(x,tdata)
V=10;
f=V-(V-x(1))*exp(-tdata./x(2))
%x(1)=v0;x(2)=T
tdata=[0.5 1 2 3 4 5 7 9];
vdata=[6.36 6.48 7.26 8.22 8.66 8.99 9.43 9.63];
%x0=[0.2,0.05];
x0=[0.1 1];
x=lsqcurvefit('curvefun4',x0,tdata,vdata)
f=curvefun4(x,tdata)
p=linspace(tdata(1),tdata(end));
plot(tdata,vdata,"ro",p,curvefun4(x,p),'b-')

ef4196df990e482d93e9805959c1256f.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值